【发布时间】:2014-02-22 00:34:23
【问题描述】:
我一直在开发一个使用 RequireJS 进行模块化的 Backbone 应用程序。我觉得我已经很好地处理了这一点,但是现在我们已经准备好部署了,我整天都在与 r.js 作斗争并且真的被卡住了。我已经设法让应用程序在没有任何错误的情况下构建,但是当我尝试运行优化的构建时,它会忽略已构建到我的输出文件中的几个文件。这是我正在使用的(为简洁而编辑)build.js 文件:
({
appDir: "main-app",
baseUrl: "js",
mainConfigFile: "main-app/js/main.js",
dir: "build",
optimize: "none", // for debugging this issue
findNestedDepencencies: false, // 'true' isn't needed, and didn't fix the issue anyway
removeCombined: true,
modules: [
{ name: "main", exclude: ["vendor"] },
{ name: "vendor" }
],
wrap: true
})
main.js 文件已经在非优化模式下工作了数周了。这是该文件的简化版本:
requirejs.config({
shim: {
handlebars: { exports: 'Handlebars' },
underscore: { exports: '_' },
backbone: { deps: ['underscore', 'jquery'], exports: 'Backbone' },
marionette: { deps: ['backbone'], exports: 'Marionette' }
},
paths: {
jquery: "vendor/jquery/jquery",
handlebars: "vendor/handlebars/handlebars",
backbone: "vendor/backbone/backbone",
underscore: "vendor/underscore/underscore",
marionette: "vendor/marionette/backbone.marionette",
hbs: "vendor/require-handlebars-plugin/hbs"
},
hbs: {
helperDirectory: "common/templates/helpers/"
}
});
requirejs(['vendor', 'app', 'controllers'], function(Vendor, Application) {
Application.start();
});
vendor 是一个空模块,它只需要所有使用的第 3 方库,以确保它们已加载并使优化更清晰(我最终得到一个包含我的应用程序代码的 main.js 文件和供应商.js 文件,包含所有第 3 方代码。)controllers 文件是相同的,只是包含大多数应用程序模块。
我遇到的问题是,在编译并运行优化后的应用程序后,require 仍在尝试从 requirjs.config 块中列出的路径中加载 hbs、jquery 和 underscore,即使我可以看到它们正在被编译成vendor.js。
if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
});
}
我花了很多时间尝试编译 hbs,所以我仍在尝试确定这是否会导致问题,但我不知道它会如何。
【问题讨论】:
-
您可以将
vendor模块的内容添加到问题中吗?尽管它可能很简单,但在这个模块中仍然可能会出错。
标签: jquery backbone.js optimization requirejs r.js