从Gruntfile获取requirejs.config

时间:2016-09-17 12:16:25

标签: javascript gruntjs requirejs

有没有办法将requirejs配置导入我的grunt配置文件?现在我必须保留两个相同的版本,一个在app/main.js,一个在Gruntfile.js

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();
});

3 个答案:

答案 0 :(得分: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检查是否存在名称需要包含对象的全局变量。如果它在那里,它被用作配置对象。所以你不必亲自调用requirejs.config。

  2. 您可以像要求其他文件一样要求文件。在这种情况下,它将被视为一个require模块,您将在require回调中收到该对象。像下面这样调用你的requirejs.config。

  3. ```

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

    ```

答案 1 :(得分:1)

如果您使用grunt构建项目,则可以使用更简单的方法。你可以简单地使用:

% Get the X/Y Coordinates of all points in the image
[xx, yy] = meshgrid(size(img, 2), size(img, 1));

% Create a mask with 1's inside the boundary
mask = inpolygon(xx, yy, boundary(:,1), boundary(:,2))

授予你需要使用: fillna

答案 2 :(得分:0)

您可以尝试这样的事情:

function getRequireConfig(requireFilePath) {

		var config;
		var configFileContent,
			_require;

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

		config = require.get();

		require = _require; 

		return config;
	}

它正在做的是:

  1. 将需求定义覆盖到自定义实现
  2. 加载需要配置文件
  3. 评估它,以便自定义实现的配置功能
  4. 调用从数据中获取配置对象