2017-04-16 147 views
0

我们有一个大的项目涉及多个节点模块的特定版本/标签。我们的开发模式有3个级别。如何安装所有NPM依赖

  • 发展
  • 阶段
  • 生产

我们想发布模块,我们与开发,分期和生产标签和期待CI工具来构建和安装基础上,DEPS私有注册表这些标签。

现在部署到开发环境 CI可以做NPM父模块上安装,并与最新版本的所有DEPS被安装。这里不用担心。

但是,如果CI想推的东西阶段/生产环境我怎么告诉NPM安装挑标记为阶段/生产依赖版本。

我知道是否要安装特定版本的依赖关系我可以指定npm安装包@版本。但是由于我们拥有非常多的依赖关系,这种方法对我们来说是不可行的。

我们愿意考虑改变我们的发展模式,以及建议。任何帮助,将不胜感激。要做到这一点

回答

1

一种方式是到版本存储在每个环境的单独的package.json。

例如,你可以有3个文件dev.package.json,stage.package.json,prod.package.json A/packages目录。

让你的CI过程复制正确的package.json因为它是在安装环境。

我不知道什么是CI过程的样子,所以我给它使用shell脚本示例,用于linux的deploy.sh。

#!/bin/bash 

ENV='production' 
if [[ `hostname` =~ \.development\. ]]; then 
    ENV='development' 
fi 
if [[ `hostname` =~ \.stage\. ]]; then 
    ENV='stage' 
fi 

echo "$ENV environment detected" 

cp packages/$ENV.package.json package.json 

npm install 

这假定服务器的主机名可以帮助指示环境,CI可以运行shell脚本。根据您的设置,您可能需要不同的东西。

例如,你可能已经知道你的CI过程中不使用的主机名检查部的包膜,但我加以防万一。

使用这种类型的解决方案,您可以在每个ENV的package.json指定环境所需的确切模块版本,并使用NPM安装得到它们。

+0

有趣的方法。是否有任何方式可以将环境作为package.json本身内的变量引用? – user103054

+0

我认为最接近你需要的是在package.json配置对象中设置的环境变量。这些变量可用于npm脚本。有关更多信息,请查看https://docs.npmjs.com/files/package.json中的配置部分。据我所知,没有办法在npm脚本中使用不同的依赖版本。 – curtwphillips

+0

我已经通过该文档。您的答案似乎比使用配置更符合我们的要求。 – user103054