在Travis中跳过npm后安装脚本

时间:2019-04-23 10:21:26

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

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

发生什么情况是,当travis触发时,它会npm install运行postScript,后者还会构建应用程序,同样也在构建应用程序的yml脚本中运行。因此,每次触发更改都会发生两个构建,这是不必要的。

我试图通过在travis中添加环境var并运行预安装脚本来删除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));

1 个答案:

答案 0 :(得分:0)

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

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

仅应在未设置$TRAVIS_BRANCH的情况下执行此操作,这仅应在 Cloud66 上发生。