使用grunt-requirejs编译时“没有这样的文件”错误

时间:2013-11-21 20:57:33

标签: requirejs r.js grunt-contrib-requirejs

由于require.js构建的大多数问题都与文件结构和相对路径引用有关,因此我在此处创建了一个repo:https://github.com/ttback/requirejs-example以便于进行故障排除。

错误是当我运行grunt时,我会得到no such file or directory requirejs-example/src/js/bundle/js/bundle/utils.js

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

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

1 个答案:

答案 0 :(得分:2)

首先,添加一个不错的代码示例。

问题很容易解决。

简单地改变:

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

为:

var utilsObject = require('./utils');

现在构建工具和应用程序都能正常工作。

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

  

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

     

有时您可能希望直接引用脚本   不符合“baseUrl + paths”规则来查找它。如果一个模块   ID具有以下特征之一,ID不会被传递   通过“baseUrl + paths”配置,就像对待一样   与文档相关的常规URL:

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

http://requirejs.org/docs/api.html#jsfiles