有时我的团队成员在更新 package.json 后忘记更新 npm-shrinkwrap.json。我从 uber 知道这个包,但它不能与 npm v3 一起使用。所以现在不是解决方案。
我有可能自动检查 npm-shrinkwrap.json 和 package.json 的一致性吗?我想在 git-hook 或/和连续中做到这一点。
有时我的团队成员在更新 package.json 后忘记更新 npm-shrinkwrap.json。我从 uber 知道这个包,但它不能与 npm v3 一起使用。所以现在不是解决方案。
我有可能自动检查 npm-shrinkwrap.json 和 package.json 的一致性吗?我想在 git-hook 或/和连续中做到这一点。
您可以测试npm 包git-hooks
,它允许安装pre-commit 或 pre-push 钩子(即客户端钩子)
这样的钩子(比如这个pre-commit one)可以用来检查源文件的一致性,比如npm-shrinkwrap.json
.
参见例如turadg/npm-shrinkwrap-git-hooks
一组脚本自动
npm shrinkwrap
和npm install
根据需要。如果您将阶段更改为
package.json
,pre-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"
]
...
从 2017 年 6 月 24 日更新
现代答案是使用 npm 5package-lock.json