我正在使用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 任务,我希望它应该编译/组合我的应用程序的所有主要依赖项,但仍然允许稍后运行require(somevar)
和调用。define
基本上,我的单页应用程序的某些部分在用户单击它的链接之前不会加载,这会触发一个requrire()
并define()
调用。
我目前的问题似乎很基本......我已经设置了我的 requirejs grunt 任务,如下所示:
requirejs:
options:
baseUrl: './'
mainConfigFile: 'srv_dev/config.js'
dist:
options:
out: 'dist/script.js'
这抛出Error: Error: Missing either a "name", "include" or "modules" option
我已经阅读了大部分优化器文档以及示例构建文件,但不明白这个错误是怎么回事。这个项目中的tkellen使用 almond.js 的 name 选项——但我不认为我想这样做,因为我需要那些懒惰的加载器 require() 调用。示例构建文件指出:“仅指定模块名称意味着模块将被转换为包含其所有依赖项的构建文件。” 所以这是我的下一次尝试:
requirejs:
options:
baseUrl: './'
name: 'srv_dev/config.js'
dist:
options:
out: 'dist/script.js'
有了这个我得到Error: ENOENT, no such file or directory >> '/Users/user/Desktop/project/site/app.js'
所以它找到了 config.js,但是找不到配置中列出的路径,因为它使用了 require.js 配置的 baseUrl。
如果我在 requirejs 任务配置中指定了“./srv_dev”的 baseUrl,那么它就找不到我的 config.js 文件。我已经尝试了各种方法来让它工作但没有运气。我认为 gruntfile 需要与 config.js 文件位于同一目录中,但这不是我的项目的设置方式。
谢谢各位!!!
这是我的 config.coffee 文件的全文
config =
baseUrl: './'
paths:
# require plugins
text : '/components/requirejs-plugins/lib/text'
json : '/components/requirejs-plugins/src/json'
# lib
jquery : '/components/jquery/jquery'
bootstrap : '/components/bootstrap/dist/js/bootstrap'
lodash : '/components/lodash/dist/lodash'
backbone : '/components/backbone/backbone'
marionette : '/components/marionette/lib/backbone.marionette.min'
handlebars : '/components/handlebars/handlebars'
prism : '/components/customPrism/prism'
coffeescript : '/components/coffee-script/extras/coffee-script'
# app
app : '/app/app'
appSettings : '/app/appSettings'
AppController : '/app/AppController'
AppRouter : '/app/AppRouter'
postMasterRecord : '/posts/postMasterRecord'
util : '/scripts/util'
templates : '/templates'
handlebarsHelpers: '/scripts/handlebarsHelpers'
shim:
# lib
bootstrap:
deps: ['jquery']
backbone:
deps: ['lodash', 'jquery']
exports: 'Backbone'
marionette:
deps: ['backbone', 'lodash', 'jquery']
exports : 'Marionette'
handlebars:
exports: 'Handlebars'
templates:
deps: ['handlebars']
# app
app:
deps: [
'marionette'
'bootstrap'
'handlebars'
'templates'
]
# deps: ['app']
require.config(config)
require(['app'])