ES6(EcmaScript 2015)模块:导入index.js

在互联网上看,我与特殊的“index.js”模块文件混淆。

使用babelJS + nodeJS或Browserify / Webpack我可以import myLib from "./libs" (即省略/index/index.js部分)使用import myLib from "./libs" “libs”目录中的“index.js”模块。

是ES6(EcmaScript 2015)模块官方标准支持的“index.js”模块分辨率(指定包含文件夹)? 还是只是“自定义”的NodeJS / CommonJS转储行为?

是否可以省略/index | /index.js所有浏览器中的导入部分(当所有浏览器都支持模块时)?

是ES6(EcmaScript 2015)模块官方标准支持的“index.js”模块分辨率(指定包含文件夹)?

ES2015不包含任何有关模块加载器或如何解释模块标识符的信息。


还是只是“自定义”的NodeJS / CommonJS转储行为?

是。 您可以在文档中阅读关于模块分辨率algorithm。 相关部分:

 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部分(当所有浏览器都支持模块时)?

希望浏览器实现的目标是最大限度地兼容现有的模块加载器,但现在我们不知道。 也许它与浏览器没有任何关系,但与如何服务器parsing模块标识符。 我承认我最近没有跟上发展,所以任何其他的见解都非常感谢:)