@ledsun blog

無味の味は佳境に入らざればすなわち知れず

(私的)npmモジュールの作りかた

npmモジュールを作るときの自分の手順をまとめました。

プロトタイプをコーディング済みで、コンセプトが固まっている前提です。

モジュール名を決める

  1. npmを検索、類似ライブラリが無いか探す。 ついでに、APIや実装にパクれるネタを探します
  2. ハイフン区切りでモジュール名を決める
  3. npmを検索して名前が被らないか確認する

READMEを書く

  1. モジュール名のディレクトリをつくる
  2. エディタ*1でREADMEを書く。 内容は、
    1. Description: モジュールの価値を伝える一文です。 githubでプロジェクトを作るときと、npm initするときにも使います
    2. Usage: 自分の「こう使うと気持ちいい」イメージを伝える、サンプルコード。 最初のテストコードになるかもしれません
    3. API: 定義する関数とその引数など*2
    4. Setup: 対象環境(npm、browserify、bowerなど)を決める。各環境向けのインストールコマンドを書きます
    5. Development: ビルドやテストの手順です。npm run buildnpm testを必要に応じて羅列します
  3. commit
git init
git add README.md
git commit -m 'First commit.'

githubにpush

  1. githubでモジュール名のプロジェクトを作る。READMEやgitignoreは作りません
  2. git remote add
  3. git push origin master github上の見た目を確認します

package.jsonをつくる

  1. npm init 内容は、
    1. name: そのまま
    2. version: 0.0.1
    3. description: READMEで決めたもの
    4. entry point: そのまま
    5. test command: そのまま
    6. git repository: そのまま
    7. keyword: descriptionの単語から適当に選んで羅列
    8. author: ledsun*3
    9. license: MIT
  2. ライセンスを修正。細かすぎて伝わらない package.json 小ネタ三選 - t-wadaのブログを参考にして、mit-license.orgを使います
  3. fixpack commit前にやった方がdiffが汚れない
  4. git commit
git add package.json
git commit -m 'Add package.json.'

テストの枠組を用意する

  1. npm install --save-dev mocha
  2. .gitignoreをつくる。 node_modules echo node_modules/ > .gitignore
  3. npm run testmochaを書く。6to5使うなら mocha --compilers js:6to5/registerにします
  4. npm test してみる
  5. test.jsを書く require('./')(ES6ならimport)だけ書く
  6. index.jsを書く。空ファイルです
  7. git commit
git add index.js test.js .gitignore package.json
git commit -m 'Add package.json.'

開発する

普通にTDDします。

  1. ソースファイルが複数になったらsrcディレクトリを作ります
  2. ストファイルが複数になったらtestディレクトリを作ります
  3. ライブラリをES6で書いて公開する所から始めよう | Web Scratchを参考にして6to5を使うなら、 npm run buildを書いたり、index.js.gitignoreに追加したりします
  4. twada/power-assert · GitHubを使うなら、npm install --save-dev espower-loader power-assertして、
require('espower-loader')({
    cwd: process.cwd(),
    pattern: 'test.js'
});

enable-power-assert.jsを作って、npm testmocha --require enable-power-assert.jsに書き換えます

最初はpower-assertを使わないで書いています。 実装が難しくて、テストの失敗を繰り返す場合には、power-assertを追加します。

公開する

npmのアカウントを作ります。

  1. package.jsonfilesindex.jsを書く
  2. npm publish

*1:atomのmarkdown previewを使っています

*2:継続的にモジュールを拡張したことがありません。再生成のコストに実感がありません。修正する事は考えずに手で地道に書いています。

*3:メールアドレス入れてません。入れたほうがいいのでしょうか?