Npm 确保package-lock.json保留依赖项的特定版本';要求

Npm 确保package-lock.json保留依赖项的特定版本';要求,npm,webpack,npm-install,vue-cli,package-lock.json,Npm,Webpack,Npm Install,Vue Cli,Package Lock.json,对某个依赖项的某些更新破坏了我们的构建,要找出问题的原因有点棘手 我们最后注意到@vue/component compiler utils需要更“漂亮”:“^1.11.1”和-如中所述Prettier@1.13.0在返回到Prettier@1.12.0 我们如何确保package lock.json将依赖项“锁定”到某个版本,并且不随时间或重新安装时更新 这是我们的package.json的一个示例,从中生成了不正确的锁文件: { ... "dependencies": { "h

对某个依赖项的某些更新破坏了我们的构建,要找出问题的原因有点棘手

我们最后注意到
@vue/component compiler utils
需要
更“漂亮”:“^1.11.1”
和-如
中所述Prettier@1.13.0
在返回到
Prettier@1.12.0

我们如何确保
package lock.json
将依赖项“锁定”到某个版本,并且不随时间或重新安装时更新

这是我们的
package.json
的一个示例,从中生成了不正确的锁文件:

{
  ...
  "dependencies": {
    "html-loader": "0.5.1",
    "vue": "2.5.16",
    "vue-class-component": "6.2.0",
    "vue-property-decorator": "6.1.0",
    "vue-router": "3.0.1",
    "vuex": "3.0.1",
    "vuex-class": "0.3.0",
    ...
  },
  "devDependencies": {
    "@types/jest": "22.0.1",
    "@vue/cli-plugin-babel": "3.0.0-beta.11",
    "@vue/cli-plugin-eslint": "3.0.0-beta.11",
    "@vue/cli-plugin-typescript": "3.0.0-beta.11",
    "@vue/cli-plugin-unit-jest": "3.0.0-beta.7",
    "@vue/cli-service": "3.0.0-beta.11",
    "@vue/eslint-config-airbnb": "3.0.0-beta.11",
    "@vue/eslint-config-typescript": "3.0.0-beta.11",
    ...
  }
}

使用
npm shrinkwrap
修复该问题,它将
package lock.json
转换为
npm shrinkwrap.json
,对安装的每个特定版本进行哈希和锁定


有关详细信息,请参阅

我不完全确定
npm shwrap
是否修复了npmv6+中的问题

下面是为vue加载程序生成的npm-shrinkwrap.json文件的一个片段

似乎即使包覆面提取也没有锁定所需的版本

"vue-loader": {
  "version": "14.0.3",
  "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-14.0.3.tgz",
  "integrity": "sha512-5kFK/df1jgVoFcTB9p19rrYcyuYduoZzUSf6chMVsIRmVL9AKPYCa9JGLAZsU1XXGbGO9MSkwbum91u2dx7YcQ==",
  "dev": true,
  "requires": {
    "consolidate": "^0.14.0",
    "hash-sum": "^1.0.2",
    "loader-utils": "^1.1.0",
    "lru-cache": "^4.1.1",
    "postcss": "^6.0.8",
    "postcss-load-config": "^1.1.0",
    "postcss-selector-parser": "^2.0.0",
    "prettier": "^1.7.0",
    "resolve": "^1.4.0",
    "source-map": "^0.6.1",
    "vue-hot-reload-api": "^2.2.0",
    "vue-style-loader": "^4.0.1",
    "vue-template-es2015-compiler": "^1.6.0"
  }

最后我们换成了纱线,他们的锁文件实际上是一个“锁”文件。如果运行install as
warn install--pure lockfile
它将安装
warn.lock
中指定的版本。