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) 具有versionresolved 属性的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 的区别

安装npm install vue的时候会生成package-lock.json怎么解决

20180504