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