1
libook 2020-03-12 18:54:58 +08:00
不同的模式用不同的解释过程,这个你想了解细节还真得去看 Node 源码。
不过 Node 是要求必须有地方能明确指出你当前文件到底是 ESM 还是 CommonJS,要么是通过文件扩展名,要么通过当前模块目录下的 package.json,目前看来 Node 是无法在同一文件内同时兼容两种模块语法的。 |
2
unsad 2020-03-12 19:39:36 +08:00
执行入口文件时有判断。shouldUseESMLoader,在源码里搜一下这个方法。
|
3
JayLin1011 2020-03-12 21:34:56 +08:00
Node.js 本身不兼容 ES Module,仅支持 CommonJS 规范,但是有 babel 生态,比如 babel-register 等可以帮你把完成编译工作,所以你甚至可以在 Node 环境中使用 ES Module,当然,最新的 Demo 已经实现了模块化的大一统,面向未来 ES Module 仍是标准。
|
4
ubuntugx OP node 在去年 11 月份的更新了对 esm 的支持 https://medium.com/@nodejs/announcing-core-node-js-support-for-ecmascript-modules-c5d6dc29b663
这里问了 esm 和 cjs 的兼容问题,可以在源码里搜索到: node 源码 lib/internal/modules/cjs/loader.js 搜一下 default 还有 esm/translators.js 之后仔细研究后补充博客 |
5
ubuntugx OP 写了一篇博客讲 node 模块载入的事情 https://www.cnblogs.com/ubuntugx/p/12592584.html
|