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

22

在互联网上搜索时,我对特殊的“index.js”模块文件感到困惑。

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

“index.js”模块解析(指定包含文件夹)是否被ES6(ECMAScript 2015)模块官方标准支持?还是只是“自定义”的Node.js/CommonJS转换行为?

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

2个回答

24

“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 部分?

希望浏览器实现能够最大程度地兼容现有的模块加载器,但目前我们还不知道。也许这与浏览器无关,而是与服务器如何解析模块标识符有关。我承认我最近没有跟进过这方面的发展,如果有其他见解,非常感谢:)


太好了!谢谢,很高兴知道这个。 - Zorgatone

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接