2013-12-21 3 views
0

Я хочу объединить js, используемые в простом решении requireJS.Объединить requireJS-файлы с grunt

Это мой main.js

require.config({ 
paths: { 
    'jquery': 'jquery-2.0.3.min', 
    'dataTable': 'jquery.dataTables'  
} 
}); 

define(['jquery','dataTable'], function($) { 
'use strict'; 
$(function() { 

    $('.tablesorter').dataTable(); 
}); 

}); 

И мои gruntFile.js

module.exports = function(grunt) { 

grunt.initConfig({ 
requirejs: { 
    production: { 
    options: { 
     name: "main", 
     baseUrl: "", 
     mainConfigFile: "main.js", 
     out: "optimized.js" 
    } 
    } 
} 
}); 

grunt.loadNpmTasks('grunt-contrib-requirejs'); 

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

}; 

, когда я загружаю optimized.js в HTML, как этот

<script src="optimized.js"></script> 

я ReferenceError: require не определен

+0

Вы включили requireJS перед optimized.js? –

+0

Нравится? '. –

ответ

0

На этой странице вы должны указать require.js, прежде чем включать optimized.js.

Как так:

<script src="/path/to/require.js"></script> 
<script src="/path/to/optimized.js"></script> 
0

я узнал, что requireJS принимает только 'главный' в качестве данных магистрали ЦСИ

Таким образом, вместо

<script data-main="optimized" src="require.js"></script> 

Я получил

<script data-main="prod/main" src="require.js"></script> 

И изменено t он хрюкать конфиг для

requirejs: { 
    production: { 
    options: { 
    name: "main", 
    baseUrl: "", 
    mainConfigFile: "main.js", 
    out: "prod/main.js" 
    } 
    } 
} 
+0

Вы написали: «Я узнал, что requireJS принимает только« main »в качестве основного src данных. Неверно, что RequireJS принимает только «главное» для '' data-main''. – Louis

0

Глядя на комментарии в дополнение к вопросу, первым я вижу, что Джордж Райт ударил по одной проблеме с вашим кодом: вам необходимо включить require.js.

Тогда вы сказали, что $('.tablesorter').dataTable() не выполнен. Это потому, что вы используете define, а не require. Используйте:

require(['jquery','dataTable'], function($) { 
    'use strict'; 
    $(function() { 
     $('.tablesorter').dataTable(); 
    }); 
}); 

Вызов к defineтолько регистры модуль с RequireJS. Он не выполнить модуль. Поэтому неудивительно, что $('.tablesorter').dataTable() не выполнялся. Вы должны использовать форму require, которая выполняет обратный вызов, чтобы делать то, что вы хотите сделать.

Что касается включения RequireJS с вашим проектом в один файл, вы должны попросить его явно. Документация оптимизатора дает этот пример:

node ../../r.js -o baseUrl=. paths.requireLib=../../require name=main include=requireLib out=main-built.js 

вашей конфигурации (обновленной из одного в вопросе) будет выглядеть примерно так:

grunt.initConfig({ 
    requirejs: { 
     production: { 
      options: { 
       name: "main", 
       baseUrl: "", 
       mainConfigFile: "main.js", 
       paths: { 
        requireLib: <path to require js> 
       }, 
       out: "optimized.js", 
       include: "requireLib" 
      } 
     } 
    } 
}); 

(Я не запускать этот код, так стреме для typos.) Вы должны поместить путь к вашему require.js файлу для requireLib. Мы должны использовать requireLib в качестве имени модуля, поскольку зарезервировано require. При такой конфигурации вы можете загрузить только ваш файл optimized.js.

+0

$ ('. Tablesorter'). DataTable() выполняет штраф, используя define. Просто не сливается в один файл. Когда я вижу страницу в сафари и хром, есть быстрый щелчок, прежде чем загружать данные в таблицу при использовании require ... – Newcoma

+0

1. В этом комментарии вы противоречите себе (To wit: «Ошибка исчезла, но $ ('. tablesorter '). dataTable(); не выполняет "). 2. Вы говорите об установке, отличной от '' main.js'', которую вы указали в своем вопросе. В вашем вопросе вызов '' define'' не находится в отдельном файле. Он находится в вашем '' main.js'', который загружается напрямую. 3. Этот сценарий, который вы упоминаете здесь, совершенно не меняет моего объяснения. Он работает только потому, что где-то вы '' требуете'' файл, в котором есть '' define''. Это '' require'' заставляет фабрику любого модуля выполнять. – Louis

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