Проблемы генерации пакета с RequireJS

У меня есть проект Typescript:

myproject
 |
 +-src (folder)
 |  |
 |  +-main.ts
 |  +-stringHandler.ts
 |  +-disposable.ts
 +-out (folder)
 |  |
 |  +-...
 +-Gruntfile.js

В моей конфигурации Grunt у меня есть двухэтапное задание, которое компилирует все .ts файлы в myproject/src/ и генерирует соответствующие .js файлы в myproject/out/, Итак, после того, как первый шаг задачи завершен, у меня есть следующее:

myproject
 |
 +-out (folder)
    |
    +-main.js
    +-stringHandler.js
    +-disposable.js

Пакетирование

Второй шаг задачи - создание файла пакета myproject.js, Я использую RequireJS для этой цели.

Я установил https://github.com/gruntjs/grunt-contrib-requirejs. Gruntfile.js Файл, обрабатывающий задачу связывания, выглядит следующим образом (показывая только соответствующие части в файле):

module.exports = function(grunt) {
  var config = {
    pkg: grunt.file.readJSON('package.json'),
    requirejs: {
      compile: {
        options: {
          baseUrl: "out",
          bundles: {
            'myproject': ['main', 'stringHandler', 'disposable']
          },
          out: 'out/myproject.js'
        }
      }
    }
  };
  grunt.initConfig(config);
  grunt.loadNpmTasks('grunt-contrib-requirejs');
  grunt.registerTask('default', ['compile', 'requirejs']);
};

Когда Грант достигает requirejs, после успешной компиляции проекта, я получаю следующую ошибку:

Выполнение задачи requirejs: compile (requirejs) { [Ошибка: Ошибка: отсутствует параметр "name", "include" или "modules" в Function.build.createConfig (C:\Users\myuser\Documents\myproject\node_modules\grunt-contrib-requirejs\node_modules\requirejs\bin\r.js:29567:19) ] originalError: [Ошибка: отсутствует опция "name", "include" или "modules"] }

Я могу понять, что отсутствуют параметры, но когда я использую name Я получаю другие ошибки. Я думаю, что должно быть что-то не так на более общем уровне. Какой правильный формат конфигурации? Спасибо

1 ответ

Это предполагает main.ts является точкой входа вашего приложения и содержит require.config раздел с зависимостями вашего приложения (библиотеки и прокладки).

Сначала переместите require.config раздел из main.ts и в свой собственный файл, config.ts, Оставьте загрузочный код приложения в main.ts,

Затем определите, где вы хотите развернуть этот оптимизированный код приложения. Давайте предположим, что это каталог с именем build, который параллелен вашему src а также out папки.

Обновите ваш Gruntfile, чтобы отразить эту конфигурацию:

requirejs: {
    compile: {
        options: {
            baseUrl: "out",
            mainConfigFile: "out/config.js",
            modules: [
                { name: "main" }
            ],
            dir: "build",
            optimize: "none" // skip compression while debugging
        }
    }
}

Вы можете прочитать больше о каждом из этих параметров конфигурации на http://requirejs.org/ но вот краткое изложение:

  • baseUrl: Где живет исходный код JS
  • mainConfigFile: Указывает на объект конфигурации, упомянутый выше. Он сообщает плагину, где живут зависимости. Это избавляет от необходимости указывать и обновлять вручную список зависимостей в двух местах.
  • modules: Это массив загрузочных приложений. В этом случае список из одного, main.js,
  • dir: Где будет сгенерировано оптимизированное приложение. Обратите внимание, что ваши зависимости также будут скопированы здесь.
  • optimize: Я оставил это, чтобы вы могли легко отлаживать полученное приложение под ./build, Удалите его, когда вы счастливы, и плагин оптимизирует (сжимает и разбирает) ваши файлы сборки.
Другие вопросы по тегам