18

インターネットを見ると、特別な「index.js」モジュール ファイルと混同されています。

babelJS + Node.jsまたはBrowserify / Webpackを使用して、「libs」ディレクトリ内に「index.js」モジュールをインポートできますimport myLib from "./libs"(つまり、/indexまたは/index.js部分を省略します)。

「index.js」モジュールの解決 (格納フォルダーの指定) は、ES6 (ECMAScript 2015) モジュールの公式標準でサポートされていますか? それとも、単に "カスタム" Node.js / CommonJSトランスパイル動作ですか?

/index|を省略することはできますか? /index.jsすべてのブラウザーでもインポートの一部になりますか (モジュールがすべてのブラウザーでサポートされる場合)?

4

2 に答える 2

23

「index.js」モジュールの解決 (格納フォルダーの指定) は、ES6 (ECMAScript 2015) モジュールの公式標準でサポートされていますか?

いいえ。ES2015 には、モジュール ローダーやモジュール識別子の解釈方法については何も含まれていません。


それとも、単に「カスタム」の Node.js/CommonJS トランスパイル動作ですか?

はい。モジュール解決アルゴリズムについては、ドキュメントを参照してください。関連部分:

require(X) from module at path Y
1. If X is a core module,
   a. return the core module
   b. STOP
2. If X begins with './' or '/' or '../'
   a. LOAD_AS_FILE(Y + X)
   b. LOAD_AS_DIRECTORY(Y + X)
3. LOAD_NODE_MODULES(X, dirname(Y))
4. THROW "not found"
[...]
LOAD_AS_DIRECTORY(X)
1. If X/package.json is a file,
   a. Parse X/package.json, and look for "main" field.
   b. let M = X + (json main field)
   c. LOAD_AS_FILE(M)
2. If X/index.js is a file, load X/index.js as JavaScript text.  STOP
3. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP
4. If X/index.node is a file, load X/index.node as binary addon.  STOP

すべてのブラウザでインポートの /index|/index.js 部分を省略することは可能ですか (モジュールがすべてのブラウザでサポートされる場合)?

ブラウザの実装が既存のモジュール ローダーとの最大の互換性を目指していることを願っていますが、現時点ではわかりません。ブラウザとは関係がないかもしれませんが、サーバーがモジュール識別子を解決する方法とは関係ありません。私は最近開発をフォローしていないことを告白するので、他の洞察は大歓迎です:)

于 2016-05-11T15:11:16.920 に答える