如何使用 `dependOn` 从主入口点捆绑单独的应用程序文件?

how to use `dependOn` to bundle separate application files from the main entry point?

我有一个后端项目,我想使用 Webpack v5 进行捆绑。

我想将一些文件拆分成它们自己的包并将它们导入到主条目中。

主条目有一个 dependOn 键,其中包含主条目将使用的文件名数组。

这是webpack.config.json:

module.exports = {
  entry: {
    app: {
      import: './index.ts',
      dependOn: 'routes'
    },
    routes: ['./routes.ts']
  },

  output: {
    filename: '[name].js',
    libraryTarget: 'commonjs2',
    path: path.resolve(__dirname, 'build')
  },

  resolve: {
    extensions: ['.ts', '.js']
  },

  target: 'node',

  externals: [
    nodeExternals()
  ],

  mode: 'production',

  optimization: {
    minimize: false,
  },

  module: {
    rules: [{ test: /\.tsx?$/, loader: 'ts-loader' }]
  },

  plugins: [
    new ContextReplacementPlugin(/any-promise/)
  ]
};

在 运行 之后,生成两个文件(app.jsroutes.js),如预期的那样。但是当 运行 使用 NodeJS 的入口点时,我收到以下错误: webpack_require.C 不存在。

通过 documentation 我看到他们的例子 dependOn 是基于包而不是独立的应用程序文件。

您可以将应用程序文件添加到 dependOn 吗?这与模块分辨率有关吗?

假设您已将 routes 导入到 app 中,并且您想将 routes 拆分为一个单独的捆绑包,而不是包含在捆绑包中 app.js ].

以下是使用 SplitChunksPlugin https://webpack.js.org/plugins/split-chunks-plugin.

的方法
module.exports = {
    entry: {
        app: "./index"
    },
    target: "node",
    optimization: {
        splitChunks: {
            cacheGroups: {
                routes: {
                    filename: "routes.js",
                    test: module => {
                        return module.resource && module.resource.includes("routes");
                    },
                    enforce: true,
                    chunks: "all"
                }
            }
        }
    }
};

Webpack 会输出两个文件,app.jsroutes.js.