我创建了一个节点模块,它本质上只是一些有用的 JS,也可以在客户端使用。我知道 require.js 可以加载 common.js 组件,但我不一定要强制每个使用我的模块客户端的人也需要 require 或 common.js 什么的。我也不想强迫他们删除module.exports = ...
文件底部的。其他人如何解决这个问题?您只是创建 2 个版本,还是 2 个“编译”版本?module.exports 是否无处不在?
问问题
16879 次
3 回答
22
这就是 underscore.js 所做的:
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root['_'] = _;
}
于 2012-09-24T19:42:44.543 回答
13
这个答案依赖于从右到左评估分配的事实。MyModule
首先分配给exports
,然后exports
分配给module.exports
。
如果module
未声明,则抛出异常。
简短、干净且易于记忆:
try {
module.exports = exports = MyModule;
} catch (e) {}
该文件可以包含在浏览器和 node.js 中。
于 2017-08-15T11:12:27.380 回答
4
这对我有用(CoffeeScript)。假设“命名空间”是您想要window
在客户端范围内声明的内容
(module ? {}).exports = @Namespace =
my: 'cool'
module: '!'
然后您可以require('namespace').my === 'cool'
在 Node.js 或Namespace.my === 'cool'
浏览器中使用。这转化为 JS 为
(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = {
my: 'cool',
module: '!'
};
于 2012-09-24T19:55:23.770 回答