自从使用amd规范js编码风格之后,所有的代码我都是以模块方式对外提供接口。因为有些模块代码是nodejs(nodejs原始支持CommonJS规范)和浏览器端通用的,所以每次写到接口的时候都要判断运行上下文对模块定义方式的支持,籍此来兼容不同环境的写法。
判断的代码如下,很基础的用法:
<script>
void function(){
switch(true){
case typeof define!=='undefined' && define.amd:
console.log('amd');
break;
case typeof module==='object' && !!module.exports:
console.log('CommonJS');
break;
default:
throw 'unknown context environment';
}
}();
</script>
然后模块定义的时候就这样写:
void function(){
// 模块功能代码部分
// 因为这里讨论的是通用模块,这类模块是不应该存在必须外部依赖的,否则这个模块就是渣,所以不需要用到require的方法
// 直接定义exports
var exports={test:1};
// ...
switch(true){
case typeof define!=='undefined' && define.amd:
console.log('amd');
define(function(){ return exports; });
break;
case typeof module==='object' && !!module.exports:
console.log('CommonJS');
module.exports=exports;
break;
default:
throw 'unknown context environment';
}
}();
相关文档
暂无
随便看看
畅言模块加载中