为什么在节点中使用webpack-node-externals?

时间:2018-10-09 06:55:37

标签: node.js webpack

我正在使用webpack捆绑我的打字稿nodejs代码。

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

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

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

如果我使用webpack-node-externals,则必须在prod文件夹中进行npm i来获取所有依赖项。

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

2 个答案:

答案 0 :(得分:0)

我认为您的说法是正确的,将其捆绑到一个文件中会更有意义。 webpack-node-external似乎是为使用NodeJS库而不是独立应用程序而设计的。来自他们的doc

  

例如,编写节点库时,您可能需要将代码拆分为多个文件,然后使用Webpack捆绑它们。但是,由于两个原因,您不想将代码与整个node_modules依赖项捆绑在一起:

     
      
  1. 它将在npm上使您的图书馆肿。
  2.   
  3. 它与整个npm依赖项管理背道而驰。如果您使用的是Lodash,并且库的使用者也具有相同的Lodash依赖关系,则npm确保仅将其添加一次。但是将Lodash绑定到您的库中实际上会使它包含两次,因为npm不再管理此依赖项。
  4.   
     

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

我不同意Webpack并非旨在捆绑Node脚本considering that Webpack has a specific setting for just that (target)的意见。不幸的是,有太多的第三方库无法与Webpack配合使用(正如我今天才发现的那样),因此,务实地说,最好还是在分发文件夹中安装模块。

答案 1 :(得分:0)

这是因为 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