Webpack 4,如何将一个模块导入到都是入口点的另一个模块中?

时间:2019-06-08 12:31:50

标签: javascript node.js webpack phaser-framework

我是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.min.js中的“ Phaser”对象,该对象是从./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中拉出来的),一切正常。但这就是完整的移相器库,我不想要。我想导入在/build/phaser.min.js

中存在的入口点1中创建的自定义版本。

如果我尝试从/build/phaser.min.js导入,则会出现此错误:

“ TypeError:超级表达式必须为null或函数”

据我所知,基本上是说Phaser对象/模块是未定义的,因此TestScene并未按预期的那样扩展Phaser.Scene。

1 个答案:

答案 0 :(得分:0)

在使用webpack时,我按照以下方式添加了特定的相位器版本,希望这是您正在寻找的东西,或者至少会让您知道如何使用webpack

phaser build file

entry point for the phaser chunk

谢谢。