Подтвердить что ты не робот

Module.exports клиентская сторона

Я создал модуль node, который по существу является лишь некоторым полезным JS, который также может использоваться на стороне клиента. Я знаю, что require.js может загружать компоненты common.js, но я не обязательно хочу сделать мандат, который требует каждый, кто использует мою клиентскую часть модуля, или common.js или что-то в этом роде. Я также не хочу, чтобы они удаляли module.exports = ... в нижней части файла. Как другие решают эту проблему? Вы просто создаете 2 версии или 2 "скомпилированные" версии? Работает ли module.exports везде?

4b9b3361

Ответ 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.