使用Webpack打包非本地npm模块

4

描述

我有一个使用 nodejs + TypeScript + express 的项目,目前源代码的 *.ts 文件由 webpack 打包,同时利用 webpack-node-externals 忽略了 node_modules

当我在 Docker 中部署 bundle.js 时,我需要在目标镜像上运行 npm i --production 来安装依赖项,这会安装在 package.json 中列出的所有模块。

问题:

如果我只使用 lodash 中的一个函数,并不是使用其中的原生部分,那么整个 lodash 模块(4.8MB)仍然会被安装(这是预期的)。

这导致了一个庞大的 node_modules 文件夹,在其中,包内的函数并不总是在 bundle.js 中使用。在使用 Docker 容器化应用程序时,这个问题尤其普遍。

有没有办法在 Webpack 中打包非原生模块,同时保留原生模块?

1个回答

1
这与https://stackoverflow.com/a/54393299/2234013非常相似 - 我相信您正在寻找nodeExternals({ whitelist })babel-loaderexclude
  // excerpt from https://stackoverflow.com/a/54393299/2234013
  externals: [
    nodeExternals({
      whitelist: [/lodash/] 
    })
  ],
  ...
  module: {
    rules: [
      {
        ...
        exclude: /node_modules\/(?!(lodash).*/,
        use: {
          loader: 'babel-loader',
          ...
        }
      }
    ]
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接