Введение в проект
Мой проект представляет собой одностраничную витрину. В проекте несколько модулей, и каждый модуль содержит набор файлов controller.js, view.js и model.js, а также файл template.html. И использует requirejs для управления зависимостями.
Постановка задачи
Я хочу использовать mainConfigFile для предоставления путей к эталонным модулям в grunt-requirejs. Часть файла require.config моего mainConfigFile хранится в отдельном файле (base.dependency.config), а require.config.paths объединяются воедино с помощью символа подчеркивания во время выполнения.
base.dependency.config
config = {
baseDependencyConfig: {
paths: { ... }
shim: { ... }
}
}
main.js
var dependencies = config.baseDependencyConfig;
var basePaths = config.baseDependencyConfig.paths;
var extensionPaths = {
// extra sets of paths
};
// combine base paths and extension paths at runtime using underscore
var dependencyPaths = _.extend(basePaths, extensionPaths);
dependencies.paths = dependencyPaths;
require.config(dependencies);
// application startup
require(['app', 'eventbus']) {
// code
}
Ошибка
Однако grunt requirejs игнорирует mainConfigFile, grunt requirejs пытается найти «app.js» под корнем, хотя на самом деле «приложение» определено в путях require.config как
'app': 'modules/base/app/base.app.controller'
мой gruntFile:
module.exports = function (grunt) {
grunt.initConfig({
// ... other plugin config
requirejs: {
options: {
baseUrl: 'public',
// the paths for the named modules such as 'app' are defined
// in main.js under require.config paths
name: 'main',
include: [
'app',
'cart',
'category'
],
out: 'public/build/app-optimized.js',
mainConfigFile: 'public/main.js',
findNestedDependencies: true,
optimizeCss: 'none',
cssImportIgnore: 'style/style.css, style/mocha.css',
}
}
})
}
моя файловая структура
public
|--modules/
| |--base/
| | |--cart
| | |--category
| | |--category.controller.js
| | |--category.view.js
| | |--category.model.js
| | └-category.template.html
| |
| └--extension/
|
|--style/
|--image/
|--main.js <-- main config file
|--other .js files
- mainConfigFile, main.js находится в корневом каталоге вместе с несколькими другими js-файлами запуска приложений.
- основная масса файлов приложения находится в папке с модулями
- каждая папка модуля содержит свой контроллер, js-файл представления и модели, а также файл template.html
Редактировать
gruntFile работал раньше с другой настройкой mainConfigFile (main.js):
require.config({
paths: {...}
shim: {...}
})
// application startup
require(['app', 'eventbus']) {
// code
}
baseUrl: '/public'
? Также, где находится requirejs? - person Dropzilla   schedule 17.10.2013requirejs
находится внутри папкиpublic/scripts/lib
. И/public
не работает, потому что, честно говоря,public
не является корневой папкой, в которой я запускаю grunt. Public — единственная корневая папка для приложения. Есть и другие компоненты проекта, например.stylesrc
(без css), модульные тесты, модули узлов и т. д., живущие на одном уровне с общественностью. - person Anna Morning   schedule 17.10.2013../../public
? - person Dropzilla   schedule 17.10.2013baseUrl
вместо настроенного относительного пути ../libs /jquery-N.NN.js (с суффиксом версии). - person try-catch-finally   schedule 22.04.2014