Как иметь несколько выходных файлов в gruntfile.js при запуске requirejs

В Gruntfile.js для grunt-contrib-requirejs я могу зарегистрировать только одну задачу и иметь только один выходной файл, то есть home_scripts.pack.js. Однако я хочу иметь столько выходных файлов, сколько захочу, на основе разных критериев «включения». Например, home_scripts.pack.js, checkout_scripts.pack.js, product_scripts.pack.js и т. д. Таким образом, каждая страница будет загружать только тот JS, который использует:

Это неверно, однако я хочу сделать что-то подобное:

requirejs: {
    compile1: {
        options: {
            baseUrl: 'C:/project/js',
            mainConfigFile: 'C:/project/js/app.js',
            name: 'app',             
            paths: {
                requireLib: 'C:/project/js/require.min' 
            },
            *include: ['requireLib', 'home_page_internal.js'],*
            *out: 'C:/project/js/home_scripts.pack.js'*
            }
        }
    },
    compile2: {
        options: {
            baseUrl: 'C:/project/js',
            mainConfigFile: 'C:/project/js/app.js',
            name: 'app',             
            paths: {
                requireLib: 'C:/project/js/require.min' 
            },
            *include: ['requireLib', 'checkout_internal.js'],*
            *out: 'C:/project/js/checkout_scripts.pack.js'*
            }
        }
    }
}

Код со звездочкой выше — это код, который я хочу создать для каждой страницы выходные файлы. Однако, если есть более эффективный способ генерировать и загружать большое количество файлов и модулей плагинов JS через оптимизатор requireJS с помощью grunt, я открыт для предложений.

Спасибо,


person partizan    schedule 14.01.2015    source источник


Ответы (1)


Вам нужно взглянуть на Пример многостраничного RequireJS

Он показывает, как использовать конкатенацию в зависимости от необходимости страницы.

Так будут выглядеть ваши варианты.

requirejs : {
  compile : {
    "baseUrl": "app",
    "dir": "app/built",
    "include": "main.js",
    "paths": {
        "angular": "bower_components/angular/angular.min",
        "css" : "bower_components/require-css/css.min",
        "text" : "bower_components/requirejs-text/text",
        "css-builder" : "bower_components/require-css/css-builder",
        "normalize" : "bower_components/require-css/normalize"
    },
    "modules" : [
        {
            "name" : "app",
            "include" : ["text", "css"]
        },
        {
            "name" : "modules/module1",
            "include" : [],
            "exclude" : ["app"]
        },
        {
            "name" : "modules/module2",
            "include" : [],
            "exclude" : ["app"]
        },
        {
            "name" : "modules/module3",
            "include" : [],
            "exclude" : ["app"]
        }    ]
    }
}

Игнорируйте другую конфигурацию и проверяйте конфигурацию модулей. Это массив, который содержит несколько модулей AMD, и каждый из них будет объединен в отдельный файл.

В случае SPA, если вам нужно исключить любые общие модули, которые вы не хотите включать в последующие модули. В этом случае модуль app включает в себя весь уровень библиотеки и, следовательно, исключается из последующих модулей.

person Vishwanath    schedule 19.01.2015