Как настроить Intern 4 для использования RequireJS? - PullRequest
0 голосов
/ 28 февраля 2019

У меня установлен RequireJS в моей директории node_modules, а мой файл intern.json имеет:

"node": {
    "loader": "requirejs"
},

Однако, когда я запускаю "npx intern", он завершается неудачно с:

Ошибка: Сценарий Loader requirejs не зарегистрировал обратный вызов загрузчика на

Есть ли способ заставить Intern 4 использовать RequireJS?

1 Ответ

0 голосов
/ 28 февраля 2019

Чтобы использовать определенный загрузчик, Intern нужен скрипт 'loader', который фактически инициализирует загрузчик и обрабатывает загрузочные модули вместе с ним.Стажер включает в себя скрипты загрузчиков для нескольких загрузчиков, таких как Dojo 1, Dojo и SystemJS.Он не включает скрипт загрузчика для RequireJS, но вы можете добавить его довольно легко.

Простой скрипт для RequireJS будет выглядеть следующим образом:

// your_project/reqjs.js
intern.registerLoader(function(options) {
  function initLoader(requirejs) {
    // Configure requireJS -- use options passed in through the intern.json
    // config, and add anything else
    requirejs.config(options);

    // This is the function Intern will actually call to load modules
    return function(modules) {
      return new Promise(function(resolve, reject) {
        requirejs(modules, function() {
          resolve();
        }, function(error) {
          reject(error);
        });
      });
    };
  };

  if (typeof window !== 'undefined') {
    return intern
      .loadScript('node_modules/requirejs/require.js')
      .then(function() {
        return initLoader(window.requirejs);
      });
  } else {
    return initLoader(require('requirejs'));
  }
});

Обратите внимание, что Intern не используетзагрузчики для фактического извлечения модулей для собственного использования (именно поэтому приведенный выше вызов resolve не включает загруженные модули), он использует их только для загрузки тестовых наборов.Сами наборы могут нормально использовать загрузчик.

Вы бы использовали скрипт в вашей конфигурации с

"node": {
  "loader": "./reqjs.js"
}
...