Узел - не запускает пакеты Webpack - PullRequest
0 голосов
/ 15 января 2019

Я связываю свое приложение с помощью веб-пакета и проверяю, указывать цель для "узла" (в противном случае сборка веб-пакета завершится неудачно).

С моей текущей конфигурацией сборка прошла успешно, но когда я пытаюсь запустить ее с использованием узла, я получаю ошибку:

C: \ Users \ myuser \ Desktop \ myproject \ dist \ app.js: 20 / ****** /
modules [moduleId] .call (module.exports, module, module.exports, webpack_require ); ^

TypeError: Невозможно прочитать свойство 'call' из неопределенного

Относится к строке внутри функции webpackBootstrap, вставленной в начало app.js. Такое ощущение, что узел не совместим с Webpack, хотя из того, что я понял, должно быть.

Я сомневаюсь, что это имеет отношение к проблеме, но для того, чтобы у вас была полная картина:

Я передаю ts, и каждый файл из src экспортируется как отдельный кусок в dist вместо связывания всего вместе, чтобы динамически импортировать файлы по требованию во время выполнения.

Например:

  • ЦСИ / app.ts
  • ЦСИ / compA.ts
  • ЦСИ / compB.ts

станет:

  • расстояние / app.js
  • расстояние / compA.js
  • расстояние / compB.js

Вот мой webpack.config.js:

const path = require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const { CheckerPlugin } = require('awesome-typescript-loader');
const glob = require('glob');

let entry = {};

glob.sync('./src/**/*.*').forEach(component => {
    let name = component.match(/.*\/(.*)\..*/)[1];

    entry[name] = component;
});

module.exports = {
    mode: 'development',
    entry,
    target: 'node',
    resolve: {
        extensions: ['.ts', '.tsx', '.js', '.jsx']
    },
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './dist'
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                loader: 'awesome-typescript-loader'
            }
        ]
    },
    plugins: [
        new CleanWebpackPlugin(['dist']),
        new CheckerPlugin()
    ],
    output: {
        filename: (chunkData) => {
            let name = chunkData.chunk.name;
            let src = chunkData.chunk.entryModule.id;

            let path = src.split('/');
            let dir = path[path.length -2];
            let pathPrefix = dir !== 'src' ? dir + '/' : '';

            return pathPrefix + name + '.js';
        },
        path: path.resolve(__dirname, 'dist'),
        publicPath: '/'
    },
    optimization: {
        splitChunks: {
            chunks: 'all'
        },
    },
};

1 Ответ

0 голосов
/ 16 января 2019

Мне нужно было включить внешние узлы в конфигурацию.

const path = require('path');
const nodeExternals = require('webpack-node-externals');
module.exports = {
  target: "node",
  entry: {
    app: ["./back.js"]
  },
  output: {
    path: path.resolve(__dirname, "../build"),
    filename: "bundle-back.js"
  },
  externals: [nodeExternals()],
};

https://medium.com/code-oil/webpack-javascript-bundling-for-both-front-end-and-back-end-b95f1b429810

...