Javascript grunt requirejs忽略我的mainConfigFile中的路径 项目简介

Javascript grunt requirejs忽略我的mainConfigFile中的路径 项目简介,javascript,requirejs,gruntjs,grunt-contrib-requirejs,Javascript,Requirejs,Gruntjs,Grunt Contrib Requirejs,我的项目是一个单页店面。该项目有多个模块,每个模块包含一组controller.js、view.js和model.js文件,以及一个template.html文件。并使用requirejs管理依赖关系 问题陈述 我想使用mainConfigFile提供grunt requirejs中参考模块的路径。 mainConfigFile的require.config的一部分存储在单独的文件(base.dependency.config)中,require.config.path在运行时由下划线拼凑在一起

我的项目是一个单页店面。该项目有多个模块,每个模块包含一组controller.js、view.js和model.js文件,以及一个template.html文件。并使用requirejs管理依赖关系

问题陈述 我想使用mainConfigFile提供grunt requirejs中参考模块的路径。 mainConfigFile的require.config的一部分存储在单独的文件(base.dependency.config)中,require.config.path在运行时由下划线拼凑在一起

base.dependency.config

config = {
    baseDependencyConfig: {
        paths: { ... }
        shim: { ... }
    }
}
main.js

var dependencies = config.baseDependencyConfig;
var basePaths = config.baseDependencyConfig.paths;
var extensionPaths = {
    // extra sets of paths
};

// combine base paths and extension paths at runtime using underscore
var dependencyPaths = _.extend(basePaths, extensionPaths);

dependencies.paths = dependencyPaths;
require.config(dependencies);

// application startup
require(['app', 'eventbus']) {
    // code
}
错误 然而,grunt requirejs忽略了mainConfigFile,grunt requirejs尝试在根目录下查找“app.js”,而实际上,“app”在require.config路径下定义为

'app': 'modules/base/app/base.app.controller'
我的Grunfile: 我的文件结构 r、 js用于从指定的
maincigfile
中提取配置对象。它只在代码中查找某些签名

  • :确定AST节点是配置调用候选节点
  • :调用上述函数以决定如何提取配置
我已经创建了一个补丁,让它能够识别

requirejs.config(_VariableToExport = { ... });
这是有限的,Javascript解析器方法使r.js能够提取由函数(比如代码中)创建的配置变得非常复杂。此修补程序尚未提交到项目中。我还在与官僚主义作斗争

我认为目前唯一可行的解决办法是

  • 不使用
    mainConfigFile
  • 将配置导出为NodeJS模块
  • 在节点(Grunt)中需要
    main.js
    /
    config.js
  • 将对象作为值传递给config属性或方法
请参阅我对此问题的评论,以获取更多信息

这种方法在我正在从事的另一个稍旧的项目中得到了验证


与r.js 2.1.11相关。

如果向baseURL添加正斜杠,如
baseURL:“/public”
,会发生什么?另外,requirejs位于哪里?
requirejs
位于
public/scripts/lib
文件夹中。而且
/public
不起作用,因为老实说,
public
不是我执行grunt的根文件夹。Public是应用程序的唯一根文件夹。该项目还有其他组件,例如
stylesrc
(用于无css)、单元测试、节点模块等,它们都位于同一个公共级别上。那么,您是否可能没有返回足够远的地方,比如
。/../public
?嗨,Dropzilla,谢谢您回答我的问题。我不认为找到公众或需求是问题所在。当require.config.path都直接在main.js中定义时,使用相同的gruntFile和文件结构的确切设置就起作用了。请查看上面帖子的编辑部分。@user2480414,到目前为止您是否已经运行了它?我有一个类似的项目布局(尽管更简单的RequireJS配置实现),我面临着同样的错误:r.js/RequireJS不尊重我的路径配置,试图从
baseUrl
加载“jquery.js”,而是配置的相对路径“./libs/jquery-N.NN.js”(带有版本后缀)。。如果不起作用,请告诉我。
public
    |--modules/
    |       |--base/
    |       |       |--cart
    |       |       |--category
    |       |               |--category.controller.js
    |       |               |--category.view.js
    |       |               |--category.model.js
    |       |               └-category.template.html
    |       |
    |       └--extension/
    |
    |--style/
    |--image/
    |--main.js <-- main config file
    |--other .js files
require.config({
    paths: {...}
    shim: {...}
})

// application startup
require(['app', 'eventbus']) {
    // code
}
requirejs.config(_VariableToExport = { ... });