2013-10-03 155 views
0

我使用的是r.jsgrunt-contrib-requirejs,到目前爲止還沒有任何問題,直到我想將我的配置分割成單獨的文件,以便testem和我的應用可以共享相同的配置。我沒有任何問題與單獨的配置,除非涉及到無法再找到路徑的優化器。RequireJS優化器不從外部配置加載路徑?

在我的主文件加載需要像這樣:

<script data-main="main" src="vendor/requirejs/require.js"></script> 

在main.js我:

require(['config'], function() { 
    'use strict'; 
    require(['backbone', 'jquery'], function(Backbone, $) { 
     // ... 
    }); 
}); 

而且在配置我:

require.config({ 
    paths : { 
     backbone    : 'vendor/backbone/backbone-min', 
     jquery     : 'vendor/jquery/jquery.min', 
     underscore    : 'vendor/underscore/underscore-min' 
    }, 
    shim : { 
     'backbone'    : { deps: ['jquery', 'underscore'], exports: 'Backbone' }, 
     'underscore'   : { exports: '_' } 
    } 
}); 

我咕嚕任務如下所示:

compile : { 
    options: { 
     name: 'main', 
     baseUrl: 'lib', 
     mainConfigFile: 'lib/config.js', 
     out: 'dist/js/master.js', 
     optimizeAllPluginResources: true 
    } 
} 

但所有r.js能找到的是lib/config.js & lib/main.js,它沒有找到骨幹,jQuery的等等。如果配置包含在同一個文件爲主要這一切工作正常,但這些分裂出來的全部意義在於使我不必爲我的測試跑步者維護一個不同的配置。

任何意見將不勝感激。

回答

1

幾天前解決了這個問題。現在,使用杏仁在我的優化r.js加載建立,所以我用這樣的配置:

compile: { 
    options: { 
     name: 'vendor/almond/almond', 
     baseUrl: 'lib', 
     include: ['main'], 
     insertRequire: ['main'], 
     mainConfigFile: 'lib/config.js', 
     out: 'dist/js/master.js', 
     optimizeAllPluginResources: true, 
     wrap: true 
    } 
} 

對於開發版本,我不得不包括下面,我插require.js不同的腳本里面的配置:

<script src="config.js"></script> 

但是對於優化器,我必須將配置作爲模塊加載:例如

require(['backbone','jquery','config'], function(Backbone, $) { 

我無法嵌套需要工作,所以這是我想出的解決方案。發佈給未來的Google員工。

0

我發現了一個更簡單的解決方案。只需將requirejs.config({})分開即可。在優化主文件之前,請將此配置文件附加到主文件中。例如通過gulp-append-prepend插件。然後優化)