Piszę kod frontendu za pomocą ECMAScript 6 (przeniesiony za pomocą BabelJS, a następnie przeglądam w przeglądarce za pomocą Browserify), dzięki czemu mogę mieć klasę w jednym pliku, wyeksportować ją i zaimportować w innym pliku plik.Eksportowanie klasy za pomocą ES6 (Babel)
Droga Robię to:
export class Game {
constructor(settings) {
...
}
}
A potem na pliku, który importuje klasę robię:
import {Game} from "../../lib/pentagine_browserified.js";
var myGame = new Game(settings);
I następnie skompilować go z grunt
, to moja Gruntfile
:
module.exports = function(grunt) {
"use strict";
grunt.loadNpmTasks('grunt-babel');
grunt.loadNpmTasks('grunt-browserify');
grunt.initConfig({
"babel": {
options: {
sourceMap: false
},
dist: {
files: {
"lib/pentagine_babel.js": "lib/pentagine.js",
"demos/helicopter_game/PlayState_babel.js": "demos/helicopter_game/PlayState.js"
}
}
},
"browserify": {
dist: {
files: {
"lib/pentagine_browserified.js": "lib/pentagine_babel.js",
"demos/helicopter_game/PlayState_browserified.js": "demos/helicopter_game/PlayState_babel.js"
}
}
}
});
grunt.registerTask("default", ["babel", "browserify"]);
};
Jednak na wywołanie new Game(
, otrzymuję fo Błąd llowing:
Uncaught TypeError: undefined is not a function
Jak tak, to co zrobiłem było analizować kod wygenerowany przez Babel i Browserify i znalazłem ten wiersz na PlayState_browserified.js
:
var Game = require("../../lib/pentagine_browserified.js").Game;
postanowiłem wydrukować wyjście require
:
console.log(require("../../lib/pentagine_browserified.js"));
I to jest tylko pusty przedmiot. Postanowiłem sprawdzić plik pentagine_browserified.js
:
var Game = exports.Game = (function() {
Wydaje się, że jest prawidłowo eksportu klasę, ale z jakiegoś innego powodu nie jest on wymagany w innym pliku.
Ponadto jestem pewien, że plik jest wymagany, ponieważ zmiana ciągu znaków "../../lib/pentagine_browserified.js"
powoduje wyprowadzenie błędu Not Found
, więc na pewno trafi na właściwy plik.
potrzebujesz 'domyślnej gry eksportu' –