javascript - 为什么本地安装的项目的 node_modules 文件夹与全局安装的项目之间存在差异?
问题描述
假设我有一个具有依赖项的项目,A
.
A
有自己的依赖关系B
。
如果我npm install A
进入我的项目,我的node_modules
文件夹如下所示。请注意,B
已作为顶级模块安装:
/myproject
/node_modules
/A
/B
然后,如果我要依赖myproject
from anotherproject
,我的node_modules
文件夹如下所示:
/anotherproject
/node_modules
/myproject
/A
/B
但是,如果我要安装myproject
为全局模块npm install -g myproject
,该node_modules
文件夹最终看起来像这样(没有顶级B
):
/myproject
/node_modules
/A
为什么是这样?
(npm 6.14.4}
解决方案
发生这种情况是因为当您安装lib A
到项目中时,A
它将作为依赖项保存在您的项目package.json
中,并且内部A´s
拥有作为依赖项,它package.json
也B
将被安装但不会保存到您的package.json
. 当您将项目本地导入另一个项目时,所有模块都会检查它们的依赖关系,因此也会添加B
到A
依赖关系中。B
但是,当您运行命令进行全局安装时,只会package.json
验证(不检查依赖项的依赖关系),然后B
不会添加。
推荐阅读
- r - 如何将使用 R 中的 table1 包构建的表格转换为 Latex?
- javascript - 使用 TypeORM 中定义的实体连接到 Postgres 数据库时,Javascript 内存不足
- autohotkey - AHK 和 US-INT 键盘:为什么“死”键不再被吞掉?
- python - 无法通过 python 和 Beautiful Soup 抓取谷歌专利 URL
- c# - 有没有办法在线程池中的线程完成后立即在主线程上执行功能?
- c - 结构中用户的有限输入
- javascript - React-Native onSubmitEditting 花费太多时间来执行功能
- arrays - 推断元组数组中的类型
- laravel - 登录后如何在laravel中为两个不同的守卫重新生成不同的会话?
- java - onClick 自定义 CardView 上的按钮