如何安装所有npm依赖项的特定版本/标记

时间:2017-04-16 15:55:30

标签: javascript node.js npm continuous-integration

我们有一个涉及多个节点模块的大型项目。我们的开发模型有3个级别。

  • 开发
  • 阶段
  • 生产

我们希望将模块发布到包含开发,阶段和生产标签的私有注册表中,并期望CI工具基于这些标记构建和安装deps。

现在部署到开发环境 CI可以在父模块上执行 npm install ,并安装所有具有最新版本的deps。不用担心。

但是,如果CI希望将某些内容推送到阶段/生产环境,我如何告诉 npm install 选择标记为 stage / production

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

我们也欢迎改变我们的发展模式的建议。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将版本存储在单独的package.json中以用于每个环境。

例如,你可以在/ packages目录中包含3个文件dev.package.json,stage.package.json,prod.package.json。

让CI进程为正在安装的环境复制正确的package.json。

我不确定CI流程是什么样的,所以我给出一个使用shell脚本的例子,deploy.sh for linux。

#!/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,但我添加它以防万一。

使用这种类型的解决方案,您可以让每个env package.json指定环境所需的确切模块版本,并使用npm install来获取它们。