Javascript 为什么我的RequireJS忽略了优化后的main.js中的代码?
我最近一直在使用RequireJS,但我对优化器是全新的,我试图将其添加到构建步骤中,但我遇到了一个问题。在它运行并将我的JS文件合并为一个文件后,我的“main”主体将不再执行(在优化之前工作正常)。所有依赖项JS都正确加载,但我的main define()中的实际代码没有正确加载(即使我可以在最终的输出文件中看到它) 假设my main.js的简化版本: 正如我提到的,我将在输出文件中内联看到jquery、modernizer、joyride和这两个console.log()语句,因此我相信它是正确生成的。我猜这与我的require config有关: 这是my app.js的简化版本: 我的假设是第二个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()语句,因此我相信
(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”[
)。我怀疑这与以下两件事之一有关:
name:“main”
更改为name:“app/main”
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>