RA.*_*RA. 8 javascript css package node.js npm
我最近买了一个HTML模板,它包含许多放在bower_components
目录中的插件和一个package.js
里面的文件.我想安装另一个我喜欢的包,但决定npm
用于此目的.
当我输入:
npc install pnotify
node_modules
已创建包含约900个目录与另一个包.
那些是什么?为什么他们和我的包装一起安装?我做了一些研究,结果证明那些是必需的,但实际上,我是否需要在生产中提供数百个不必要的包?
这是一个非常好的问题,我想指出一些事情.
V8引擎,节点模块(依赖项)和require
它们
Node.JS建立在V8引擎上,它的源代码是C++.这意味着Node.JS的依赖关系基本上是用C++编写的.
现在,当你是require
一个依赖项时,你实际上正在从c ++程序中取代代码/函数.这就是库/依赖关系的制作方式.
图书馆有很多你不会使用的功能
例如,看一下express-validator模块.它有很多功能.当您需要该模块时,您是否使用它提供的所有功能?答案是否定的.人们需要这样的包只是为了使用它的一个好处,并且所有的功能最终都被下载,这占用了不必要的空间.
将其他节点依赖关系中的节点依赖关系视为解释语言
示例:Javascript是用C/C++语言编写的,这些语言是用Assembly编写的.把它想象成一棵树.您每次都可以创建新分支,以便更方便地使用,最重要的是节省时间.它使事情变得更快.这就是创建新依赖项的类似情况,当人们创建一个新的依赖项时,他们使用(require
)已经存在的依赖项,而不是编写一个完整的C++程序,因为这样可以使一切变得更容易.
当需要其他NPM来创建新的NPM时会出现问题
当依赖关系的作者需要来自这里的其他依赖关系时,只是为了使用它们的一些(少量)好处,他们最终会全部下载它们(他们并不真正关心,因为他们宁愿这样做而不是明确地在C++中编写一个新的插件,这需要额外的空间.例如,您可以从此链接中看到express-validator模块使用的依赖项.
因此,当您拥有使用大量依赖项的大型项目时,您最终会为它们占用大量空间.
如何解决这个问题
1号
2号(几乎不可能)
结论&&注意
所以基本上没有逃避下载所有节点包,但如果你认为你可以使用解决方案,你可以使用解决方案1,或者让其他人处理它.我仍然认为这不是一个好主意.
另外,问自己这个问题,这些包真的会引起你的问题吗?