gpt4 book ai didi

javascript - 来自 mainConfigFile 的 RequireJS 优化器不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:33 24 4
gpt4 key购买 nike

我正在使用 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 时,文件会在其他任务中从 coffee 编译为 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

我已经阅读了大部分优化器文档以及 example build file并且不明白这个错误是怎么回事。 tkellen 在 this project使用 almond.js 的名称选项——但我不认为我想这样做,因为我需要那些惰性加载器 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'])

最佳答案

将相同的文件指定为 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: truer.js 所必需的,以遵循 config.js 中的 require([app]) 文件。

关于javascript - 来自 mainConfigFile 的 RequireJS 优化器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com