2013-03-06 2 views
14

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

Проблема заключается в том, что мой код отлично работает, прежде чем его оптимизировать, а затем после его оптимизации на консоли написано 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'); 

} 
+0

Как использовать загрузить скомпилированный файл? Поскольку 'define' является функцией requireJs, кажется, вам не хватает загрузки requireJs. –

+0

Да, это потому, что 'requirejs' не входит. Как только я его загрузил, не было ошибок. –

+1

ok добавит это как ответ тоже. –

ответ

8

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

-1

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

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

grunt.loadNpmTasks('grunt-contrib-concat'); 
12

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

requirejs: { 
    compile : { 
     options : { 
      name : 'main', 
      baseUrl : ".", 
      mainConfigFile : "./main.js", 
      out : "./optimized.js", 
      preserveLicenseComments: false, 
      include: ['path/to/require.js'] 
     } 
    } 
} 
+1

У меня есть аналогичная проблема, но разве это не просто добавит requirejs к выходу? Кажется, он не проходит через оптимизатор. – hybrid9

+0

Да, он добавляет RequireJS к выходу. Это простое решение проблемы, но использование меньшего загрузчика AMD в мини-скрипте (см. Принятый ответ) было бы более идеальным. –

0

Как указано выше, не требуется скрипт 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" 
    } 
    } 
}, 

соблюдать те параметры, пути и включают, те, имеют жизненно важное значение для требуют быть определенным. Просто укажите параметр requireLib для вашего файла require.js.

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