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が実行されます。