兼容多种模块规范写法

Author Avatar
GoDotDotDot 3月 09, 2017
  • 在其它设备中阅读本文章

为了能够让同一个模块能够运行前后端(这里特指浏览器和Nodejs),兼容主流设计规范。模块开发者往往需要将自己的代码包装在一个函数闭包中。那么一般开发者是怎样做的呢?下面给出的示例能够兼容AMD、CMD以及CommonJS规范,能够同时运行在浏览器端和以Nodejs为后端语言的后端。

(function(id,definition){
  // 判断是否是AMD或CMD
  var isAmdOrCmd = typeof define === 'function'
  // 判断是否是CommonJS
  var isCommonjs = typeof module !== 'undefined' && module.exports
  if(isAmdOrCmd){
    define(definition)
  }else if(isCommonjs){
    module.exports = definition()
  }else{
    // 这里的this在浏览器中为window,在node中为global
    this[id] = definition()
  }
})('demo',()=>{
  var demo = ()=>'this is a module demo'
  return demo
})

如果对三大主流规范不清楚的,可以查看我上一篇《前端模块设计规范》博文。

基于MIT开源协议
本文链接:http://blog.godotdotdot.com/2017/03/09/兼容多种模块规范写法/