RequireJS:根据环境加载不同的文件

时间:2012-11-13 05:32:24

标签: javascript requirejs test-environments

是否有任何功能可以根据当前项目环境(例如开发或生产)加载不同的文件?我的意思是,这有助于我透明地加载缩小或完整的文件。我读到了关于多版本加载的内容,但是多版本化意味着我需要指定文件的版本。
例如我的模块中有module.js文件。在这个文件中我需要加载jQuery:

require(['jquery]);

但我有jQuery的缩小版和完整版,我想加载不同的文件。我在config中想到这样的事情:

   require.config({
        paths: {
            'jquery' : function(){
                if( MODE == 'DEV' ){
                    return 'jquery';
                }else{
                    return 'jquery.min'
                }
            }
        }
    });

或者,也许,类似的东西。

2 个答案:

答案 0 :(得分:2)

如果您使用the r.js optimizer,则可以为您处理此过程。在您的scripts文件夹中,将所有模块,库和其他代码保留为解压缩目的。我经常有类似的东西

scripts/
    lib/
    modules/

准备部署时,创建build.js并配置各种选项。我将举例说明我使用过的类似配置:

({
    baseUrl: '../scripts',
    dir: '../scripts.min',

    paths: {
        'jquery': 'lib/jquery'
    },

    removeCombined: true,

    optimize: 'uglify',
    preserveLicenseComments: false,
    uglify: {
        max_line_length: 3500,
        no_copyright: true
    },

    modules: [
        {
            name: 'module1'
        },
        {
            name: 'module2',
            exclude: ['jquery']
        }
    ]
})

有关这两个选项can be found in this example configuration的详细信息,但我会提请注意dirremoveCombined

dir显然是您的脚本结束的地方。我倾向于在我的脚本旁边创建一个带有后缀.min或类似内容的文件夹。然后,当您准备投入生产时,只需将您的需求配置baseUrl更改为scripts.min

require.config({
    baseUrl: '/scripts.min' // Now the site will load scripts from the optimised folder

    // Other options
})

默认情况下,r.js将复制所有脚本,无论它们是否已经合并到另一个js文件中。将removeCombined设置为true可确保您的scripts.min文件夹仅包含生产所需的文件。

答案 1 :(得分:1)

如果有人仍想知道如何做到这一点:

require.config({
    paths: {
        'jquery' : (function(){
            if( MODE == 'DEV' ){
                return 'jquery';
            }else{
                return 'jquery.min'
            }
        })()
    }
});

此函数是自调用匿名函数。它会在定义位置立即调用。