我一直在使用RequireJS進行模塊化的Backbone應用程序。我覺得我已經掌握了這一點,但現在我們已經準備好部署了,我一整天都在與r.js作戰,而且真的陷入了困境。我設法讓應用程序構建時沒有任何錯誤,但是當我嘗試運行優化的構建時,它會忽略已經內置到我的輸出文件中的幾個文件。這裏是(編輯爲簡潔起見)build.js
文件我使用:RequireJS優化生成仍然嘗試加載外部jQuery文件
({
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
是一個空的模塊,只需要使用的所有第三方庫,以確保他們加載並做出優化清潔(我結束了主。 js文件與我的應用程序代碼以及一個包含所有第三方代碼的vendor.js文件)。controllers
文件是相同的東西,只是與大多數應用程序模塊相反。
我遇到的問題是,在編譯和運行優化的應用後,需要仍試圖加載hbs
,jquery
和underscore
從requirjs.config
塊中列出的路徑,即使我可以看到,他們正在編入vendor.js
。
if (typeof define === "function" && define.amd) {
define("jquery", [], function() {
return jQuery;
});
}
我花了很多時間一個很好的協議試圖讓hbs
編譯,所以我仍然在試圖確定是否是造成問題,但我不知道怎麼會。
你可以將「供應商」模塊的內容添加到問題中嗎?儘可能簡單,但仍然有可能在這個模塊中犯錯誤。 – Louis