在我正在合作的一个项目中,我们有两个选择可以使用哪个模块系统:
require导入模块,使用module.exports和exports.foo导出模块。import导入模块,使用ES6 export导出模块使用一个比另一个有什么性能上的好处吗?如果我们要使用ES6模块而不是Node,我们还需要知道其他什么吗?
发布于 2015-07-12 12:38:45
更新
由于Node v12 (2019年4月),对ES模块的支持在默认情况下是启用的,而且由于Node v15 (2020年10月)是稳定的(参见这里)。包括节点模块的文件必须以.mjs结尾,或者最近的package.json文件必须包含"type": "module"。节点文档有更多的信息,也有关于CommonJS和ES模块之间互操作的信息。
性能方面,总是有机会更新的功能没有现有的功能那么好的优化。但是,由于模块文件只评估一次,所以性能方面可能会被忽略。最后,您必须运行基准,以得到一个明确的答案无论如何。
ES模块可以通过import()函数动态加载。与require不同的是,这将返回一个承诺。
先前的回答
使用一个比另一个有什么性能上的好处吗?
请记住,目前还没有JavaScript引擎支持ES6模块。你自己说你在利用巴贝尔。默认情况下,Babel将import和export声明转换为CommonJS (require/module.exports)。因此,即使您使用ES6模块语法,如果您在Node中运行代码,也将在幕后使用CommonJS。
CommonJS和ES6模块之间存在技术差异,例如CommonJS允许您动态加载模块。ES6不允许这样做,但是有一个API正在开发中。
由于ES6模块是标准的一部分,我将使用它们。
发布于 2015-07-11 08:49:38
您可能需要考虑以下几种用法/功能:
要求:
require,则会一个接一个地加载和处理它们。ES6进口:
另外,需求模块系统也不是基于标准的。既然存在ES6模块,就不太可能成为标准模块了。将来,在各种实现中都会有对ES6模块的本地支持,这将有利于性能的提高。
发布于 2020-02-21 03:41:11
到目前为止,ES6导入,导出是总是编译成CommonJS,所以没有使用任何一个或另一个的好处。尽管建议使用ES6,因为当浏览器发布本机支持时,它应该是有利的。原因是,您可以从一个文件导入部分,而在使用CommonJS时,您必须需要所有的文件。
ES6→import, export default, export
CommonJS→require, module.exports, exports.foo
下面是这些的常用用法。
ES6出口违约
// hello.js
function hello() {
return 'hello'
}
export default hello
// app.js
import hello from './hello'
hello() // returns helloES6导出倍数和导入倍数
// hello.js
function hello1() {
return 'hello1'
}
function hello2() {
return 'hello2'
}
export { hello1, hello2 }
// app.js
import { hello1, hello2 } from './hello'
hello1() // returns hello1
hello2() // returns hello2CommonJS module.exports
// hello.js
function hello() {
return 'hello'
}
module.exports = hello
// app.js
const hello = require('./hello')
hello() // returns helloCommonJS module.exports倍数
// hello.js
function hello1() {
return 'hello1'
}
function hello2() {
return 'hello2'
}
module.exports = {
hello1,
hello2
}
// app.js
const hello = require('./hello')
hello.hello1() // returns hello1
hello.hello2() // returns hello2https://stackoverflow.com/questions/31354559
复制相似问题