比较 commonjs 和 ESM 模块使用方式

本文对比了commonjs和ESM两种模块使用方式。commonjs中,`require`和`module.exports`是核心,动态导入使用`require()`,且导出为对象引用。ESM在ES6中引入,采用`import`和`export`关键字,编译阶段即可确定导出,导出为值的引用,有作用域限制。在浏览器中,`<script type="module">`用于加载ESM模块,异步执行。混合使用时,建议将`import`语句置于文件顶部。
摘要由CSDN通过智能技术生成

commonjs

commonjs 中有几个特别的变量,moduleexportsrequireglobal__filename__dirname

在一个 js 文件中输入下面这行,你会发现可以打印出 5 个 argument。

console.log(arguments);

它们分别对应的就是:exportsrequiremodule__filename__dirname

commonjs 的导出机制比较简单,只有 module.exportsexports。需要注意的是,他们指向的都是同一个对象。如果对 module.exports 赋值,则通过 exports.xxx 导出的所有变量都会失效,它所指向的对象和 module.exports 指向的不是同一个对象,而导出时是以 module.exports 指向的对象为准。

require 是动态导入模块的,只有执行到 require 语句的时候才会导入模块,它导入的是模块的一个拷贝。模块导入一次之后就会被缓存起来,后面再导入时都是使用的已缓存的版本。

举个简单例子,下面代码会先打印 index 再打印 a。如果把 require 换成 import,则会先打印 a 再打印 index

// a.js
console.log('a')

// index.js
console.log('index')
require('./a')
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值