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",
};
})()