如何欺骗 Node.js 将 .js 文件加载为 ES6 模块?

Tom*_*ica 5 javascript node.js ecmascript-6

Node.JS 10 添加了对加载 ES6 模块的实验性支持,这些模块已经在浏览器中运行。这意味着我们最终可以为 Node.JS 和浏览器使用完全相同的文件,而无需任何转译或 polyfill。

除了我们不能。Node.js 需要.mjs将文件作为模块加载的扩展名。我尝试使用符号链接来欺骗节点,但节点绕过了它:

D:\web\lines>node --experimental-modules ES6test.mjs
(node:7464) ExperimentalWarning: The ESM module loader is experimental.
D:\web\lines\ES6test.js:6
import myLibrary from "./MyFile.mjs";
       ^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我想不出任何其他解决方法来完成这项工作 - 这确实使整个 ES6 模块支持变得毫无用处。

其他人能想出一些技巧让 Node.js 忽略扩展吗?

小智 7

您现在可以通过 2 个步骤.js在节点v12.x 中导入文件:

  • 在您的package.json文件中添加以下行:
// package.json
{
  "type": "module"
}
Run Code Online (Sandbox Code Playgroud)
  • 在脚本添加--experimental-modules标志:
node --experimental-modules index.js
Run Code Online (Sandbox Code Playgroud)

参考:https : //nodejs.org/api/esm.html