我们有一个大型 javascript 应用程序,我们正在尝试使用 grunt-contrib-requirejs 连接和缩小它。我们使用 Aura 框架。我们使用 bower 将依赖项从其他存储库引入到我们的主应用程序中。
这是我们的应用程序结构
- app/
|
|_ main.js
|_ index.html
|_ css
|_ bower_components/
|_ core/
|_ widget1/
|_ main.js
|_ views/
|_ models/
|_ widget2/
|_ extension1/
|_ extension2/
|_ other third party libraries, etc
- Gruntfile.js
- bower.json
主.js:
requirejs.config({
shim: {
...
},
paths: {
'core': 'bower_components/core/app/main',
'aura': 'bower_components/aura/dist/',
'jquery': 'bower_components/jquery/jquery',
'backbone': ...,
... lots of other paths
}
});
define(['core', 'jquery', 'jqueryui'], function(core, $) {
// Here we start Aura, which finds our extensions and widgets in
// bower_components
});
我们当前的requirejs 任务配置:
requirejs: {
compile: {
options: {
mainConfigFile: 'app/main.js',
name: 'main',
include: ['bower_components/widget1/main', 'bower_components/widget2/main',
'bower_components/extension1/main', 'bower_components/extension2/main'],
exclude: ['jquery'],
insertRequire: ['main'],
out: 'dist/app.js'
}
}
}
这连接了我们的 app/main 及其依赖项,但是当我们尝试运行它时,我们会收到如下错误:
GET http://www.my-machine:8080/bower_components/underscore/underscore.js 404 (Not Found) 即使underscore 是我们包含的许多小部件的依赖项。
我们在r.js 示例中广泛尝试了不同的选项,并通读了许多 stackover flow 问题试图找到答案。
我们需要有关如何将其构建到具有以下结构的缩小文件的建议:
更新#2:正确的文件结构
- dist/
|_ index.html // copied using grunt copy
|_ css // copied using grunt copy
|_ app.js // Built with grunt requirejs
更新
我们已经包含underscore
在我们的垫片中,它修复了上述错误,但我们仍然收到另一个错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
http://my-machine.com:8080/bower_components/core/app/main.js
这包含在最小化文件中,所以我不明白为什么找不到该文件:
define("bower_components/core/app/main.js", ["aura/aura", "bootstrap"], function(){
...
});
更新#3
上面的定义来自优化工具生成的文件!该模块的原始定义core/app/main.js
看起来像:
define(['aura', 'bootstrap'], function(Aura) {
...
});