1

有时我的团队成员在更新 package.json 后忘记更新 npm-shrinkwrap.json。我从 uber 知道这个包,但它不能与 npm v3 一起使用。所以现在不是解决方案。

我有可能自动检查 npm-shrinkwrap.json 和 package.json 的一致性吗?我想在 git-hook 或/和连续中做到这一点。

4

2 回答 2

1

您可以测试npm 包git-hooks,它允许安装pre-commit 或 pre-push 钩子(即客户端钩子

这样的钩子(比如这个pre-commit one)可以用来检查源文件的一致性,比如npm-shrinkwrap.json.

参见例如turadg/npm-shrinkwrap-git-hooks

一组脚本自动npm shrinkwrapnpm install根据需要。

如果您将阶段更改为package.jsonpre-commit钩子将run npm shrinkwrap更新npm-shrinkwrap.json

#!/usr/bin/env bash

# This ensures that dependencies are installed locally whenever merging a commit
# that changed the shrinkwrap.

function package_changes_staged {
  ! git diff --cached  --quiet -- package.json
}

# update shrinkwrap when spec changes
if package_changes_staged; then
  echo "Running 'npm shrinkwrap' to match new package spec..." >&2
  npm shrinkwrap
  git add npm-shrinkwrap.json
fi

更新由 galk-in

我在 package.json 中选择了预提交这个更新

...
"scripts": {
  "check-shrinkwrap": "if (! git diff --cached  --quiet -- package.json); then echo 'Running `npm shrinkwrap` to match new package spec...' >&2; npm shrinkwrap; git add npm-shrinkwrap.json; fi"
},
...
"pre-commit": [
  "check-shrinkwrap",
  "test"
]
...
于 2016-11-01T07:52:28.277 回答
1

从 2017 年 6 月 24 日更新 现代答案是使用 npm 5package-lock.json

于 2017-06-23T20:30:20.167 回答