添加git钩子来监视文件的更改
我正在尝试创建一个git钩子来评估package.json的更改并自动运行shrinkwrapper并将更改后的文件提交到存储库。我尝试了很多,但无法获得工作解决方案。有谁知道这是怎么回事?添加git钩子来监视文件的更改
而且,只要我添加了一个NPM模块,并尝试运行NPM拆封,我得到这个错误
npm ERR! Darwin 16.7.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "shrinkwrap"
npm ERR! node v6.11.3
npm ERR! npm v3.10.10
npm ERR! Problems were encountered
npm ERR! Please correct and try again.
npm ERR! missing: [email protected]^4.2.2, required by [email protected]
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /Users/maxDoung/Desktop/Redux-React/npm-debug.log
出于某种原因NPM收缩不工作,如果我手动更新的package.json或安装模块使用npm。另外,我不确定节点或npm版本是否重要。我使用NPM 3.10.10和节点v6.11.3
这里是我的依赖
"dependencies": {
"apn": "^1.7.7",
"bluebird": "^3.4.1",
"body-parser": "^1.15.0",
"busboy": "^0.2.13",
"connect-redis": "^3.1.0",
"cookie-parser": "^1.4.1",
"cors": "^2.7.1",
"debug": "^2.2.0",
"destroy": "^1.0.4",
"express": "^4.13.4",
"git-rev": "^0.2.1",
"glob": "^7.0.3",
"helmet": "^1.3.0",
"hiredis": "^0.4.1",
"humps": "^1.1.0",
"lodash": "^4.14.1",
"methods": "^1.1.2",
"mysql": "^2.11.1",
"node-gcm": "^0.14.4",
"node-inspector": "^0.12.8",
"node-resource": "^1.2.0",
"on-finished": "^2.3.0",
"on-headers": "^1.0.1",
"parseurl": "^1.3.1",
"path-to-regexp": "^1.5.3",
"redis": "^2.6.0-0",
"request": "^2.69.0",
"sequelize": "^3.23.6",
"serve-favicon": "^2.3.0",
"socket.io": "^1.4.6",
"through2": "^2.0.1"
},
也许这是你想要的,或者至少它会指向你到正确的方向。我已经在Linux上测试过了。
请按照下列步骤操作(适应他们为您的特定需求):
1 - 将以下文件在的.git /挂钩/预提交:
#!/bin/bash
is_package_json_at_git_index() {
echo "> Getting list of files at git index."
# Get the list of files added to the git index and verify that package.json is there.
git diff --cached --name-only | grep -x package.json
}
update_shrinkwrap_and_at_to_git_index() {
echo "> Updating npm-shrinkwrap.json and adding to this commit."
# Run shrinkwrap in the case that it was never ran
npm shrinkwrap
# Install dependencies that could be added to package.json and update npm-shrinkwrap.json
npm install
# Add the updated- npm-shrinkwrap.json to the git index so we include it in the current commit
git add npm-shrinkwrap.json
}
if is_package_json_at_git_index; then
update_shrinkwrap_and_at_to_git_index
fi
2 - 向预先提交添加运行权限 chmod +x .git/hooks/pre-commit
现在,如果您执行以下操作:
- 手动更新package.json可能更新依赖项的版本。
- 您运行
git add package.json
- 您运行
git commit -m "Your commit message"
将发生以下情况:
- NPM-shrinkwrap.json将被更新
- NPM-shrinkwrap.json会自动添加到提交
注意:你可以使用其他的钩子,请看看他们的详细说明here。
感谢加百利的回答。如果您手动更新package.json,则不起作用;例如,如果将“request-promise”:“^ 4.2.2”添加到package.json中,则尝试提交。你会得到一个错误,说明请求保证缺失。如果您使用npm install,但不手动,您的解决方案可以正常工作。有没有可以手动更新package.json的解决方案? –
@MaxDoung,我已经在Ubuntu 16.04上用npm 5.3.0进行了测试,并且可以很好地执行以下操作:1.编辑package.json并在依赖部分添加“request-promise”:“^ 4.2.2”。 2. git add package.json,3. git commit -m“添加请求 - 承诺依赖关系”。之后,npm-shrinkwrap。json将所有更改与更新的package.json一起提交到存储库。 –
@MaxDoung你可以试着用npm 5.3.0来运行我的例子吗? –
你能否显示你的仓库的文件夹结构,主要是'npm shrinkwrap'的相关部分? –
您是否想要对推送中的每个提交进行评估,或仅对每次推送进行评估? – Kannaiyan