## 现象 1. 项目A:ESM 模块文件中导入 CommonJS 模块文件。运行项目没报错 > [https://stackblitz.com/edit/stackblitz-starters-> pescaa?file=p...](https://link.segmentfault.com/?enc=RHytx6FgBECDeSI%2BFFJYcg%3D%3D.FwAhcWkSYjSEHFSmmROFh0nI%2BJYMQ8XytSI%2BTBP1AFjtg5ThAADP06beugy20c8oo6YZ4cXamLvmBlfBcNaUp47h05Ak4BqFCqGvclFr3zY%3D) 2. 项目B:CommonJS 模块文件中导入 ESM 模块文件,运行项目报错 > [https://stackblitz.com/edit/stackblitz-starters-> hujdvx?file=p...](https://link.segmentfault.com/?enc=l6kDrWL9PrrmkGHxb2u30A%3D%3D.ENTBu%2F1WIHZEwPVoi6QcculOTJW2NtB1VIHpmUKk%2B14krlDFuNfbc9NNU%2Fx4%2Fd3mQahHSfm0ytV339MsXZkuFm62zm3Zh5%2FIoBsLjrFDIS0%3D) * * * ## 关于 在 [https://nodejs.org/api/packages.html](https://link.segmentfault.com/?enc=7f%2FmvoF1zwRfL6LbpU2j%2Bg%3D%3D.OW%2FWtT78QiuUJC4R7vLgarYtF9jXCBAMQCiZ4Cug%2F0y9aCuzujHUMQxAtl3IggOn) 中有这样一段内容:  如果以模块的形式导入会使用模块自己的 package.json. 如果以路径的形式化导入会使用被导入文件就近的 package.json. 我的这个理解对不对? * * * ## 问题 我一时也不知道该怎么表述这个问题了。大概就是 ESM 和 CommonJS 互相导入的问题吧。 1. 项目是 ESM,那么项目的某些文件中能不能用 CommonJS、然后在 ESM 中导入 CommonJS?或者项目是 CommonJS,项目的某些文件是 ESM,CommonJS 中能不能导入 ESM? 2. import 本地项目的某一个文件,为什么会使用导入文件附近的 package.json?被导入文件附近的 pacakge.josn 有什么影响?  3. 如果是导入模块,是不是一般模块的 package.json 中都会指明使用 CommonJS 语法会导入哪个文件、使用 ESM 语法会导入哪个文件? =============================================== ## 对于以上的问题 [@然后去远足](/u/rhqyz) 已经给出了准确的回答。 ### 补充两个问题 另外就是 在 [https://nodejs.org/api/packages.html](https://link.segmentfault.com/?enc=SlQbPIzEMDeq79xIBp3nRw%3D%3D.xV9FLgoehlZwMen8DBRqF%2F5NY2y%2Fkqj4WCY67LILHv3K5lea5sN1T%2FcQhUWbKIPs) 的开头部分 ES 模块和CommonJS模块的对比中提到了, ES可以 loader commonjs, commonjs不能loader es   补充问题: #### 1.至于为什么 commonjs 不能loader es,我不确定,chatgpt的回复  [@然后去远足](/u/rhqyz) 求大佬再帮忙解释一下。 #### 2.让chatgpt给个示例, 他给出的示例中 提到的输出顺序 也搞不懂为什么 顺序不确定。   按照我的理解: commonjs的require是同步的,es的import也是同步的。 所以main.js 中 require('./commonjsModule.js'); commonjsModule.js中 require('./es6Module.mjs'); 所以 es6Module.mjs 不是应该先被加载并执行内部的代码吗?