npm

npmにライブラリをアップロードするときに.npmignoreで生成物を公開/制限するパターン

More than 3 years have passed since last update.

やっと理解したのでメモ

何がしたいか

  • npmパッケージを登録する時にcoffeeやtypescriptのコードをコミットせず生成したjsだけをアップロードしたい
  • 自動生成したjsをgitで管理したくない

どうやるか

src/** にソース、lib/** に実体があるとする

.npmignore に npm にアップロードしたくないものを書く

src/
test/
examples/

.gitignore にバージョンコントロールしたくないコードを書く

lib/

package.json にnpmに登録する際のフックのスクリプトを書く。(この例はcoffee)

  "scripts": {
    "prepublish": "$(npm bin)/coffee -o lib -c src/*"
   },

npmで公開する。これは mizchi/ardaの例

$ npm publish
> arda@0.13.1 prepublish /Users/mizchi/proj/arda
> $(npm bin)/coffee -o lib -c src/*
+ arda@0.13.1

注意点

npm publishしたときに .npmignoreが存在しない場合、.gitignoreでignoreされたファイルを自動的に使う。これのせいでprepublishされたファイルが.gitignoreされていた場合公開されない。npm prepublishで生成されたファイルを無視しないために、明示的に.npmignoreは必ず用意する必要がある。

ってのを下のIssue読んでて気づいた。

prepublish hook on package.json causes npm to publish empty packages · Issue #4778 · npm/npm

Misleading npm prepublish docs · Issue #28 · npm/docs.npmjs.com

今までprepublishの挙動でめっちゃ悩んでいて、coffeeとjs両方コミットしていたけど、やっと解決しそう。

babelな方もどうぞ。