6

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

require(['jquery]);

但是我有缩小版和完整版的 jQuery,我想加载不同的文件。我在配置中考虑这样的事情:

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

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

4

2 回答 2

2

如果您使用r.js 优化器,则可以为您处理此过程。在您的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']
        }
    ]
})

可以在此示例配置中找到有关每个选项的更多详细信息,但我会提请注意dirremoveCombined

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

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

    // Other options
})

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

于 2012-11-13T10:48:04.733 回答
2

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

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

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

于 2014-08-26T02:11:03.990 回答