npm prepublish
は、npm install
時に実行してしまいます。
この記事では、それを回避する方法と、TravisCI
で利用する方法を紹介します。
方法は、.travis.yml
のafter_success
と、package.json
のscripts
をうまく連携させます。
まず、下記のnpm scriptsを書きます。
{
"scripts": {
"prepublish": "node -e \"if(process.env.TRAVIS_PASSED){}else{process.exit(1)}\" && npm run compile || echo skip prepublish"
}
}
これは以下のように動作します。
npm run prepublish
# skip prepublish
TRAVIS_PASSED=true npm run prepublish
# > npm run compile
compile
スクリプトには、publish
用のコンパイルスクリプトを書いて下さい(たとえば:babel src --out-dir lib
)。
srcで完結しているモジュールであれば、package.json
のmain
をlib
に指定してやれば、gitでlib
を管理せず済みます。
最後に、利用している.travis.yml
に、下記を追記します。(事前にnpm Releasing - Travis CIを設定する必要があります)
after_success:
- export TRAVIS_PASSED=true
テストが通れば、npm publish
の直前にだけ、npm run compile
が実行されます。