Javascript 为什么我的RequireJS忽略了优化后的main.js中的代码?

Javascript 为什么我的RequireJS忽略了优化后的main.js中的代码?,javascript,build,requirejs,optimization,Javascript,Build,Requirejs,Optimization,我最近一直在使用RequireJS,但我对优化器是全新的,我试图将其添加到构建步骤中,但我遇到了一个问题。在它运行并将我的JS文件合并为一个文件后,我的“main”主体将不再执行(在优化之前工作正常)。所有依赖项JS都正确加载,但我的main define()中的实际代码没有正确加载(即使我可以在最终的输出文件中看到它) 假设my main.js的简化版本: 正如我提到的,我将在输出文件中内联看到jquery、modernizer、joyride和这两个console.log()语句,因此我相信

我最近一直在使用RequireJS,但我对优化器是全新的,我试图将其添加到构建步骤中,但我遇到了一个问题。在它运行并将我的JS文件合并为一个文件后,我的“main”主体将不再执行(在优化之前工作正常)。所有依赖项JS都正确加载,但我的main define()中的实际代码没有正确加载(即使我可以在最终的输出文件中看到它)

假设my main.js的简化版本:

正如我提到的,我将在输出文件中内联看到jquery、modernizer、joyride和这两个console.log()语句,因此我相信它是正确生成的。我猜这与我的require config有关:

这是my app.js的简化版本:

我的假设是第二个requirejs()调用没有被执行。这可能吗?是什么导致了这种情况发生?正确的修复方法是什么

基本上,我的main.js优化版本如下所示:

(function(e,t){ ..jquery code.. };

define("jquery.joyride", function(){});
(function(a){ ...code here... });

console.log("This statement outputs to console");
define('main',["jquery", "modernizr", "jquery.joyride"], function($) {
    console.log("This statement does not");
};
以下是构建配置:

({
    appDir: '../../',
    baseUrl: "assets/js",
    mainConfigFile: '../../assets/js/app.js',
    dir: '../../../BUILD/',
    optimizeCss: 'default',
    modules: [
        {
            name: "main"
        }
    ],
    removeCombined: true,
    preserveLicenseComments: false,
    optimize: 'none' // I Disabled this to help me try and debug
})
这也很有帮助,这是我用来包含我的JS的一行(在我优化文件之前和之后的同一行):


因此,通过仔细查看您上面共享的代码……问题是main.js的优化版本没有添加正确的模块名(
define(“main”[
应该是
define(“app/main”[
)。我怀疑这与以下两件事之一有关:

  • r.js配置文件中的模块名称错误
  • app.js中的模块引用不正确
  • 首先,为了测试/证明我的假设:手动编辑main.js的优化版本,以匹配我上面提到的内容(“app/main”而不是“main”)。如果这样做有效,那么尝试以下内容(一次一个,而不是同时):

  • 要寻址#1,请在r.js配置文件中…将
    name:“main”
    更改为
    name:“app/main”
  • 对于#2,在app.js中,将
    requirejs([“app/main”]);
    更改为
    requirejs([“main”]);

  • 你能发布你在r.js(优化器)中使用的配置吗还有,我已经用配置更新了我上面的帖子。真不敢相信我原来忘了包括它。在你的r.js配置文件中,将
    mainConfigFile
    改为指向app.js而不是main.jsWhoops,这是一个不需要动脑筋的错误。也就是说,更改后我仍然得到相同的结果。所有代码都在optim中但是define('main')块中的部分实际上并没有执行。有趣的是,如果我进入我的优化文件并将:
    define('main',[“jquery”…
    更改为
    define([“jquery”
    ),它就会工作(我看到了其他问题,但它实际执行了。好吧,我尝试了上面列出的内容,手动更新修复了这个问题(同时介绍了其他我必须调试的问题:))。但是,您列出的其他两项更改都无法解决此问题。我猜我的问题源于我如何在app.js中设置baseURL和路径值,但我可能是错的。请尝试从r.js配置中删除
    baseURL
    appDir
    。我刚刚注意到其中的
    baseURL
    您在app.js中定义的导致其失败的配置。这些值不同,因为r.js配置提供的值与我的实际配置文件的位置有关,而app.js配置提供的值与app.js的位置有关。它们是否需要位于同一位置?不,它们不需要相同。在r.js中定义属性。js文件将在构建时覆盖其原始值(取自app.js)。因此,如果您的r.js配置与app.js位于不同的目录中,那么它们的不同是有意义的。这就是我所想的。我的app.js、require.js和所有常规js文件都位于
    assets/js/
    中,而我的r.js配置位于
    assets/build/
    (function(e,t){ ..jquery code.. };
    
    define("jquery.joyride", function(){});
    (function(a){ ...code here... });
    
    console.log("This statement outputs to console");
    define('main',["jquery", "modernizr", "jquery.joyride"], function($) {
        console.log("This statement does not");
    };
    
    ({
        appDir: '../../',
        baseUrl: "assets/js",
        mainConfigFile: '../../assets/js/app.js',
        dir: '../../../BUILD/',
        optimizeCss: 'default',
        modules: [
            {
                name: "main"
            }
        ],
        removeCombined: true,
        preserveLicenseComments: false,
        optimize: 'none' // I Disabled this to help me try and debug
    })
    
    <script data-main="/assets/js/app" src="/assets/js/require.js"></script>