npm在特定环境中从GitHub安装

时间:2014-03-27 22:12:31

标签: node.js github installation npm

我的团队使用私人npm注册表。我们在本地开发和部署到生产时从这个私有注册表安装包。但是,在部署到 staging 时,我们想从GitHub中取出。我认为可以使用preinstall脚本重写 package.json 以使用适当的git + ssh:// URL代替版本号,如果NODE_ENV = staging。

这似乎不起作用,可能是因为npm忽略了对 package.json 所做的更改(已经需要它)。

也许我会以完全错误的方式解决这个问题。推荐的方法是什么?

4 个答案:

答案 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指定依赖关系。

Git URL

{
  "dependencies": {
    "private_dependency": git://user@hostname:project.git#ref
  }
}

只需提供依赖关系的URL即可。 #ref是git参考。如果省略此项,则默认为master

GitHub网址

{
  "dependencies": {
    "private_dependency": user/project
  }
}

Tarball URL

{
  "dependencies": {
    "private_dependency": example.com/tarball.tar.gz
  }
}

For more information about supported formats see here.

答案 2 :(得分:1)

设置类似于你的设置,我们使用roco来运行各种任务,例如旧标签清理,测试运行等。如果配置正确,它将归结为roco staging deployroco production deploy:)

答案 3 :(得分:0)

对于私有存储库,您必须将其置于依赖项下。

{
    "private": true
    "name": "foo",
    "dependencies": {
        "private-repo": "git+ssh://gitolite@my.server:my/project",
    }
    [...]
}