-
Notifications
You must be signed in to change notification settings - Fork 8
ModuleName
このエントリでは、WebModule をベースにしたモジュールの命名について説明します。
初めて npm にモジュール(パッケージ)を登録しようとした方は、いくつかの制約が存在することに気がつくはずです。
- モジュール名に利用可能な文字種は a〜z, 0〜9, ドットとアンダーバーだけで、A〜Zは利用禁止です
- npm はモジュールをフラットな名前空間で管理しており、npm 全体でユニークな名前をつける必要があります
- 既に npmjs.org に存在する名前は使えません
- そして、大抵の名前は、既にどこかの誰かに取得されています
- package.json の name が衝突するとエラーになります(npm publish の段階でエラーになります)
例えばあなたが、非同期問題を美しく解決するモジュールを開発し、モジュール名を async にしたくても、その願いは恐らく叶いません。ドメイン名の登録と同じような、やり場のない敗北感を味わうのが現状です。
名前の衝突が発生するかどうかは $ npm search キーワード が調べることが可能ですが、npm search コマンドのレスポンスが30秒〜50秒ほど返ってこない事もあり、「最初から衝突しない名前空間を設計する」事がより重要になってきます。
WebModule をベースとしたモジュールは、2つの名前を持つことになります。
1つ目は github のリポジトリ名です。これは Valid.js のような名前になります。
2つ目は npm に登録してあるモジュール名です。これはユーザ名を先頭に付けた uupaa.valid.js のような名前になります。
本来は、github と npm の名前を統一できれば良いのですが、このエントリの上部で述べたようなパッケージマネージャのシステム上の理由により、ダブルネームを使い分ける必要があります。
WebModule が推奨するモジュールの命名規則は、以下の通りです。
-
github に登録するモジュール名はある程度自由に命名可能ですが、以下の点に注意してください
- モジュールの機能を端的に表したキーワードを設定してください。単語と単語の接続にはハイフンかアンダーバー使ってください
- JavaScriptで書かれたモジュールなら、末尾は ".js" にしてください
-
npm に登録するモジュール名は、先頭にgithubのユーザ名を付け、全体を小文字にしてください。
var moduleName = [GITHUB-USER-NAME, GITHUB-MODULE-NAME, ".js"].join(".").toLowerCase();
npm 公式では「モジュール名(パッケージ名)の末尾に".js"をつける必要はありません。不要です」と説明がありますが、WebModule では ".js" をつける事を推奨しています。理由は2つあります。
-
github 上のモジュール名と ⇔ npm 上のモジュール名の関係性が明白になるため(自動変換が簡単になるため)
// github リポジトリ名が "https://github.com/uupaa/Valid.js" の場合は、 // 以下の式で github 名から npm 名を生成できます "uupaa/Valid.js".replace("/", ".").toLowerCase(); // -> "uupaa.valid.js"
-
AltJS のように js をトランスレーションで作成するケースが増えてきたため、モジュール名の末尾に記述言語を、".ts" や ".coffee" のように付けたほうが分類しやすいため
です。
モジュールの命名例です。
// package.json
{
"name": "valid" // 既に存在するため npm publish でエラーになります
}// package.json
{
"name": "uupaa.Valid.js", // npm 名を指定します
"url": "https://github.com/uupaa/Valid.js", // github 名を指定します
"repository": {
"type": "git",
"url": "https://github.com/uupaa/Valid.js.git"
},
"x-build": {
"module": {
"develop": ["uupaa.reflection.js", "uupaa.help.js"], // npm 名を指定します
"release": ["uupaa.nodemodulejs"] // npm 名を指定します
}
},
"dependencies": { // npm 名を指定します
},
"devDependencies": { // npm 名を指定します
"uupaa.nodemodule.js": "",
"uupaa.reflection.js": "",
"uupaa.console.js": "",
"uupaa.help.js": "",
"uupaa.task.js": "",
"uupaa.test.js": "",
"uupaa.watch.js": "",
"uupaa.plato.js": "",
"uupaa.minify.js": ""
},
}