把自己的js模块兼容到AMD CMD CommonJS
Posted 三十亿少女的梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把自己的js模块兼容到AMD CMD CommonJS相关的知识,希望对你有一定的参考价值。
为了让同一个模块可以运行在前后端,在写作过程中需要考虑兼容前端也实现了模块规范的环境。为了保持前后端的一致性,类库开发者需要将类库代码包装在一个闭包内。以下代码演示如何将hello()方法定义到不同的运行环境中,它能够兼容Node(CommonJS),AMD,CMD以及常见的浏览器环境中:
(function (name, definition) { //检测上下文环境是否为AMD或CMD var hasDefine = typeof define === ‘function‘; //检查上下文环境是否为Node var hasExports = typeof module !== ‘undefined‘ && module.exports; if(hasDefine) { //AMD环境或CMD环境 define(definition); } else if(hasExports) { //定义为普通Node模块 module.exports = definition(); } else { //将模块的执行结果挂在window变量中,在浏览器中this指向window对象 this[name] = definition(); } })(‘hello‘, function () { var hello = function () {}; return hello; });
兼容原理和我们平常做浏览器兼容的原理是一样的,无非就是能力检测和怪癖检测。
以上是关于把自己的js模块兼容到AMD CMD CommonJS的主要内容,如果未能解决你的问题,请参考以下文章
插件兼容CommonJS, AMD, CMD 和 原生 JS
如何让你的插件兼容CommonJS, AMD, CMD 和 原生 JS