npm - 在 Travis 中跳过 npm postinstall 脚本
问题描述
我有一个部署在AWS和Cloud66上的应用程序(出于某种原因)。为了构建适用于 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));
解决方案
在您package.json
的情况下,您可以执行以下操作:
"postinstall": "if [ -z \"$TRAVIS_BRANCH\" ]; then npm run build-production; fi"
这应该只在$TRAVIS_BRANCH
未设置的情况下执行,这应该只发生在Cloud66上。
推荐阅读
- reactjs - SPFx ListView 控件-“defaultSelection”不起作用
- php - 如何通过 WP CLI 取消 WP All Import?
- discord - 当事件发生在 Discord、OBS 更新中的浏览器源时,如何做到这一点?
- reactjs - How do I properly set up my useEffect so I don't receive a missing dependency warning?
- python - 如何在 Python (< 3.10) 中使用不同数量的参数注释相互依赖的函数参数和返回类型?
- javascript - 在 ReactJS 中实现简单的 Google oAuth
- typescript - Chart.js 无法在 Preact + Typescript 中更新 fontSize
- ruby - Gem::NameTuple credentials_manager, 1.0.0, ruby 更新 fastlane 时
- angularjs - 如何在单独的文件中使用 Ngmodel 的值来显示该值?
- c# - System.ArgumentNullException:值不能为空。(参数“连接字符串”)