为了让同一个模块可以运行在前后端,在写作过程中需要考虑兼容前端也实现了模块规范的环境。为了保持前后端的一致性,类库开发者需要将类库代码包装在一个闭包内。以下代码演示如何将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; });
兼容原理和我们平常做浏览器兼容的原理是一样的,无非就是能力检测和怪癖检测。
时间: 2024-09-29 16:32:03