grunt requirejs 'определить не определено'

Я пытаюсь оптимизировать RequireJS с помощью GruntJS, используя плагин grunt-contrib-requirejs.

Проблема в том, что мой код работает нормально до его оптимизации, а затем после оптимизации в консоли отображается Uncaught ReferenceError: define is not defined.

Вот Gruntfile.js

module.exports = function (grunt) {
  grunt.loadNpmTasks('grunt-contrib-requirejs');

  grunt.initConfig({
    requirejs: {
        compile : {
            options : {
              name  : 'main',
              baseUrl : ".",
              mainConfigFile : "./main.js",
              out : "./optimized.js",
              preserveLicenseComments: false
           }
        }
}
  })

  grunt.registerTask('default', 'requirejs');

}

person Otskimanot Sqilal    schedule 06.03.2013    source источник
comment
Как вы используете загрузку скомпилированного файла? Поскольку define является функцией requireJs, кажется, вам не хватает загрузки requireJs.   -  person Andreas Köberle    schedule 08.03.2013
comment
Да, потому что requirejs не включен. Как только я загружаю его, нет никаких ошибок.   -  person Otskimanot Sqilal    schedule 09.03.2013
comment
ок также добавит это как ответ.   -  person Andreas Köberle    schedule 09.03.2013
comment
@OtskimanotSqilal, как ты это включил? Вы добавили его как отдельный тег скрипта или поместили минимизированный скрипт в базу данных?   -  person streetlight    schedule 05.08.2013
comment
@OtskimanotSqilal и Андреас Как спросил предыдущий комментатор, как именно вы это сделали? Была ли ссылка на требуемую библиотеку сделана в файле main.js или вы изменили файл Grunt? У меня точно такая же проблема.   -  person jusopi    schedule 28.11.2013
comment
Единственный способ обойти это — добавить еще один тег скрипта в HTML с кодом uglified. Казалось, что он имеет дело с ошибкой определения неопределенной. Мне не нравится это решение, но пока оно работает. В идеале это должно обрабатываться в основном js-файле данных как зависимость? Не уверен, как заставить это работать.   -  person jusopi    schedule 28.11.2013
comment
Разве при этом не добавляется весь файл requirejs в вывод по сравнению с запуском его через оптимизатор? Возможно, я что-то упускаю?   -  person hybrid9    schedule 04.06.2014


Ответы (4)


Поскольку define является функцией requireJs, кажется, вам не хватает загрузки requireJs или любого другого загрузчика AMD. Если вам не нужно загружать какой-либо другой модуль AMD после того, как вы выполнили это один раз, вы можете использовать облегченную прокладку загрузчика, например almond.

person Andreas Köberle    schedule 09.03.2013

Добавление файла require.js в качестве опции «включить» должно работать.

requirejs: {
    compile : {
        options : {
            name  : 'main',
            baseUrl : ".",
            mainConfigFile : "./main.js",
            out : "./optimized.js",
            preserveLicenseComments: false,
            include: ['path/to/require.js']
        }
    }
}
person Thomas Higginbotham    schedule 14.12.2013
comment
У меня похожая проблема, но разве это не добавило бы requirejs к выводу? Не похоже, что он проходит через оптимизатор. - person hybrid9; 04.06.2014
comment
Да, он добавляет RequireJS к выходным данным. Это простое решение проблемы, но использование меньшего загрузчика AMD в минимизированном скрипте (см. принятый ответ) было бы более идеальным. - person Thomas Higginbotham; 07.06.2014

Как указывалось ранее, скрипт requirejs отсутствует.

Вот как предлагает вам это сделать официальная страница requirejs (вырвано из моего gruntfile):

requirejs: {
  compile: {
    options: {
      baseUrl: "src/js",
      mainConfigFile: 'src/js/require.config.js', 
      paths: {
        requireLib: "vendor/require/require"
      },
      include: "requireLib",
      name: "require.config",
      out: "dist/js/bundle.js"
    }
  }
},

Обратите внимание на параметры paths и include, они жизненно важны для определения требования. Просто укажите параметр requireLib в файле require.js.

См. официальный ответ здесь: http://requirejs.org/docs/optimization.html#onejs

person Per    schedule 30.09.2016

Кажется, что grunt-contrib-requirejs не компилирует requirejs по умолчанию. Вы можете использовать concat для повторного добавления requirejs обратно.

concat : {
  dist : {
    src : ['./optimized.js', 'path/to/requirejs.js'],
    dest : './optimized.js'
  },
}

grunt.loadNpmTasks('grunt-contrib-concat');
person Lucia    schedule 13.12.2013