读书笔记(3)---- 模块化和规范

83 阅读1分钟

CommonJS规范

CommonJS,规范了需要用exports或者module.exports对模块进行导出。用require对模块进行引入。
Node的模块化实现就是基于CommonJS规范,通过fs模块实现了require方法(自己理解,没看过源码)。

AMD规范

举个例子,在AMD规范里如何定义模块

define(['module1','module2'],(module1,module2) => {
  return function(){
    //....
  }
})

再通过require引入即可。

在AMD规范里,主要是通过script标签以及src属性,来实现require方法(自己理解,没看过源码)。

CMD规范

举个例子,在CMD规范里如何定义模块

define(function(require,exports,module){
  //.....
})

再通过require引入即可。

如何实现一个兼容多种规范的模块

如果基于上面的三种规范,我们想实现出一个模块,就要适配每一种情况,如果都不满足,那么就默认在浏览器端,将模块挂载到window上变量上

(function(name,callback){
  const hasDefine = typeof define === 'function';
  const hasNode = typeof module !== undefined && module.exports;
  if(hasDefine){
    define(callback)
  }else if(hasNode){
    module.exports = callback
  }else {
    this[name] = callback
  }
})(() => {
  console.log('hello');
})