Я создал модуль node, который по существу является лишь некоторым полезным JS, который также может использоваться на стороне клиента. Я знаю, что require.js может загружать компоненты common.js, но я не обязательно хочу сделать мандат, который требует каждый, кто использует мою клиентскую часть модуля, или common.js или что-то в этом роде. Я также не хочу, чтобы они удаляли module.exports = ...
в нижней части файла. Как другие решают эту проблему? Вы просто создаете 2 версии или 2 "скомпилированные" версии? Работает ли module.exports везде?
Module.exports клиентская сторона
Ответ 1
Вот что делает underscore.js:
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root['_'] = _;
}
Ответ 2
Это сработало для меня (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: '!'
};
Ответ 3
Я нахожу это проще:
try {
module.exports = exports = MyModule;
} catch (e) {}
Этот файл может быть включен как в браузере, так и в node.js.