まずあれです、タイトルは盛りました。
実装は3分じゃおわらないよ!!
でも公開のための作業は3分くらいで行けるんじゃないかと思います。
作ったものを、公開したくてうずうずしている方は、ぜひ読んでみてください。
[1分目] npmアカウントを作ろう
npmの公式ページから
なにはともあれ、npmの開発者として登録しましょう。
https://npmjs.org/signup から、「Make it so.」しましょう。
特筆するようなことはないですが、すぐに使うので
- username
- password
- email address
は、ちゃんとメモしておきましょう。
npm adduser
登録ができたら、ターミナルからnpm adduser
を実行します。
すると、username・password・email addressを聞かれるので、
先ほど作ったアカウントのものを入力します。
これで~/.npmrc
にtoken情報が書き込まれ、
このアカウントから、npmモジュールを公開する準備が整います。
[2分目] モジュールを実装する
いよいよ実装です。とりあえず、プロジェクトルートを作りましょう。
% mkdir my-module
% cd my-module
そしてあとは、元気にnodeのコードを書いていけばいいんですが、
npmモジュールならではのルールがいくつかあるので、覚えておきましょう。
モジュールに必要なファイル
- package.json
すべてのnpmモジュールに必須です。
主にモジュールの名前や、依存関係などが書いてあります。
ゼロから作るときには、公式などから例をコピペしてもよいのですが、
npm init
を使うと、対話式で入力することができるので便利です。
- app.js
Webアプリケーションなら、メインのサーバーのコードはapp.jsに書くことが多いです。
expressとかでもそうですね。
ちなみにnode app
でサーバー起動する感じ。
- index.js
nodeでは、require('./hoge')
と書けば、./hoge/index.js
を読んでくれます。
てなわけで、ライブラリ的なモジュールを書く場合は、
index.jsを置いておけば、requireしやすくなります。
lib以下でコードの本体を書いて、
index.jsでそれをrequire、そのままexport、みたいな形のモジュールが多です。
// index.jsの例
var myModule = require('./lib/myModule');
// (実際には ./lib/myModule/index.js を読む)
// それをそのまま、このモジュールからexport
module.exports = myModule;
※2015/4/3 追記
requireの挙動はちゃんと確認したところ、
「指定したモジュールのpackage.json
のmain
プロパティで指定したファイルを読む」
ということになっていたので、ライブラリ的なモジュールを書く場合は、index.js
(とか)を用意した上で、
package.json
のmain
でも指定しておかないと、 requireができなくなるので注意しましょう。
require('./lib/index.js')
と書いた場合など、ローカルのファイルやディレクトリをrequireする場合は気にしなくてよい。
- bin/my-module
nodeを使ったコマンドラインツールを作りたい場合は、
bin以下にコマンドとして実行したいjsを置きます。
その上で、package.jsonにコマンドの場所を記述しておけば、
npm -g install
されたら、コマンドをインストールする、というモジュールになります。
#!/usr/bin/env node
console.log('print argv.');
console.log(process.argv);
{
"name": "my-module",
"bin": "bin/my-module"
}
なお、もっとちゃんとしたコマンドラインツールを作りたい場合、
optimistとかcommanderとか、
引数・オプションのハンドリングをしてくれるライブラリを使った方がいいです。
- grunt-plugin
gruntのpluginを書くときの話は、
さっき色々書いたので、よろしければ読んでみてください。
[3分目] 調整と公開
package.jsonの調整
いよいよ、公開の準備です。
package.jsonの中身をいろいろ確認しましょう。
- private
このプロパティがtrue
になっていると、
モジュールの公開ができません。
誤って公開してしまうのを防ぐフラグなので、
この公開直前のタイミングでfalseにするのがいいと思います。
- name
モジュールの名前です。
npmモジュールそれぞれのURLはhttp://npmjs.org/package/:name
という形式になっているので、
他の誰のモジュールとも重複禁止です。
http://npmjs.org で、公開してみる前にその名前が使われていないか、
チェックするとよいです。
また、nameに使えるのは 小文字英数字とハイフンだけです。
CamelCaseとか"_"区切りの名前はナシなので注意しましょう。
- version
最初は無難に、0.0.1とかにしておけばいいと思います。
2度目以降(アップデート)の時には、前に公開したときより大きい数字になるようにしましょう。
- main
このモジュールの主となるスクリプトファイルを指定します。
前の項でも触れましたが、 requireできるモジュールを作る場合は必須です。
grunt pluginの場合は、実はrequire
される機会がないのでいらない。
- dependencies
依存npmモジュールです。
プロジェクトにnpmモジュールを追加するときは、
必ずnpm install --save
を使うべきだと思います。
そうすれば、常にdependenciesは最新の状態に保たれます。
ただそれでも念のため、
1度node_modules
を削除して、再度npm insatll
して、
モジュールが正しく動くかどうか、などチェックしておくと安心です。
npm publish
いよいよ、公開です!!
package.jsonの準備さえ整っていれば、
npm publish
を叩くだけで、作業は終了です。
すぐに別の場所でnpm install my-module
して、
動作確認したり、にやにやしたり、しておきましょう。
[その後] アップデート
npmでは、公開のコマンドもアップデートのコマンドも、
どちらもnpm publish
で行うので、
公開とアップデートはほぼ動作が同じです。
さっきも書きましたが、versionを更新することだけは忘れずに。
まとめ
- package.jsonのDocを読めばだいたい大丈夫