なんか最近Twitterとか職場でも「npmの機能でそんなのあったんだ」って言われること多いので、説明していきます。

ちなみにタイトルにとりあえず10選って書いたけど、あんまりたくさん思いついてないのに、10選って書いてしまったので最後の方は微妙かもしれません。

1. npm installは npm i でも同じことができる まぁ単純なショートカットですね。isntallとかtypoしてても空気読んでくれるんですが、短いほうがいいよねってことで。 # npm installって書くのも $ npm install socket.io #npm i って書くのも同じ $ npm i socket.io # ちなみに --saveは -S, --save-devは -D にできる $ npm i socket.io -S $ npm i mocha -D ショートカット小ネタ。

2. npm shrinkwrap バージョンを固定したい時に使います。Gemfile.lock、carton.lock みたいなものですかね。 semvarでnpmって記述するんですが、 * とか適当に記述するとバージョンが勝手に上がっちゃったり、 ~1.2.3とか書いてると1.2.9とかも入っちゃうので、きちんとバージョンを固定したい場合は事前に npm shrinkwrap ってやった上でそれを実行するといいですね。 $ npm i $ npm shrinkwrap # shrinkwrap.jsonができる。その上でnpm installってやってもshrinkwrap.jsonに明示されたバージョンしか入らない。 運用系で使える小ネタですかね。

3. npm version これはライブラリ作る人は必ず覚えておくと良いコマンドですね。

npm version patch とか npm version minor とかやると以下の事を実行してくれます。 package.jsonのversionをpatch, minor, majorにあわせて上げてくれる

その上で該当するバージョンのtagを作ってくれる。 $ npm version patch v0.2.1 $ npm version minor v0.3.0 $ npm version major v1.0.0 # package.jsonのversionプロパティが上がっている。 # git tag でみてみると $ git tag v0.2.1 v0.3.0 v1.0.0 #という具合にtagが作られてる バージョンの指定漏れだったり、指定して npm publish したけどgitのtag付け忘れたりすることあると思うので、そういうのは npm version 使っていると起こしにくいですね。よくやるのは以下の様なフローですね。 $ npm version patch v0.1.1 # master に push $ git push origin master # tagにpush $ git push origin v0.1.1 # push終わったらnpmにpublish $ npm publish

4. npm run 僕はすごく好きなんですが、npmって実は簡単なスクリプトなら登録しておけます。

こんな感じに package.json のscriptsタグの中に書くと "scripts" : { "test" : "mocha --require intelli-espower-loader" , "test-xs" : "mocha-phantomjs" , "build" : "jsx lib/useragent.jsx | jsx-linker -t commonjs-lib --stdin -o useragent.js" } , # npm runで一覧表示してくれる。 (v1.4.10から) $ npm run Available scripts in the useragent.jsx package: test mocha --require intelli-espower-loader test-xs mocha-phantomjs build jsx lib/useragent.jsx | jsx-linker -t commonjs-lib --stdin -o useragent.js $ npm run build # これで scriptsに登録したコマンドを実行してくれる。 # ここでは、"jsx lib/useragent.jsx | jsx-linker -t commonjs-lib --stdin -o useragent.js"を実行する make とか grunt とか gulp とかいいんですけど、簡単なコマンドならコレでいいかなーって思ってます。 6/11 追記：

sasaplus1 さんのqiitaの記事見てて、環境変数に関しても追記しておいたほうがいいと思ったので追記します。 npm runで実行する際には、node_modules以下のコマンドにはパスが通った状態になります。

なので、npm run の時に mocha とか jsx とか記述してますが、これは何も npm install mocha jsx -g とかグローバルにインストールする必要はないです。 また、たまに見かけますが、 ./node_modules/mocha/bin/mocha みたいにパスを明示する必要もありません。node_modules内にインストールされていれば勝手にパスが通った状態になります。

5. npm repo / npm docs npm repo [packagename] を実行すると リポジトリをブラウザで開いてくれます。githubで管理されてればgithubのページに勝手に行ってくれます。 npm docs [packagename] を実行するとnpmのページをブラウザで開いてくれます。どれくらいDLされてるかなど調べるときには便利。 $ npm repo socket.io $ npm docs socket.io

6. npm t npm test は実は npm t でも同じことに成ります。

これもショートカット小ネタですかね。 $ npm t # npm testと同様

7. npm dedupe node.jsでカジュアルにいろんなモジュール入れていると以下の様な依存グラフが出来がちです。 a

+-- b | `-- c@1.0.3

`-- d `-- c@1.0.10 つまり、bっていうモジュールがcに依存して、dっていうモジュールもcに依存しているんだけど、お互い参照しているバージョンが違うって事が起きる。まぁこれによってちゃんとbもdも動くようになるのであんまり困ることはないんですが、コードが重複しているっていうのと、aからcを参照しようとした時にバージョンが違うと不整合が起きるのであまり良くないこともあります。 これを解決するのが npm dedupe です。使うと依存関係を整理して、semvarで上と判断された方に合わせてくれます。 a

+-- b

+-- d

`-- c@1.0.10

kazuhoさんのブログ記事の受け売りですが、覚えておくと良いこともあります。 $ npm dedupe

8. npm outdated 依存モジュールで新しいものが出ているかどうかを確かめたい時に使います。 $ npm outdated Package Current Wanted Latest Location lru-cache 2.2.4 2.2.4 2.5.0 useragent > lru-cache esprima 1.0.4 1.0.4 1.2.2 jsx-linker > esprima esprima 1.0.4 1.0.4 1.2.2 jsx > esprima esmangle 0.0.17 0.0.17 1.0.1 jsx > esmangle escodegen 0.0.28 0.0.28 1.3.3 jsx > escodegen source-map 0.1.32 0.1.32 0.1.33 jsx > source-map-support > source-map こんな感じで表形式で自分の依存ライブラリが古いかどうかを見てくれる。便利。

9. david もうnpmじゃないんですが、 david は npm outdated と合わせて使うといいかなーと思ったので記述しておきます。

david はモジュールの最新安定バージョンを取ってきてくれるツールです。 $ npm install david -g # こんな風に使う $ david update # ちなみに安定じゃない最新バージョンを取るなら $ david update -u これで依存モジュールを全て最新にしてくれます。依存モジュールの依存モジュールは最新にしない(あくまで自分が依存しているモジュールだけ最新にする)



10. npm deprecate [package] / npm unpublish [package] 自分でnpmライブラリ書いてて、そのライブラリのとあるバージョンにissueが見つかって、あんまり使ってほしくない時ありますよね。 そういう時はnpm deprecateを使いましょう。 $ npm deprecate useragent.jsx@"< 0.1.1" "CAUTION!! This version has security issue!!" #こうしておくと、npm installする時に $ npm install useragent.jsx@0.1.0 npm WARN deprecated useragent.jsx@0.1.0: CAUTION!! This version has security issue!! # みたいに出るので、npm install時にWARNINGが出て注意喚起することができます。 そうじゃなくてもうinstallをさせたくない時は npm unpublish を使いましょう。 $ npm unpublish useragent.jsx@0.1.0 #こうしておくと npm installでは見つからなくなる

というわけで npmのtips10選でした。他にもあれば教えて下さい。



スーパー小ネタ系 npm isntall とnpm xmas が触れられてない！ RT: npmのあまり知られてない機能 10選 - from scratch http://t.co/p0KV0hqBNF — Masayuki Ishikawa (@M_Ishikawa) June 10, 2014 という報告を頂いたのでお知らせします。 npm は izaacsの悪ノリコマンドが入ってて npm xmas xmas気分でいいですね。 npm visnup npm visnupってやるとこれ誰よ、っていう人が出てくるんですが、

この方ですね。 https://github.com/visnup node knockoutとかやってるイジられキャラらしいです。 npm substack substackの名言が出てきます。 $ npm substack c/,,\ $ npm substack SEPARATE ALL THE CONCERNS! $ npm substack \o/ $ npm substack MODULE ALL THE THINGS! $ npm substack Replace your configs with services substackがどこで言ってたのか分かりませんが、言いそうな事ではあります。 引き続き小ネタも募集中

追加枠