Переменная в требуемом пути не работает с r.js

Я новичок в оптимизации r.js, но фанат requirejs

сборка-config.js

({
    appDir: "./src/main/webapp/webresources/javascript/",
    baseUrl: "./",
    dir: "./target/webresources/js",
    
    optimizeCss: "none",
    mainConfigFile: "./src/main/webapp/webresources/javascrip/app.js",
    
    inlineText: true,
    removeCombined: true,
    
    modules: [
    {
        name: "app",
    }
    ]
})

app.js выглядит примерно так

if (typeof _JSHome=== "undefined") {
    _JSHome = "/webresources/javascript/edulastic";
}

if (typeof EditorValue === "undefined") {
    EditorValue = "";
}

require.config({

    baseUrl: '/webresources/javascript',
    waitSeconds: 180,
    paths: {
        tpl                    : _JSHome+'/js/tpl',
        underscore             : 'underscore-min',
        backbone               : 'backbone-min',
        text                   : 'text/text',
        jquery                  : 'jquery',
        jqueryuitouchpunch     : "jquery.ui.touch-punch",
        modernizr              : 'modernizr',
        hammer                 : 'hammer.min',
        detectizr              : 'detectizr',
        bootstrap              : _edulasticJSHome+'/bootstrap/js/bootstrap.min',
        fastClick              : "mobileutils/fastclick/fastclick.min",
        asMetaData             : _JSHome+'/js/app/metaData',
        highCharts             : '/webresources/javascript/highcharts/highcharts-min',
    },
});

Когда я запускаю r.js -o build-config.js в корневом каталоге моего проекта, я получаю следующую ошибку:

Попробуйте использовать только конфигурацию, которая также является допустимой JSON, или не используйте mainConfigFile, а вместо этого скопируйте необходимые значения конфигурации в файл сборки или аргументы командной строки, переданные оптимизатору.

Исходная ошибка при синтаксическом анализе: e:/mongrel_mpq/src/main/webapp/webresources/javascript/app.js: › ReferenceError: _JSHome не определен

Дублирование, но без решения - оптимизатор Require.js и переменные в путях


person coding_idiot    schedule 02.12.2014    source источник
comment
Поправьте меня, если я ошибаюсь, но если _JSHome не объявлено, не будет ли попытка присвоить его в проверке undefined вызвать эту ошибку, поскольку переменная не была объявлена?   -  person damian    schedule 02.12.2014
comment
Если он жалуется на допустимый json, попробуйте удалить запятую после имени: приложение,   -  person vernak2539    schedule 02.12.2014


Ответы (1)


Конфигурация, которую вы имеете в app.js, является вычисленной конфигурацией. Например, вы устанавливаете _JSHome в значение, а затем используете его в конфигурации. Во время выполнения с этим проблем нет. Однако r.js не предназначен для выполнения того, что вы передаете mainConfigFile. Что он делает, так это ищет объект JSON, который передается require.config (или requirejs.config) и использует объект JSON. Это как если бы r.js зашел в ваш файл app.js и скопировал весь текст внутри require.config(...), а затем вставил его в свой собственный контекст выполнения. Когда он пытается использовать то, что он захватил из вашего файла app.js, вы получаете сообщение об ошибке, что _JSHome не определено, потому что в контексте, где r.js интерпретирует вашу конфигурацию, _JSHome не определено.

Простым решением было бы иметь конфигурацию, которая не вычисляется. Однако, если вам нужна вычисляемая конфигурация, то для того, чтобы r.js работал с ней, она должна быть вычислена до того, как r.js ее увидит. Это можно сделать как часть системы сборки (с помощью Grunt, Gulp, make и т. д.).

person Louis    schedule 02.12.2014
comment
не могли бы вы опубликовать такое решение? Я догадывался, что это может быть проблемой, но не могу сказать r.js о некоторых переменных. - person coding_idiot; 02.12.2014