CommonJS
服务器端应用广泛,社区标准,也叫ServerJS
导出(暴露)
this, export, module.export在初始时都指向{},export是module.export的简易引用,最终以module.export导出的为准。
exports.a=name;
exports={a:name};
module.exports.a=apple;
module.exports={a,b} //export导出为准
导入(引入)
//解构赋值a再重命名aa
const {a:aa,b}= require('/xxx.js')
扩展
- 实际写的代码是放在内置函数里,从而使module,exports生效
function (exports, require, module, _filename, _direname){
实际代码
}
- CommonJS如果想在浏览器上run,需要使用browserify编译
ES6
浏览器端应用广泛,官方标准
导出
// 分别导出
export a;
// 统一导出,类似对象
export {a,b};
// 默认导出
export default {a,b};
导入
//导入全部
import * as school from '/xxx.js'
//命名导入,对应分别导出和统一导出
import {a as aa,b} from '/xxx.js'
//默认导入,对应默认导出
import xyz from '/xxx.js'
// 动态导入
onclick = async()=>{
const res= await import('/xxx.js')
}
数据引用
- import引入的变量和文件里的对应变量,ES6指向同一个内存,CommonJS是复制变量
- 注意let,var,const的使用
ES6如何解决非模块化的问题
- 导入module,解决全局污染问题,只导出必要的字段,且可重命名;导入JS,是将文件的全部数据导入
- module只关心自己所依赖的,以及需要导出的,从而解决依赖混乱的问题
- module的导入导出解决数据安全问题