RequireJS: Как исключить определенные пути при создании одного файла?

У меня есть приложение Backbone, которое использует RequireJS 2.1.8 (т.е. все мои представления Backbone используют define(), чтобы указать их зависимости). Все отлично работает, и теперь я пытаюсь использовать r.js(установленный с помощью NPM), чтобы concat/minify весь мой JavaScript в один файл.

Как настроить конфигурацию r.js, которая исключает зависимости, которые начинаются с определенных путей?

Я включил файл main.js ниже. В этом случае я хочу, чтобы "встроенный" выходной файл исключил сторонние библиотеки (т.е. Jquery, магистраль и т.д.). Кроме того, я хочу исключить любую зависимость, которая начинается с "webapp/" (например, "webapp/dynamic_cfg", что приводит к отправке запроса в мое приложение Djang для динамически созданного файла/модуля JavaScript).

Структура папки:

|--static/
    |--main.js
    |--myapp/
        |--views/
            |-- MyView.js
            |-- ...
    |--lib
        |--backbone-1.0/
        |--underscore-1.5.1/
        |-- ...

index.html(шаблон Django):

<script src="{% static 'lib/requirejs-2.1.8/require.min.js' %}" data-main="{% static 'main.js' %}" ></script>

main.js:

requirejs.config({

    paths: {
        "jquery": 'lib/jquery-1.10.2/jquery.min',
        "text_loader": 'lib/requirejs-text-2.0.10/requirejs-text',
        "fuelux": 'lib/fuelux-2.3.1',
        "backbone": 'lib/backbone-1.0/backbone.min',
        "underscore": 'lib/underscore-1.5.1/underscore.min',

        // Any module that requires 'webapp/*' will result Require.js
        // making a request to the server webapp.
        "webapp": '..'
    },

    shim: {

        'backbone': {
            deps: ['underscore', 'jquery'], // Load these dependencies first
            exports: 'Backbone' // Create global var with this name for the module
        },
        'underscore': {
            exports: '_'
        }
    }

});

// Startup
require(['webapp/dynamic_cfg', 'myapp/util/logger', 'myapp/view/AppView', 'myapp/AppRouter', 'fuelux/all'],

    // Dependencies are loaded and passed to this function
    function(cfg, logger, AppView, AppRouter, fuelUx) {

        logger.info("Starting up with config:", cfg);

        var appView = new AppView();
        var appRouter = new AppRouter();
    }
);

Ответы

Ответ 1

Настройка путей к "empty:" в моей конфигурации r.js. Пример:

// This is a RequireJS config file
(function(){
    return {

        // Name of input file (without the .js extention)
        "name": "main",

        // Directory containing input file
        "baseUrl": "static/",

        // Look in this file for the require.config() call and extract it
        "mainConfigFile": "static/main.js",

        "paths": {
            // Don't attempt to include dependencies whose path begins with webapp/
            "webapp": "empty:",

            // Ditto for the following 3rd-party libraries
            "jquery": "empty:",
            "fuelux": "empty:",
            "backbone": "empty:",
            "underscore": "empty:"
        },

        "optimize": "uglify2",
    };
})()