';没有此类文件';使用grunt requirejs编译时出错

';没有此类文件';使用grunt requirejs编译时出错,requirejs,r.js,grunt-contrib-requirejs,Requirejs,R.js,Grunt Contrib Requirejs,由于require.js构建的大多数问题都与文件结构和相对路径引用有关,因此我在这里创建了一个repo:以便于故障排除 错误是当我运行grunt时,我将得到没有这样的文件或目录requirejs example/src/js/bundle/js/bundle/utils.js 这是由于错误的baseUrl造成的。我希望它是src/,但我无法设置它,因为它会根据我的GrunFile查找src/js/bundle/main.js的依赖项。因此,基础位于src/js/bundle。当前的main.js

由于require.js构建的大多数问题都与文件结构和相对路径引用有关,因此我在这里创建了一个repo:以便于故障排除

错误是当我运行grunt时,我将得到
没有这样的文件或目录requirejs example/src/js/bundle/js/bundle/utils.js

这是由于错误的baseUrl造成的。我希望它是
src/
,但我无法设置它,因为它会根据我的GrunFile查找
src/js/bundle/main.js的依赖项。因此,基础位于
src/js/bundle
。当前的main.js与index.html一起工作,如果我将main.js中utils.js的相对路径从
.js/bundle/utils.js
更改为
/utils.js
,应用程序将中断


有什么方法可以让grunt requirejs与我现有的一起工作吗?

首先,添加一个合适的代码示例

这个问题实际上很容易解决

简单更改:

var utilsObject = require('./js/bundle/utils.js');
致:

现在,构建工具和应用程序将正常工作

通过添加
.js
后缀,您绕过了RequireJS应用于模块路径的
baseUrl
规则。从文档中:

RequireJS还默认假定所有依赖项都是脚本, 因此,它不希望在模块ID上看到后缀“.js”

有时,您确实希望直接引用脚本并 不符合查找它的“baseUrl+路径”规则。如果是一个模块 ID具有以下特征之一,将不会传递该ID 通过“baseUrl+路径”配置,只需像 与文档相关的常规URL:

  • 以“.js”结尾
  • 以“/”开头
  • 包含URL协议,如“http:”或“https:”

谢谢,但这是我尝试的第一件事。如果您更改它并按原样运行应用程序,它将无法找到UTIL。(构建工具将工作并生成build.js)如果我通过这样连接build.js,应用程序什么都不做……我需要一些额外的代码来调用模块吗?我更改了这一行并在浏览器中运行了应用程序。所有文件都正确加载(我看到了警报),构建工具正常工作。你说你用.js扩展名试过了,你没有试过吗?我明白了…嗯,我会再试一次,这是suffixi上的一个有趣的点,所以为了不把它当作一个相对路径,而是通过requirejs的baseURL设置,我必须不使用.js…有趣的点。谢谢这应该可以解决我的大部分问题,使它在使用r.js和不使用r.js的情况下都能工作。你知道为什么当我加载build.js(用它替换main.js)时,它不会做任何事情吗?document.ready代码似乎没有执行,是否必须将其从主模块中取出?
var utilsObject = require('./utils');