ES6(EcmaScript 2015)模块:import index.js

Zor*_*one 14 javascript node.js ecmascript-6 es6-module-loader es6-modules

在互联网上看,我对特殊的"index.js"模块文件感到困惑.

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

是否支持ES6(EcmaScript 2015)模块官方标准的"index.js"模块解析(指定包含文件夹)?或者它只是"自定义"NodeJS/CommonJS转换行为?

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

Fel*_*ing 18

是否支持ES6(EcmaScript 2015)模块官方标准的"index.js"模块解析(指定包含文件夹)?

No. ES2015不包含有关模块加载器或如何解释模块标识符的任何内容.


或者它只是"自定义"NodeJS/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
Run Code Online (Sandbox Code Playgroud)

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

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