【问题标题】:RequireJS: loading different files according environmentRequireJS:根据环境加载不同的文件
【发布时间】:2012-11-01 14:27:49
【问题描述】:

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

require(['jquery]);

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

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

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

【问题讨论】:

    标签: javascript requirejs test-environments


    【解决方案1】:

    如果您使用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 文件夹仅包含生产所需的文件。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2020-08-30
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多