2016-09-17 51 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)可能对您有所帮助,但我从未使用过它。 –