获取requirejs.从Gruntfile配置

Fetch requirejs.config from Gruntfile

本文关键字:配置 Gruntfile requirejs 获取      更新时间:2023-09-26

是否有办法将requirerequirements配置导入到我的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();
});

您可以使用支持不同类型模块系统的标准模块模式,如下所示:

你需要这样的配置文件

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之前加上script标签然后在app.js中像这样使用:

requirejs.config(window.amdConfig);
define(['app'], function(app){
    app.start();
});

PS:在app.js中包含它有更干净的方法。

  1. 比第二更简洁,创建全局变量require,并在requires脚本之前包含脚本。Requirejs检查是否存在名为require包含对象的全局变量。如果它在那里,它被用作配置对象。所以你不需要调用需求。配置自己。

  2. 您可以像要求其他文件一样要求该文件。在这种情况下,它将被视为一个require模块,你将在require回调中接收对象。说出你的需求。配置如下。

' ' '

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

' ' '

如果您正在使用grunt来构建项目,那么您可以使用更简单的方法。您可以简单地使用:

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

允许你使用:https://github.com/gruntjs/grunt-contrib-requirejs

您可以尝试这样做:

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. Eval使自定义实现的配置函数为
  4. 从数据中获取配置对象