2015-01-23 1 views
0

Я пытаюсь встать и запустить задачу grunt-contrib-requirejs.
Будучи новым для RequireJS вообще и никогда не использовал оптимизатор/r.js, я действительно смущен, как заставить это работать.Почему мой grunt-contrib-requirejs ничего не оптимизирует?

В начале, я создал простую структуру каталогов, как это:

root 
├── js 
│ ├── helper 
│ │ ├── a.js 
│ │ ├── b.js 
│ │ └── d-dep.js 
│ └── main.js 
├── node_modules 
│ └── [dependencies from package.json] 
├── Gruntfile.js 
└── package.json 

Я проверил его в браузере и все зависимости будут загружены правильно есть.

Мои Gruntfile:

module.exports = function(grunt) { 
    grunt.config.init({ 
    requirejs: { 
     options: { 
     baseUrl: 'js/', 
     mainConfigFile: 'js/main.js', 
     dir: 'target/', 
     keepBuildDir: true 
     } 
    } 
    }); 

    require('load-grunt-tasks')(grunt); 
} 

main.js:

require(["helper/a", "helper/b"], function(util) { 
    console.log('main.js loaded'); 
}); 

a.js

console.log('a.js loaded'); 

b.js

define(['js/helper/b-dep.js'], function(bdep) { 
    console.log('b.js loaded'); 
}); 

б-dep.js

console.log('b.js dependency loaded'); 

Когда работает grunt requirejs, я получаю Done, without errors. сообщений, но не могу видеть любой оптимизированный файл - Я предполагаю, что ошибка в Gruntfile, вероятно, с путем.

Вы видите что-нибудь, что вас поразит? Почему ничего не оптимизировано, хотя сказано: Done, without errors.?

ответ

1

кажется, Вы не должны говорить это, чтобы оптимизировать что-то. У вас должна быть опция name, чтобы сообщить ей, что такое главный модуль. Также вам не хватает одного уровня конфигурации в конфигурации, которую вы передаете, чтобы хрюкать. Объект options должен находиться внутри более конкретной цели, как compile:

requirejs: { 
    compile: { // <<== nest the options in this. 
    options: { 
     baseUrl: 'js/', 
     mainConfigFile: 'js/main.js', 
     name : 'main', // <<=== add this 
     dir: 'target/', 
     keepBuildDir: true 
    } 
    } 
} 

Установка mainConfigFile не достаточно, потому что это только говорит оптимизатор, где он должен получить конфигурацию выполнения с. Он не говорит оптимизатору, что файл является модулем. Обратите внимание, что отсутствие расширения .js в name не является ошибкой. Вам следует избегать использования расширений в именах модулей, если только не существует определенной причины, требующей расширения. И name относится к baseUrl поэтому вот почему это 'main' не 'js/main'.

+0

Спасибо! снова просмотрев возможные опции для 'r.js', я также заметил, что мне не хватает' out', который определяет имя выходного файла. К сожалению, он все еще не работает - мне нужно добавить что-то в свой файл 'main.js', еще немного? – Sven

+0

Мой первоначальный ответ был вызвав ваш код. Я воспроизвел вашу конфигурацию здесь и заметил еще одну проблему. Я отредактировал свой ответ. – Louis

+0

Вау, наконец, он работает! Спасибо!Я все еще ошибся в своем модульном дереве, но это исправление для меня - после того, как часами стукнула головой о стену ;-) – Sven

0

заказ мой конфиг, это то, что я использую, чтобы создать файл с именем all.js

 requirejs : { 
     dist : { 
      options : { 
      waitSeconds : 0, 
      baseUrl : "./app/", 
      name : 'assets/js/main', 
      mainConfigFile: 'app/assets/js/main.js', 
      out : "dist/assets/js/all.js", 
      optimize : "uglify2", 
      inlineText : true, 
      findNestedDependencies : true, 
      paths : { 
       requireLib : "assets/bower_components/requirejs/require", 
      }, 
      include : [ 
       "requireLib" 
      ] 
      } 
     } 
     } 
+1

Спасибо за ответ, не могли бы вы разместить соответствующую структуру файлов/папок? – Sven

 Смежные вопросы

  • Нет связанных вопросов^_^