Chrome & Node 中的 ES6 模块..."导出函数"还是"module.exports = function"?



我有一个这样的模块:

module.exports = class Edge {
constructor(vertex1, vertex2) {
this.vertex1 = vertex1;
this.vertex2 = vertex2;
}
}

我想将其导入到Chrome中的一些NodeJS文件和一些前端文件中。我知道Chrome现在支持ES6模块,但是导入给我带来了麻烦:

引用错误:未定义模块

我想我应该使用export class { ... },但这在 NodeJS 中不受支持,对吗?如何使此模块同时适用于Chrome和NodeJS?

ES6 模块目前在标志下受支持,因此可以在两种环境中让文件本机工作。需要注意的几点重要事项:

  • 在 Node 中,文件必须具有 .mjs 扩展名,因此 Node 事先知道将其加载为 ES 模块而不是 CommonJS 模块
  • 浏览器不会自动搜索.js或 .mjs 扩展名。导入时,您必须自己添加它们,例如import { Edge } from './edge.mjs'

然而,这项技术仍然是新的和实验性的,没有很多关于这个主题的文档或材料。如果你想支持较旧的节点环境和浏览器,那么依赖本机技术并不是一个好主意。

如果你想支持较旧的环境,你可以使用像 webpack 这样的工具将你的文件"捆绑"到一个任何环境都可以运行的大 JS 文件中。

最后,更多地了解 ES 模块,并详细了解语法的工作原理(尤其是默认值),这样以后会遇到更少的问题。

使用 Babel 编译代码

相关内容

最新更新