CommonJS与ESModule标准

模块化的作用

  • 解决全局变量污染
  • 解决依赖混乱
  • 便于代码功能分类
  • 利于代码维护管理

规范内容

  • CommonJS规定:
  1. 每个独立的js文件中的全局变量是互不干扰的,不会污染其他js文件

  2. CommonJS是一个社区规范,node环境支持,每个js文件都是一个CMJ模块,使用node运行其中一个模块(入口模块)

  3. 当某模块需要使用其他模块的内容时,其他模块要【暴露】此内容,而此模块需要【导入】此内容

1.js
function a(a,b){
	return a+b;
};
// 导出,暴露
module.exports = {
	a
};

2.js
// 导入,返回暴露的对象内容
const a = require('./1.js');

导入模块时,可以省略.js
必须以./../开头

  • ES Module规定:
  1. 这是随着ES6发布的官方模块化标准,目前浏览器和新版本node环境均支持
  2. 当某模块需要使用其他模块的内容时,其他模块要【暴露】此内容,而此模块需要【导入】此内容,一个模块可以同时存在两种导出方式,最终会合并为一个「对象」导出
// 默认导出(暴露),只能暴露一个内容
export default 3
// 具名导出
export const d = 3;
const d=3;
export {d}
// as 另取名
const k = 3;
export k as m;

// 导入
// 仅运行一次该模块,不导入任何内容
import "模块路径"
// 导入属性 a、b,放到变量a、b中
import { a, b } from "模块路径"   
// 导入属性 default,放入变量c中
import c from "模块路径"  
// default->c,a->a, b->b
import c, { a, b } from "模块路径" 
// 将模块对象放入到变量obj中
import * as obj from "模块路径" 

// 以上均为静态导入
import("模块路径") // 动态导入,返回一个Promise,完成时的数据为模块对象

注意:静态导入的代码必须为在代码顶端,也不可放入代码块中
另外,静态导入的代码绑定的符号是常量,不可更改
导入模块时,不可以省略.js

两者最主要的区别就是导入与导出的区别
CommonJS只用于node环境
ES Module可用于node环境与浏览器环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值