聊聊 JavaScript 的几种模块系统

本文深入探讨JavaScript的模块系统,包括CommonJS、ES Modules(ESM)、AMD和CMD。重点阐述了ESM与CommonJS的区别,如加载时机、导入导出方式以及值的处理。此外,还提到了UMD,一种适用于多种模块系统的技术,以解决跨平台兼容问题。
摘要由CSDN通过智能技术生成

模块系统

模块系统是什么?简单来说,其实就是我们在一个文件里写代码,声明一些可以导出的字段,然后另一个文件可以将其导入并使用。

模块化的优点:

1.文件里声明的变量会被隔离,不会暴露到全局,可以有效解决以往变量污染全局空间的问题;2.更容易看出代码之间的依赖关系,看文件头的的导入代码就知道;3.方便多人协作,各自开发自己的模块,而不冲突;4.不用担心文件引入的顺序;5.方便以文件为单位做单元测试;模块化解决了变量污染、代码维护、依赖顺序问题。

CommonJS

CommonJS,或者叫 CJS,是 nodejs 选择的模块化标准。

导出模块的写法:

// 集中一起导出
module.exports = {
  userName: '前端西瓜哥',
  // ...
}

// 或分散导出
module.exports.userName = '前端西瓜哥';

// 或
exports.userName = '前端西瓜哥'; 

每个文件都可以访问到一个 module 对象,其下的 exports 属性是一个空对象,你可以给它加上属性,module.exports 将作为可以导出的代码部分。

exports 是一个别名,它指向 module.exports,用它能够少打一点字。

然后是导入模块的写法:

const Setting = require('./user');

// 或用解构写法,直接提取属性
const { userName } = require('./user');

// 或不使用任何导出内容,但希望指定对应模块文件的副作用(如给全局注入变量)
require('./user'); 

require 方法能够找到对应模块文件,提取出它的 module.exports 对象,引入到当前模块中。关于 require 怎么找到模块的过程,也是一篇长篇大论,有机会另开一篇文章再讲解了。

nodejs 现在最新版也支持用 ES Modules 的方式了,需要在 package.json 上加上 "type": "module"

ES

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值