This topic created in 2277 days ago, the information mentioned may be changed or developed.
node 识别 es module 的时候,怎么做到兼容的
比如 fs 这个模块,是 module.exports 这样导出的
那么 require('fs') 和 import 'fs' 都可以生效是怎么兼容的
找了一些官方博客和文档里没有找到相关内容,准备去 debug 源码了,请问有人了解这块么~
5 replies • 2020-03-29 16:56:25 +08:00
 |
|
1
libook Mar 12, 2020
不同的模式用不同的解释过程,这个你想了解细节还真得去看 Node 源码。
不过 Node 是要求必须有地方能明确指出你当前文件到底是 ESM 还是 CommonJS,要么是通过文件扩展名,要么通过当前模块目录下的 package.json,目前看来 Node 是无法在同一文件内同时兼容两种模块语法的。
|
 |
|
2
unsad Mar 12, 2020
执行入口文件时有判断。shouldUseESMLoader,在源码里搜一下这个方法。
|
 |
|
3
JayLin1011 Mar 12, 2020
Node.js 本身不兼容 ES Module,仅支持 CommonJS 规范,但是有 babel 生态,比如 babel-register 等可以帮你把完成编译工作,所以你甚至可以在 Node 环境中使用 ES Module,当然,最新的 Demo 已经实现了模块化的大一统,面向未来 ES Module 仍是标准。
|