npmのあまり知られてない機能 10選
なんか最近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 <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- 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ってやるとこれ誰よ、っていう人が出てくるんですが、
この方ですね。
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がどこで言ってたのか分かりませんが、言いそうな事ではあります。
引き続き小ネタも募集中
追加枠
npm config set init.license
npmって npm init で作る時に LICENSEのデフォルトをISCにするんですが、これは変更可能です。
$ npm config set init.license MIT #これで、npm initの時のライセンスがMITになる。
@azu_re npm configで init.license に MIT って入れるとデフォがMITになります。 npm config set init.license MIT って僕はやってますね。 https://t.co/hThYv73wnJ
— Yosuke FURUKAWA (@yosuke_furukawa) 2014, 9月 4