我的团队使用私人npm注册表。我们在本地开发和部署到生产时从这个私有注册表安装包。但是,在部署到 staging 时,我们想从GitHub中取出。我认为可以使用preinstall
脚本重写 package.json 以使用适当的git + ssh:// URL代替版本号,如果NODE_ENV = staging。
这似乎不起作用,可能是因为npm忽略了对 package.json 所做的更改(已经需要它)。
也许我会以完全错误的方式解决这个问题。推荐的方法是什么?
答案 0 :(得分:4)
您可以尝试运行npm-install
,它将解析并安装所有依赖项,然后npm-shrinkwrap
,这将生成文件npm-shrinkwrap.json
。
您可以在npm-shrinkwrap.json
上运行预安装脚本,并根据需要插入'git + ssh://'URL,它已经包含您需要的所有已解决的依赖项。这应该给你一个收缩包装的package.json文件,它指向你的github存储库。
查看https://www.npmjs.org/doc/cli/npm-shrinkwrap.html#Building-shrinkwrapped-packages以获取有关收缩包装的更多信息。
答案 1 :(得分:1)
您可以使用两个不同的package.json
文件,一个用于登台,另一个用于开发和生产。这些文件可以存储在相应的SCM分支上。
您可以通过多种方式为npm
指定依赖关系。
{
"dependencies": {
"private_dependency": git://user@hostname:project.git#ref
}
}
只需提供依赖关系的URL即可。 #ref
是git参考。如果省略此项,则默认为master
。
{
"dependencies": {
"private_dependency": user/project
}
}
{
"dependencies": {
"private_dependency": example.com/tarball.tar.gz
}
}
答案 2 :(得分:1)
设置类似于你的设置,我们使用roco来运行各种任务,例如旧标签清理,测试运行等。如果配置正确,它将归结为roco staging deploy
和roco production deploy
:)
答案 3 :(得分:0)
对于私有存储库,您必须将其置于依赖项下。
{
"private": true
"name": "foo",
"dependencies": {
"private-repo": "git+ssh://gitolite@my.server:my/project",
}
[...]
}