使用 Node.js require 与 ES6 import/export
在我合作的一个项目中,对于可以使用哪个模块系统,我们有两个选择:
- 使用 导入模块,并使用 和 导出。
require
module.exports
exports.foo
- 使用 ES6 导入模块,使用 ES6 导出模块
import
export
使用一个比另一个有什么性能优势吗?如果我们要使用ES6模块而不是Node模块,我们还需要知道什么吗?
在我合作的一个项目中,对于可以使用哪个模块系统,我们有两个选择:
require
module.exports
exports.foo
import
export
使用一个比另一个有什么性能优势吗?如果我们要使用ES6模块而不是Node模块,我们还需要知道什么吗?
自 Node v12(2019 年 4 月)起,默认情况下启用对 ES 模块的支持,并且自 Node v15(2020 年 10 月)以来,它是稳定的(请参阅此处)。包含节点模块的文件必须以 结尾,或者最近的文件必须包含 。Node文档提供了大量更多信息,也涉及CommonJS和ES模块之间的互操作。.mjs
package.json
"type": "module"
在性能方面,总是有可能较新的功能不如现有功能那么优化。但是,由于模块文件只评估一次,因此可以忽略性能方面。最后,无论如何,您必须运行基准测试才能获得明确的答案。
ES 模块可以通过该函数动态加载。与 不同,这返回一个承诺。import()
require
使用一个比另一个有什么性能优势吗?
请记住,目前还没有原生支持 ES6 模块的 JavaScript 引擎。你自己说你正在使用巴别塔。无论如何,Babel无论如何都会默认转换为CommonJS(/)。因此,即使您使用ES6模块语法,如果您在Node中运行代码,也将在后台使用CommonJS。import
export
require
module.exports
CommonJS和ES6模块之间存在技术差异,例如CommonJS允许您动态加载模块。ES6不允许这样做,但是有一个API正在开发中。
由于ES6模块是标准的一部分,因此我会使用它们。
您可能需要考虑几种用法/功能:
需要:
require
ES6 进口:
此外,“需要”模块系统不是基于标准的。现在ES6模块的存在,它极不可能成为标准。将来,在各种实现中将对ES6模块的本机支持,这在性能方面将是有利的。