Я новичок в Webpack, поэтому мои условия могут быть не совсем правильными. Я пытаюсь сначала создать собственный модуль Phaser, а затем импортировать его в другую точку входа, которая зависит от него.
РЕДАКТИРОВАТЬ: я пытался использовать SplitChunks, динамический импорт и псевдонимы. Но безрезультатно. Есть ли способ сделать это с помощью плагинов или методологии?
Из webpack.config.js:
entry: {
'phaser.min': './phaser-builder.js',
game: './src/index.js'
},
resolve: {
alias: {
'eventemitter3': path.resolve(__dirname, './node_modules/eventemitter3')
},
modules: [ 'node_modules/phaser/src', 'node_modules' ]
},
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js',
library: 'Phaser',
libraryTarget: 'umd',
sourceMapFilename: '[file].map',
devtoolModuleFilenameTemplate: 'webpack:///[resource-path]',
devtoolFallbackModuleFilenameTemplate: 'webpack:///[resource-path]?[hash]',
umdNamedDefine: true
},
Содержимое файла phaser-builder.js:
require('polyfills');
var CONST = require('const');
var Extend = require('utils/object/Extend');
var Phaser = {
... code ...
};
Phaser = Extend(false, Phaser, CONST);
module.exports = Phaser;
global.Phaser = Phaser;
index.js (вторая точка входа) требуется объект 'Phaser' из phaser.min.js, который создается из ./phaser-builder.js (первая точка входа), как показано ниже:
Содержимое index.js:
//import 'phaser'; //this works but it's not the custom build from entry point one.
import { Phaser } from '../build/phaser.min';
import { TestScene } from './scenes/TestScene';
const gameConfig = {
width: 680,
height: 400,
scene: TestScene
};
new Phaser.Game(gameConfig);
Содержимое TestScene.js: (импортировано в index.js)
export class TestScene extends Phaser.Scene {
preload() {
this.load.image('logo', 'assets/sprites/logo.png');
}
create() {
this.add.text(100, 100, 'Working...', { fill: '#0f0' });
this.add.image(100, 200, 'logo');
}
}
Как прокомментировано в index.js выше, если я просто использую import 'phaser';
(который, как я полагаю, извлекает данные из node_modules?), Все работает нормально. Но это полная фаза lib, которую я не хочу. Я хочу импортировать пользовательскую сборку, созданную мной в точке входа 1, которая существует в /build/phaser.min.js
Если я пытаюсь импортировать из /build/phaser.min.js, я получаю эту ошибку:
"TypeError: Супер-выражение должно быть либо нулевым, либо функцией"
Из того, что я понимаю, в основном говорится, что объект / модуль Phaser не определен, поэтому TestScene не расширяет Phaser.Scene, как ожидалось.