Webpack 4, как импортировать модуль в другой модуль, которые являются точками входа? - PullRequest
1 голос
/ 08 июня 2019

Я новичок в 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, как ожидалось.

1 Ответ

0 голосов
/ 16 июля 2019

С помощью веб-пакета я добавляю специальную сборку Phaser следующим образом, я надеюсь, что это то, что вы ищете, или, по крайней мере, даст вам представление о том, как мы можем сделать с веб-пакетом

phaser build file

entry point for the phaser chunk

спасибо.

...