模块规范

48 阅读1分钟

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')

扩展

  1. 实际写的代码是放在内置函数里,从而使module,exports生效
function (exports, require, module, _filename, _direname){
    实际代码
}
  1. 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')
}

数据引用

  1. import引入的变量和文件里的对应变量,ES6指向同一个内存,CommonJS是复制变量
  2. 注意let,var,const的使用

ES6如何解决非模块化的问题

  1. 导入module,解决全局污染问题,只导出必要的字段,且可重命名;导入JS,是将文件的全部数据导入
  2. module只关心自己所依赖的,以及需要导出的,从而解决依赖混乱的问题
  3. module的导入导出解决数据安全问题