npm5 package-lock.json 不同机器上的不同条目
Posted
技术标签:
【中文标题】npm5 package-lock.json 不同机器上的不同条目【英文标题】:npm5 package-lock.json different entries on different machines 【发布时间】:2017-11-28 14:33:00 【问题描述】:我们的项目使用 npm 进行包管理。从 npm 4 升级到 npm 5 后,我们决定选择加入新的 package-lock.json
。
在提交它并在其他机器上执行npm install
之后,我们发现指定版本和解析条目的方式存在差异:
1) 使用version
编码为URL
的package-lock.json 依赖关系示例:
"jspm":
"version": "https://registry.npmjs.org/jspm/-/jspm-0.16.52.tgz",
"integrity": "sha1-axhH4I8TGsm9JnzFiXSXmudnXS4=",
"dev": true
,
"systemjs":
"version": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.46.tgz",
"integrity": "sha1-wEV0szNfBSoOPHoA7kGIxuTB444=",
"dev": true
,
2) 具有version
和resolved
属性的package-lock.json 依赖关系示例:
"jspm":
"version": "0.16.53",
"resolved": "https://registry.npmjs.org/jspm/-/jspm-0.16.53.tgz",
"integrity": "sha1-VvNR9JWUyJM+XgG2UUWsrr/PtZ4=",
"dev": true,
"dependencies":
...
,
"systemjs":
"version": "0.19.46",
"resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.46.tgz",
"integrity": "sha1-wEV0szNfBSoOPHoA7kGIxuTB444=",
"dev": true
,
...
除了不稳定的 package-lock.json,我们的构建服务器在安装第一个示例时遇到了问题。
【问题讨论】:
【参考方案1】:按照此过程生成 package-lock.json 的稳定版本:
-
删除现有的
node_modules
文件夹
删除现有的package-lock.json
执行npm install
commit 并推送 package-lock.json
对于团队的其他成员:
-
删除现有的
node_modules
文件夹
拉新的package-lock.json
执行npm install
在继续之前删除现有的 node_modules 是必不可少的步骤,因为 package-lock.json 确实从 node_modules
文件夹中解析 现有的元数据。
这意味着如果您的 node_modules 文件夹有 leftovers,它们可能会被添加到 package-lock 的依赖项中,即使它们不再是实际的依赖项。
【讨论】:
这对我有用(确保删除 node_modules 文件夹和现有的 package-lock.json,如果它存在,在创建 package-lock.json 时执行npm install
之前)。但是对于“团队其他成员”的步骤,我需要添加步骤 1a:运行npm install
(没有 package-lock.json 和 node_modules 文件夹),1b:再次删除 node_modules 文件夹和新创建的 package-lock。 json。继续执行第 2 步和第 3 步到npm install
,然后按预期工作。【参考方案2】:
您可能希望在两台机器上检查这种情况:
你的 node + npm 版本是一样的,可能是npm -g update npm
。
npm 配置属性save-exact
在两台机器上具有相同的值。 (否则npm config set save_exact true/false
)
【讨论】:
以上是关于npm5 package-lock.json 不同机器上的不同条目的主要内容,如果未能解决你的问题,请参考以下文章
package.json和package-lock.json的区别
package.json与package-lock.json的区别
NodeJs开发之三: package.json和Package_lock.json
package.json 与 package-lock.json 的区别