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

标签 javascript node.js npm continuous-integration

我们有一个涉及多个 Node 模块的大型项目。我们的发展模式分为 3 个级别。

  • 开发
  • 阶段
  • 生产

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

现在,要部署到开发环境,CI 只需在父模块上执行 npm install 即可,然后安装最新版本的所有 deps。这里不用担心。

但是,如果 CI 想要将某些内容推送到阶段/生产环境,我如何告诉 npm install 选择标记为阶段/生产的依赖项版本>.

我知道如果我想安装特定版本的依赖项,我可以指定npm install package@version。但由于我们有大量的依赖项,这种方法对我们来说不可行。

我们也愿意接受改变我们的开发模式的建议。任何帮助将不胜感激。

最佳答案

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

例如,您可以有一个/packages 目录,其中包含 3 个文件 dev.package.json、stage.package.json、prod.package.json。

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

我不确定 CI 过程是什么样的,所以我将给出一个使用 shell 脚本的示例,即适用于 Linux 的部署.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,而无需主机名检查部分,但我添加了它以防万一。

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

关于javascript - 如何安装所有 npm 依赖项的特定版本/标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439053/

相关文章:

javascript - 在 YouTube 视频之间缓冲

Javascript/node.js - 将值返回给父函数

javascript - 使用 npm 安装 font awesome 5 以供 scss 使用

node.js - “newman”不被识别为内部或外部命令

javascript - `npm run jshint` 结果为 `missing script: jshint`

javascript - 用于填写表格的单选按钮

javascript - 仅显示具有相同类名的多个 div 标签的不同值的最佳方法

javascript - 等待NodeJS返回值

java - 找不到实现类: "cassandra"

node.js - TypeScript 构建错误 TS5023