Javascript requirejs优化器-需要帮助优化我们的应用程序吗

Javascript requirejs优化器-需要帮助优化我们的应用程序吗,javascript,build,requirejs,optimization,grunt-contrib-requirejs,Javascript,Build,Requirejs,Optimization,Grunt Contrib Requirejs,我们有一个大规模的javascript应用程序,我们正在尝试使用grunt contrib requirejs连接和缩小它。我们使用Aura框架。我们使用bower将依赖项从其他存储库拉入主应用程序 这是我们的应用程序结构 main.js: 我们当前的requirejs任务配置: requirejs: { compile: { options: { mainConfigFile: 'app/main.js', name: '

我们有一个大规模的javascript应用程序,我们正在尝试使用grunt contrib requirejs连接和缩小它。我们使用Aura框架。我们使用bower将依赖项从其他存储库拉入主应用程序

这是我们的应用程序结构

main.js:

我们当前的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及其依赖项,但当我们尝试运行它时,会出现如下错误:
获取404(未找到) 尽管下划线是我们包含的许多小部件的依赖项

我们在中广泛尝试了不同的选项,并通读了许多叠加流问题,试图找到答案。
我们需要有关如何将其构建为具有此结构的缩小文件的建议:

更新#2:正确的文件结构

- dist/  
    |_ index.html // copied using grunt copy
    |_ css        // copied using grunt copy
    |_ app.js     // Built with grunt requirejs
更新
我们在垫片中加入了
下划线
,修复了上述错误,但我们仍然收到另一个错误:

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) {
    ...
});

首先要考虑以下几点:

首先,应该避免使用名称定义模块。该名称通常由优化工具生成。请看这里:

其次,您应该了解baseUrl是什么,以及何时用于定位资源。在您的示例中,baseUrl似乎是“app/”,尽管您尚未明确定义它。您还应该阅读以下内容: 因此,如果使用“.js”扩展名,则不会考虑baseUrl

现在,您应该尝试:


首先,从define函数中删除第一个参数“bower_components/core/app/main.js”。然后,您应该通过自动生成的模块id来引用此模块,该模块id将是一个相对于baseUrl的路径,不带“.js”扩展名。

您提到在优化文件中有以下内容:

define("bower_components/core/app/main.js", ["aura/aura", "bootstrap"], function(){
...
});
但这毫无意义。如果我复制一个类似于您在问题中显示的结构并对其进行优化,则位于
bower\u components/core/app/main.js的文件将优化为:

define("core", ...
由于
路径
设置
'core':'bower\u components/core/app/main'
,应用程序的其余部分将其称为
core


如果我将
'bower\u components/core/app/main.js'
添加到构建配置中的
include
设置中,我可能会复制错误的模块名称。当我将此名称添加到
包含
列表时,我还得到了您提到的加载错误。确保您的
include
列表不包含此名称,并确保任何地方都没有将
'bower\u components/core/app/main.js'
列为依赖项。此名称不应出现在任何
define
require
调用中。

是否在shim中包含下划线?请更新代码结构的描述并共享生成的文件。顺便说一句,我使用了一个技巧来澄清路径-生成后,我已将此脚本包含在页面require.config({baseUrl:'/path/to/scripts')中。无论如何,为了帮助您,我需要您共享构建的文件+完整的文件结构。1。您指的是
define(“bower_components/core/app/main.js”[“aura/aura”、“bootstrap”]、function(){…})?我不清楚——这是由优化工具创建的——我从它生成的文件中复制并粘贴了它。我还尝试在两个不同的位置(在我们的requirejs.config和requirejs编译任务中)添加“baseUrl:'app/”,但都没有解决这个问题。我们的requirejs.config已经在app/目录中(在app/main.js中),因此添加“baseUrl:'app'”会将目录添加到路径中两次。好的,那么baseUrl应该不会有问题。试试@louis在回答中的建议。
define("bower_components/core/app/main.js", ["aura/aura", "bootstrap"], function(){
...
});
define("core", ...