首页 > 解决方案 > 在 Travis 中跳过 npm postinstall 脚本

问题描述

我有一个部署在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

设置环境.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));

标签: npmcontinuous-integrationtravis-cinpm-installnpm-scripts

解决方案


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

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

这应该只在$TRAVIS_BRANCH未设置的情况下执行,这应该只发生在Cloud66上。


推荐阅读