-
Couldn't load subscription status.
- Fork 8
ModuleName
このエントリでは WebModule の命名制約について説明します。
WebModule の命名には制約があります。
この制約は、WebModule が GitHub と npm という2つの異なるポリシーを持った環境にモジュールを登録する都合から発生しています。
- 使用可能な文字種の違い
- GitHub リポジトリ名に利用できる文字種は、A-Z, a-z, 0-9, ドット(.), アンダーバー(_), ハイフン(-) です
- npm パッケージ名に利用できる文字種は、a-z, 0-9, ドット(.), アンダーバー(_) です
| 文字種 | GitHub リポジトリ名 | npm パッケージ名 |
|---|---|---|
| A-Z | YES | NO |
| a-z | YES | YES |
| 0-9 | YES | YES |
| .(ドット) | YES | YES |
| _(アンダーバー) | YES | YES |
| -(ハイフン) | YES | NO |
- 名前空間の違い
- GitHub はユーザごとのローカルな名前空間でモジュールを管理しています。各ユーザが思い思いに
MyWebModule.jsを作成できます - npm はグローバルな名前空間でモジュールを管理しています。あるユーザが
mywebmodule.jsを作成すると、もうその名前は使用できません。先願制です
- GitHub はユーザごとのローカルな名前空間でモジュールを管理しています。各ユーザが思い思いに
これらを踏まえ、WebModule の命名規則は以下のようになっています。
WebModule のモジュール名は、MyExample.js のように、プリフィクス("My") + 機能名("Example") + 拡張子(".js") で構成されます。
- プリフィクスは "My" などの短い文字列を付けてください
- 省略も可能可能ですが、特殊な事情がない限り付けてください(RECOMMENDED)
- 省略した場合は、WebModule の名前空間における衝突が発生する可能性があります
- 2014-08 以降に生成されたモジュールには "WM" プリフィクスが設定されていることがあります
- 機能名にはモジュールの機能性を表す文字列を付けてください
- 基本的に PacalCase で命名してください
- iPhone や AKB などの広く一般に認識されている単語や略語は無理に加工せずそのまま利用します(例:
MyiPhoneDevice,MyAKBMemberList)
- 拡張子には開発環境を示す拡張子を指定します
- JavaScript なら ".js" にします。TypeScript なら ".ts" にします。
- npm の説明には「パッケージ名の末尾に".js"をつける必要はありません」といった説明がありますが、気にせず付けてください
- 拡張子を付けておくことで開発言語の特定が簡単になります。これは将来 WebModule が JavaScript 以外の環境(たとえばTypeScript)をサポートした場合に重要になります
- GitHub リポジトリ名から npm パッケージ名を生成する式が簡単になります
- "uupaa/MyExample.js".replace("/", ".").toLowerCase(); // -> "uupaa.myexample.js"
WebModule のモジュール名を "MyExample.js" とした場合を例に説明します。
GitHub のリポジトリ作成画面で指定するリポジトリ名を "MyExample.js" とします。
Owner Repository name
+-------------------+ +-------------------+
| uupp | / | MyExample.js |
+-------------------+ +-------------------+
この状態で node ../WebModule/clone コマンドを実行すると、このような package.json が生成されます。
{
"name": "uupaa.myexample.js",
"url": "https://github.com/uupaa/MyExample.js",
"repository": {
"type": "git",
"url": "https://github.com/uupaa/MyExample.js.git"
},
...
}npm publish コマンドで npm に登録されるパッケージ名は uupaa.myexample.js になります。
まとめるとこうなります
| 名前 | |
|---|---|
| GitHub ユーザ名 | uupaa |
| WebModule 名 | MyExample.js |
| GitHub リポジトリ名 |
uupaa/MyExample.js または単に MyExample.js
|
| GitHub リポジトリURL | https://github.com/uupaa/MyExample.js |
| npm パッケージ名 | uupaa.myexample.js |
| JavaScript クラス名 | window["MyExample"] new MyExample() |
| require名 | require("path/MyExample.js") |
npm に登録するパッケージ名には 強制的にGitHub ユーザ名を付与しているため、 npm のグローバルな名前空間におけるパッケージの衝突はありません。
WebModule のプリフィクスを省略したり、他者が利用しているプリフィクスと同じものを使った場合に、JavaScript クラス名が衝突する危険性があります。
既存のプリフィクスは、 npm search WebModule コマンドで検索可能です。