【问题标题】:Why to use webpack-node-externals in node?为什么在节点中使用 webpack-node-externals?
【发布时间】:2019-03-13 21:00:26
【问题描述】:

我正在使用 webpack 来捆绑我的 typescript nodejs 代码。

我使用webpack-node-externals 来避免编译时node_modules 中的错误。

webpack-node-externals 表示,允许您定义外部 - 不应捆绑的模块。

但是为什么呢? Webpack 应该捆绑我开始捆绑所需的所有内容,对吗?它可以提取和删除我不使用的模块。 (例如摇树)。

如果我使用 webpack-node-externals,那么我必须在我的 prod 文件夹中执行 npm i 以获取所有依赖项。

我认为这是错过了 webpack 可以做到的点。对吧?

【问题讨论】:

  • 那么我将不得不在我的 prod 文件夹中执行 npm i 以获取所有依赖项。 - 这是您可能应该做的任何事情。 Webpack 不能捆绑 Node 原生模块,尽管它们很常见。看来你误解了 Webpack 在 Node 应用中的作用。你有可能根本不需要它。
  • 是的,您可能在节点应用程序上不需要它。
  • webpack 无法捆绑 fs、path 之类的东西,以及您安装的一些二进制模块。

标签: node.js webpack


【解决方案1】:

这是因为 node_modules/ 中的 二进制依赖,如下所述:

https://archive.jlongster.com/Backend-Apps-with-Webpack--Part-I

Webpack 将从 node_modules 文件夹中加载模块并捆绑它们 in. 这对于前端代码很好,但后端模块通常 没有为此做好准备(即以奇怪的方式使用 require )甚至 更糟糕的是二进制依赖。

我经历了这个解释,你可以在这里看到我的研究: https://github.com/ApolloTang/wf-backend-with-webpack-explained/tree/main/steps

【讨论】:

    【解决方案2】:

    我认为你是对的,在你的情况下,捆绑到一个文件中会更有意义。 webpack-node-external 似乎是为使用 NodeJS 库而不是独立应用程序而设计的。来自他们的doc

    例如,在编写节点库时,您可能希望将代码拆分为多个文件,并使用 Webpack 打包它们。但是 - 您不希望将代码与其整个 node_modules 依赖项捆绑在一起,原因有两个:

    1. 它会使你的库在 npm 上膨胀。
    2. 它违背了整个 npm 依赖管理。如果您正在使用 Lodash,并且您的库的使用者也具有相同的 Lodash 依赖项,那么 npm 会确保它只会被添加一次。但是在你的库中捆绑 Lodash 实际上会使其包含两次,因为 npm 不再管理这种依赖关系。

    作为库的使用者,我希望库代码仅包含其逻辑,并仅声明其依赖项,以便我可以将它们与我项目中的其余依赖项合并/解析。将代码与依赖项捆绑在一起几乎是不可能的。

    我不同意那些暗示 Webpack 不是为捆绑 Node 脚本而设计的 cmets,considering that Webpack has a specific setting for just that (target)。不幸的是,有太多的第三方库不能很好地与 Webpack 配合使用(正如我今天刚刚发现的那样),所以务实地说,你最好还是在分发文件夹中安装模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多