2016-09-17 93 views
1

是否有任何方式將requirejs配置導入到我的grunt配置文件中?現在,我要保持兩個相同的版本,一個在app/main.js,一個在我的Gruntfile.js從Gruntfile獲取requirejs.config

module.exports = function(grunt) { 

    // can I import app/main.js requireConfig here? 

    var requireConfig = { 
     paths: { 
      jquery: 'lib/jquery' 
      // etc... 
     } 
    }; 
}); 

我main.js看起來是這樣的:

requirejs.config({ 
    paths: { 
     jquery: 'lib/jquery' 
     // etc... 
    } 
}); 

define(['app'], function(app){ 
    app.start(); 
}); 

回答

0

你可以嘗試這樣的事情:

function getRequireConfig(requireFilePath) { 
 

 
\t \t var config; 
 
\t \t var configFileContent, 
 
\t \t \t _require; 
 

 
\t \t _require = require; 
 
\t \t require = { \t 
 
\t \t \t data: {}, 
 
\t \t \t config : function (configParam) { 
 
\t \t \t \t this.data = configParam; 
 
\t \t \t }, 
 
\t \t \t get : function() { 
 
\t \t \t \t return this.data; 
 
\t \t \t } 
 
\t \t }; 
 
\t 
 
\t \t configFileContent = readFileSync(requireFilePath); 
 
\t \t eval(configFileContent); 
 

 
\t \t config = require.get(); 
 

 
\t \t require = _require; 
 

 
\t \t return config; 
 
\t }

它是什麼做的是:

  1. 覆蓋需要定義一個自定義實現
  2. 負載需要的配置文件
  3. 評估和演示它,這樣自定義實現的配置功能將
  4. 稱爲獲取配置對象來自數據
+0

感謝您的建議。我希望有點少...哈克:) – filur

+0

hacky..but工作:) – nikhil

1

您可以使用支持不同類型的模塊系統的標準模塊模式,如下所示。

你requirejs配置文件這樣

AMD-config.js

(function(factory) { 
    if (typeof define === 'function' && define.amd) { 
     // Register as an AMD module if available... 
     define('amd-config', [], factory()); 
    } else if (typeof exports === 'object') { 
     // Next for Node.js, CommonJS, browserify... 
     module.exports = factory(); 
    } else { 
     // setting browser global when none of the above are available 
     window.amdConfig = factory(); 
    } 
    } 

    (function() { 
    var amdConfig = { 
     baseUrl: 'scripts', 
     paths: { 
      //Paths here 
     } 
    }; 
    return amdConfig; 
    })); 

在gruntfile你可以只需要像任何其他模塊。

var requireConfig = require('amd-config'); 

包括它一般像你的index.html與腳本標記app.js 之前做的,然後在app.js使用它像以下。

requirejs.config(window.amdConfig); 

define(['app'], function(app){ 
    app.start(); 
}); 

PS:有更清晰的方式將它包含在app.js中。

  1. 比第二個更清潔,創建全局變量require並在requirejs腳本之前包含腳本。 requirejs檢查是否有名稱爲require的全局變量包含對象。如果在那裏,它被用作配置對象。所以你不必自己調用requirejs.config。

  2. 您可以像需要其他文件一樣要求文件。在這種情況下,它將被視爲一個require模塊,並且您將在require回調中接收該對象。像下面這樣調用你的requirejs.config。

```

require(['amd-config'], function(amdConfig){ 
    requirejs.config(amdConfig); 

    require(['app'], function(app){ 
     app.start(); 
    }); 
}); 

```

1

你可以使用,如果使用的是繁重的建設項目更簡單的方法。你可以簡單地使用:

options:{ 
    mainConfigFile: "path/to/Config.js" 
} 

授予你需要使用: https://github.com/gruntjs/grunt-contrib-requirejs

+0

感謝您的提示。是否可以添加更多的屬性?即擴展/合併 – filur

+0

從技術上講,如果你在另一個構建步驟中使用配置文件,但是這可能不是一個很好的解決方案。或者[bundlesConfigOutFile](HTTPS://github.com/requirejs/r.js/blob/98a9949480d68a781c8d6fc4ce0a07c16a2c8a2a/build/example.build.js#L641)可能對您有所幫助,但我從未使用過它。 –