在Requirejs中,模块导出共有三种方式:
1. 通过return方式导出,优先级最高;
2. 通关module.exports对象赋值导出,优先级次之;
3. 通过exports对象赋值导出,优先级最低;
上面的三种优先级是绝对的优先级,无关代码的顺序,例如即使将exports导出放在最后,也会被module.exports覆盖,另外导出的内容只能是优先级最高的那个,而且仅仅包含其内容,绝不会它们内容的组合或并集。
1. 通过return方式导出
return具有阻断性,所以无论怎么写,优先级都是最高的,并且这也是Requirejs的官方推荐方式,如下:
define(function(require, exports, module) {
// 导出模块内容
return {
username : 'yiifaa'
}
});
2. 通过modeule.exports对象赋值导出
与return类型,但优先级没有那么高,这是继承至COMMONJS的写法,如下:
define(function(require, exports, module) {
// 导出模块内容
module.exports = {
username : 'yiifaa'
}
});
3. 通过exports对象赋值导出
return与module.exports都可以直接导出,而不需要添加属性名,而exports对象导出时必须附加属性名,为什么?因为形参与实参的关系,如下:
define(function(require, exports, module) {
// 以下的导出将会失败,必须首先添加属性,然后再赋值
// 错误的写法
exports = {
username : 'yiifaa'
}
// 成功导出模块内容
// 正确的写法
exports. username = 'yiifaa'
});