UMD модуль JavaScript, который также работает в строгом режиме

У меня проблемы с переписыванием этого для работы в "строгом" режиме. Поскольку 'this' не определено явно, я получаю ошибки jshint при компиляции. Я думаю, что мой мозг просто не мыслит достаточно абстрактно, чтобы найти творческое решение. Любая помощь будет оценена. Код адаптирован из репозитория Github для определения универсального модуля: https://github.com/umdjs/umd/blob/master/returnExports.js

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
    // AMD Module
        define([], factory);
    } else if (typeof module === 'object' && module.exports) {
    // Node Module
        module.exports = factory();
    } else {
    // Browser Global
        root.returnExports = factory();
  }
}(this, function () {
    return {};
}));

1 ответ

Решение

Глядя на твой код, я вижу, что root на самом деле используется только в том случае, если вы находитесь в браузере, что упрощает вещи.

Это означает, что мы можем заменить this со следующим выражением:

typeof window !== "undefined" ? window : undefined

Это действует в строгом режиме (я пробовал в Node, он возвращает undefined, без ошибок), и JSHint.com позволил это.

Если вам нужен глобальный объект и в других случаях, вы можете связать троичные выражения.

Другие вопросы по тегам