需求路径中的变量不适用于r.js

时间:2014-12-02 17:36:32

标签: javascript node.js requirejs r.js requirejs-optimizer

我是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 optimizer and variables in paths

1 个答案:

答案 0 :(得分:1)

app.js中的配置是计算配置。例如,您将_JSHome设置为值,然后在配置中使用它。在运行时,这没有问题。但是,r.js并非旨在执行您传递给mainConfigFile的内容。它的作用是查找传递给require.config(或requirejs.config)并使用JSON对象的JSON对象。好像r.js进入app.js文件并复制require.config(...)内的所有文本,然后将其粘贴到自己的执行上下文中。当它尝试使用从app.js文件中捕获的内容时,您会收到_JSHome未定义的错误,因为在r.js解释您的配置的上下文中_JSHome未定义。

简单的解决方案是拥有一个未计算的配置。但是,如果您需要计算配置,然后让r.js使用它,则需要在r.js看到它之前计算它。这可以作为构建系统的一部分完成(使用Grunt,Gulp,make等)。