npm - 在 Travis 中跳过 npm postinstall 脚本

标签 npm continuous-integration travis-ci npm-install npm-scripts

我有一个部署在 AWSCloud66 上的应用程序(出于某种原因)。为了构建 aws 应用程序,我们必须在 travis.yml 中编写脚本并部署到 Cloud66,我们必须在 postInstall 中编写构建命令.

当 travis 被触发时,它会执行 npm install ,并运行 postScript 来构建应用程序,同样在 yml 脚本中进行应用程序构建。因此,每次触发更改时都会发生两次构建,这是不必要的。

我尝试通过在 travis 中添加环境变量并运行预安装脚本来删除 postInstall 脚本,该脚本将删除包中的 postInstall 脚本。这会删除 postInstall 脚本,但不会改变任何内容,即使这样,postInstall 脚本也会以某种方式运行。

package.json的片段

"preinstall": "node setEnvironment.js",
"postinstall": "npm run build-production"

travis.yml的片段

script:
- if [ "$TRAVIS_BRANCH" = "prod" ]; then npm run build-production && gulp
  copy-deploy-configs --type=prod; else echo "not an prod branch"; fi

setEnvironment.js

const package = require('./package.json');
const fs = require('fs');

const environment = process.env.APP_ENVIRONMENT;

if (environment === 'travis') {
    delete package.scripts.postinstall;
} else {
    package.scripts["postinstall"] = `npm run build-${environment}`;
}

fs.writeFileSync('package.json', JSON.stringify(package, null, 4));

最佳答案

在您的package.json中,您可以执行以下操作:

"postinstall": "if [ -z \"$TRAVIS_BRANCH\" ]; then npm run build-production; fi"

只有在未设置 $TRAVIS_BRANCH 时才应执行此操作,而这仅应在 Cloud66 上发生。

关于npm - 在 Travis 中跳过 npm postinstall 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809075/

相关文章:

GitLab。提交待定

go - 在 travis 的 golang 仓库上运行 lint

node.js - 我本地安装gulp时出现的166项怎么办?

node.js - Azure DevOps Angular 构建管道和无法执行构建脚本 Node 错误

node.js - 使用 Git Deploy 将 Ghost 0.4.2 部署到 Azure 站点

visual-studio-2010 - Visual Studio 2010 中难以捉摸的 MSBuild 项目文件创建向导在哪里?

php - Bamboo CI 服务器 - 如何配置 PHPUnit 测试

amazon-ec2 - 结合travis和ec2

travis-ci - 特拉维斯 Lint : why does it complain about java language field

git - 我应该在 node_modules 中克隆一个 Node 库来修改它吗?