Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么在节点中使用webpack节点外部?_Node.js_Webpack - Fatal编程技术网

Node.js 为什么在节点中使用webpack节点外部?

Node.js 为什么在节点中使用webpack节点外部?,node.js,webpack,Node.js,Webpack,我正在使用webpack捆绑我的typescript节点代码 我使用webpack node externals来避免编译期间node_模块中出现错误 webpack节点externals说,允许您定义externals—不应捆绑的模块 但是为什么呢?Webpack应该打包开始打包所需的所有内容,对吗?它可以提取和删除我不使用的模块。(例如树摇) 如果我使用webpack节点externals,那么我必须在prod文件夹中执行npmi,以获取所有依赖项 我认为这是网页所能做的错失要点。对吗?我认

我正在使用webpack捆绑我的typescript节点代码

我使用
webpack node externals
来避免编译期间node_模块中出现错误

webpack节点externals
说,允许您定义externals—不应捆绑的模块

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

如果我使用
webpack节点externals
,那么我必须在prod文件夹中执行
npmi
,以获取所有依赖项


我认为这是网页所能做的错失要点。对吗?

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

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

  • 它会在npm上膨胀你的库
  • 这与整个npm依赖项管理背道而驰。如果您正在使用Lodash,并且库的使用者也具有相同的Lodash依赖项,npm将确保只添加一次。但在库中绑定Lodash实际上会使它包含两次,因为npm不再管理这种依赖关系
  • 作为库的使用者,我希望库代码只包含它的逻辑,并且只声明它的依赖项,以便它们可以与项目中的其余依赖项合并/解析。将代码与依赖项捆绑在一起实际上是不可能的


    我不同意关于Webpack不是为捆绑节点脚本而设计的评论。不幸的是,有太多的第三方库不能很好地使用Webpack(正如我今天刚刚发现的那样),所以从实用角度讲,您最好还是在分发文件夹中安装模块。

    这是因为node\u modules/中的二进制依赖关系

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

    我看了这个解释,你可以在这里看到我的研究:

    然后我必须在prod文件夹中执行npm I以获取所有依赖项。-这是你无论如何都应该做的。Webpack无法绑定节点本机模块,因为它们是通用的。似乎您误解了Web包在节点应用程序中的作用。有可能您根本不需要它。是的,在节点应用程序上可能不需要它。webpack不能捆绑fs、path之类的东西,也不能捆绑您安装的二进制模块。