mainConfigFile中的RequireJS Optimizer无法正常工作

时间:2014-03-14 18:57:53

标签: javascript coffeescript requirejs gruntjs grunt-contrib-requirejs

我正在使用grunt-requirejs,我的应用结构如下所示:

site/
  dev/
    index.html
    config.coffee
    app.coffee
    etc.
  srv_dev/
    index.html
    config.js
    app.js
    etc.
  dist/
  node_modules/
  Gruntfile.coffee

当我运行grunt dev文件时,从其他任务中将咖啡编译为js并从dev /复制到srv_dev /然后从那里提供服务。

我的grunt dist任务执行dev执行的任务,然后运行requirejs任务,我希望该任务可以编译/组合我的应用程序的所有主要依赖项,但仍然允许{{1} }和require(somevar)调用稍后运行。基本上我的单页应用程序的某些部分在用户点击指向它的链接之前不会加载,这会触发definerequrire()来电。

我目前的问题似乎很基本......我已经设置了我的requirejs grunt任务,如下所示:

define()

这会抛出requirejs: options: baseUrl: './' mainConfigFile: 'srv_dev/config.js' dist: options: out: 'dist/script.js'

我已经阅读了大多数优化程序文档以及example build file,并且不了解此错误发生了什么。 this project中的tkellen使用almond.js的名称选项 - 但我不认为我想这样做,因为我需要那些懒惰 - 加载器require()调用。示例构建文件指出:"仅指定模块名称意味着该模块将转换为包含其所有依赖项的构建文件。"这是我的下一次尝试:

Error: Error: Missing either a "name", "include" or "modules" option

有了这个,我得到requirejs: options: baseUrl: './' name: 'srv_dev/config.js' dist: options: out: 'dist/script.js'

所以它找到了config.js,但是后来找不到配置中列出的路径,因为它使用了require.js配置的baseUrl。

如果我指定' ./ srv_dev'的baseUrl在requirejs任务配置中,它无法找到我的config.js文件。我尝试了各种各样的途径,让它没有运气。我认为gruntfile需要与config.js文件位于同一个目录中,但这不是我的项目设置方式。

谢谢人们!!!

以下是我的config.coffee文件的全文

Error: ENOENT, no such file or directory >> '/Users/user/Desktop/project/site/app.js'

1 个答案:

答案 0 :(得分:3)

指定与mainConfigFilename相同的文件是完全可以接受的:

requirejs:
  options:
    mainConfigFile: 'srv_dev/config.js'
    baseUrl: './srv_dev'
    name: 'config'
    findNestedDependencies: true
  dist:
    options:
      out: 'dist/script.js'

mainConfigFile告诉r.js“这里是您可以找到我的运行时配置的地方”,而name说“这是我的主要模块”。一个并不意味着另一个。

没有mainConfigFile r.js无法找到您的运行时配置。如果没有name(或includemodules),则无法知道应用的入口点。

findNestedDependencies: true需要

r.js关注require([app])文件中的config.js