Nodo: no se pueden ejecutar los paquetes de Webpack

0

Estoy empaquetando mi aplicación usando el paquete web y me aseguro de especificar el destino en "nodo" (de lo contrario, la compilación del paquete web falla).

Con mi configuración actual, la compilación es exitosa, pero cuando intento ejecutarla usando el nodo, aparece un error:

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

TypeError: Cannot read property 'call' of undefined

Se refiere a una línea dentro de la función webpackBootstrap inyectada al principio de app.js. Parece que el nodo no es compatible con Webpack, aunque por lo que entendí que debería ser.

Dudo que sea relevante para el problema, pero para que tenga la imagen completa:

Estoy transpilando ts y exportando cada archivo de src como un fragmento separado en dist en lugar de agrupar todo, para importar archivos dinámicamente a pedido en tiempo de ejecución.

Por ejemplo:

  • src / app.ts
  • src / compA.ts
  • src / compB.ts

se convertirá:

  • dist / app.js
  • dist / compA.js
  • dist / compB.js

Aquí está mi 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'
        },
    },
};
-2

Necesitaba incluir externos de nodo en la configuración.

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