我最近买了一个 HTML 模板,它包含许多放在 bower_components
目录下的插件和一个 package.js
文件。我想安装另一个我喜欢的包,但决定为此目的使用 npm
。
当我输入时:
npc 安装 pnotify
node_modules
已创建,其中包含约 900 个目录和其他包。
那些是什么?为什么它们与我的包一起安装?我做了一些研究,结果发现这些是必需的,但实际上,我是否需要在生产中使用数百个不必要的包来交付我的模板?
最佳答案
这是一个很好的问题,有几点我想指出。
V8 引擎、Node 模块(依赖项)和require
ing 它们
Node.JS 建立在 V8 引擎之上,它的源代码是 C++。这意味着 Node.JS 的依赖项基本上是用 C++ 编写的。
现在,当您require
依赖项时,您就是从 c++ 程序或 js 库中提取代码/函数。这就是库/依赖项的制作方式。
图书馆有很多你不会用到的功能
例如,看一下 express-validator module .它在那里有很多功能。当你需要这个模块时,你是否使用了它提供的所有功能?答案是否。人们需要这样的包只是为了使用它的一个好处,而所有的功能最终都会被下载,这会占用不必要的空间。
将由其他 Node 依赖项构成的 Node 依赖项视为解释语言
例子:
Javascript 是用 C/C++ 语言编写的,这些语言是用汇编语言编写的。把它想象成一棵树。您每次都创建新的分支,以便更方便地使用,最重要的是,节省时间。它使事情变得更快。这与创建新依赖项的情况类似,当人们创建新的依赖项时,他们使用(require
)已经存在的依赖项,而不是编写整个 C++ 程序或 JS 脚本,因为这使一切变得更容易.
在需要其他 NPM 创建新 NPM 时出现问题
当依赖项的作者需要来自这里和那里的其他依赖项只是为了使用它们的一些(少量)好处时,他们最终会下载它们,(他们并不真正关心,因为他们主要不要担心大小,否则他们宁愿这样做也不愿明确编写新的依赖项或 C++ 插件),这会占用额外的空间。例如,您可以看到 express-validator 模块使用的依赖项 from this link.
因此,当您的大型元素使用大量依赖项时,您最终会为它们占用大量空间。
解决这个问题的方法
1 号
这需要一些 Node.JS 方面的专家。为了减少下载包的数量,专业的Node.JS开发者可以到模块所在的目录,打开javascript文件,查看其源代码,将不会用到的函数删除,不做改动包的结构。
第二个(很可能不值得你花时间)
您还可以创建您自己的个人依赖项,这些依赖项是用 C++ 或更优选 JS 编写的,这实际上会占用最少的空间,具体取决于程序员,但会花费最多的时间,效率低下减少一些尺寸而不是做功。 (注:大部分依赖都是用JS写的)
数字 3(普通)
您可以实现 WebPack 而不是使用选项 2| .
结论&&注意事项
所以基本上没有逃避下载所有 Node 包的方法,但是如果您相信自己可以做到,则可以使用解决方案 1,这也有可能破坏依赖项的全部意图。(所以使它是个人的并将其用于特定目的)或者只是使用像 WebPack 这样的模块。
另外,问问自己这个问题,这些包裹真的会给您带来麻烦吗?
关于javascript - npm 安装了很多依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597894/