假设我创建了一个名为100的应用程序,它依赖于包101 (version 105)和包102,包102依赖于包103,而包103又依赖于包101 (version 106):

MyApp
- A @ 1.0
- B

A
- (no dependencies in whichever version)

B
- C

C
- A @ 2.0

我的问题是.

问题1-将安装哪个版本的程序包100?会安装A包还是101’s node 模块、B‘S node 模块或C’S node 模块?

Q2-我的 idea 是,NPM将在101's node 模块文件夹中安装100,并在103's node 模块包中安装102.

Q3-但如果我只想要100one个副本安装globally,我应该怎么做才能让NPM这样做?

推荐答案

仅考虑https://docs.npmjs.com/cli/v6/configuring-npm/folders#cycles-conflicts-and-folder-parsimony的文档,您的第二季度假设是正确的,这也是第一季度的答案.

[…]在每个阶段,如果某个包已经安装在祖先node_modules文件夹中,则不会将其安装在当前位置.

为了说明起见,让我们修改您的示例并将100也添加为101的依赖项:

MyApp
- A @ 1.0
- B

A
- (no dependencies in whichever version)

B
- A @ 1.0 (added for illustration)
- C

C
- A @ 2.0

生成的具有各自版本(不属于文件夹名称的一部分)的目录树应如下所示:

MyApp/node_modules/A (@ 1.0)
MyApp/node_modules/B
MyApp/node_modules/B/node_modules/C
MyApp/node_modules/B/node_modules/C/node_modules/A (@ 2.0)

注:没有

MyApp/node_modules/B/node_modules/A (@ 1.0)

目前在那里,因为它已经出现在更高的100下方.

(附注:在Case 100不依赖于101的情况下,从文档中我不能完全确定102是否不会出现在更高的级别(低于100),因为100将是first top-most ancestor without version mismatch,尽管在这个假设的情况下它根本不是100's依赖项.这将允许所有"siblings"个共享相同的模块,而不会与根级依赖冲突.)

至于Q3,答案很简单(我猜你说的"全局"指的是100(根)模块,而不是系统范围的模块):由于you规定了100's个依赖项,如果应用程序可以与102一起工作,那么只需将依赖项版本从1.0提升并进行更新即可.在那之后,应该只有

MyApp/node_modules/A (@ 2.0)

而不是.. (@ 1.0)和前者

MyApp/node_modules/B/node_modules/C/node_modules/A (@ 2.0)

应该已经消失了.

如果是相反的情况(100将依赖于older 101而不是较新的2.0),那么除了you would just have to make 100 author unlock or bump-up dependency to 104,我没有明确的答案,也就是说,我认为不改变那些模块是不可能的.

Node.js相关问答推荐

在我的Next.js应用程序中没有正确设置Process.env.NODE_ENV

Sequelize-测试使用虚拟场更新模型

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

mongodb首先自连接,然后根据某些条件与另一个表连接

Socket.io 未将用户加入给定房间

Mongoose:如何使用填充进行查找

如何在nodejs中打印pdf

Redis Typescript 删除方法类型转换

错误 node :错误:绑定消息提供 16 个参数,但准备语句需要 15 个

错误:0308010C:try 通过 Github 推送部署到 firebase 托管时出现数字

为什么我的 Cypress Post 请求的请求正文是空的?

当我try 从本地主机发布新产品时收到错误消息

Mongodb 从文档中获取聚合结果中的特定属性

在本地运行 Cloud Functions 会出现错误functions.config() 不可用

搜索MongoDB条目的正确方法是'_id';在 node 中

nodeJS - 如何使用 express 创建和读取会话

在 react-router v4 中使用 React IndexRoute

如何从 find 方法返回 Mongoose 结果?

node.js 中的意外保留字导入

CORS 错误:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权