JS Module

本文深入解析了三种主流模块规范:UMD、CommonJS和ES6 module。详细对比了CommonJS和ES6 module在加载机制、输出特性及缓存方面的区别,为开发者提供了全面的模块化编程指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三种模块规范:

  • UMD
  • CommonJS
  • ES6 module

CommonJs

commonJS是node的模块化系统。主要语法为:module.exports、exports、require

导出:

模块导出:

//一个一个 导出

module.exports.age = 1

module.exports.foo = function(){}

exports.a = 'hello'



//整体导出

module.exports = { age: 1, a: 'hello', foo:function(){} }



//整体导出不能用`exports` 用exports不能在导入的时候使用

exports = { age: 1, a: 'hello', foo:function(){} }

这里需要注意 exports 不能被赋值,可以理解为在模块开始前exports = module.exports, 因为赋值之后exports失去了 对module.exports的引用,成为了一个模块内的局部变量

exports module.exports 的区别

module.exports 默认值为{}

exports 是 module.exports 的引用

exports 默认指向 module.exports 的内存空间:module.exports 等同于 export default 可以用 import 引入

require() 返回的是 module.exports 而不是 exports

若对 exports 重新赋值,则断开了 exports 对 module.exports 的指向

 

es6 module

es6模块化主要是es6制定的,官方化,适用于浏览器端。主要语法使用:export,import

export * from 'module'; //重定向导出 不包括 module内的default

export { name1, name2, ..., nameN } from 'module'; // 重定向命名导出

export { import1 as name1, import2 as name2, ..., nameN } from 'module'; // 重定向重命名导出



export { name1, name2, …, nameN }; // 与之前声明的变量名绑定 命名导出

export { variable1 as name1, variable2 as name2, …, nameN }; // 重命名导出



export let name1 = 'name1'; // 声明命名导出 或者 var, const,function, function*, class



export default expression; // 默认导出 将expression赋值给default

export default function () { ... } // 或者 function*, class

export default function name1() { ... } // 或者 function*, class

export { name1 as default, ... }; // 重命名为默认导出

 

 

commonJs esModule 的区别

  • commonJs是被加载的时候运行,esModule是编译的时候运行
  • commonJs输出的是值的浅拷贝,esModule输出值的引用
  • commentJs具有缓存。在第一次被加载时,会完整运行整个文件并输出一个对象,拷贝(浅拷贝)在内存中。下次加载文件时,直接从内存中取值
  • commonJS 导出是值拷贝,ES6 的 export default 导出也是值拷贝,export {} 导出才是引用绑定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值