1

我想弄清楚是否(以及如何可能)使用RequireJS optimization tool不僅包含我的JavaScript模塊,還包括我的「文本」!模塊。我正在研究使用「文本」的Durandal應用程序。視圖模塊。打包RequireJS「文本!」模塊

有時我們有用戶在嘗試加載視圖時發生超時。以下是一個示例錯誤:

Error: Load timeout for modules: text!views/primaryapplicants.html 
http://requirejs.org/docs/errors.html#timeout 

I've got another question I just posted about handling that timeout。我無法弄清楚如何攔截它並重試。我知道模塊定義是有效的,只是客戶可能有網絡連接問題 - 尤其是如果他們在手機上。然而,正如我一直在思考這一點,我意識到如果我可以簡單地將整個應用程序打包到單個文件中,那麼我們可以避免額外的HTTP調用 - 這可能會減少超時這樣的。這意味着應用程序要麼加載,要麼不會 - 而不是「部分」加載的可能性。

這個程序沒有大量的意見。我估計添加每個視圖將使用gzip壓縮添加大約20kb。

那麼,是否可以將這些「文本」打包?莫名其妙?

+1

您是否嘗試過使用韋蘭http://durandaljs.com/documentation/Building-with-Weyland/ Durandal的建設者?默認情況下,它將包含所有視圖爲文本!**/*。html。 – RainerAtSpirit

+0

我甚至不知道它存在...所以不,我沒有嘗試過。將檢查出來。謝謝你的提示! – Josh

+0

我沒有weyland-config.js文件,也沒有關於如何創建文件的文檔。它只是說'...細節即將推出...'。所以這是一個非開始,除非我能找到其他地方的文檔。哦,這似乎是正確的解決方案。 – Josh

回答

1

inlineText build config option(默認爲true),它指示優化器完成您想要的操作。需要注意的是,就像其他模塊一樣,它只會檢測某個模塊的define()塊中指定的依賴關係。換句話說,它將無法檢測到按需請求的依賴關係,除非它們明確可達 - 這就是問題所在。

一個解決辦法(遠離如果你有很多視圖文件的理想),是指定的每一個text!依賴您在include option使用你的構建配置中,如:

// ... 
include: ["text!views/primaryapplicants.html", 
    "text!views/secondaryapplicants.html", 
    // etc. 
] 
// ... 
+0

'include'配置指令是我需要的。謝謝! – Josh

1

你可能想給韋蘭,Durandal的優化器一試。例如weyland-config.js配置可以在HTML StarterKit中找到。

https://github.com/BlueSpire/Durandal/blob/master/platforms/HTML/StarterKit/weyland-config.js

exports.config = function(weyland) { 
    weyland.build('main') 
     .task.jshint({ 
      include:'app/**/*.js' 
     }) 
     .task.uglifyjs({ 
      include:['app/**/*.js', 'lib/durandal/**/*.js'] 
     }) 
     .task.rjs({ 
      include:['app/**/*.{js,html}', 'lib/durandal/**/*.js'], 
      loaderPluginExtensionMaps:{ 
       '.html':'text' 
      }, 
      rjs:{ 
       name:'../lib/require/almond-custom', //to deploy with require.js, use the build's name here instead 
       insertRequire:['main'], //not needed for require 
       baseUrl : 'app', 
       wrap:true, //not needed for require 
       paths : { 
        'text': '../lib/require/text', 
        'durandal':'../lib/durandal/js', 
        'plugins' : '../lib/durandal/js/plugins', 
        'transitions' : '../lib/durandal/js/transitions', 
        'knockout': '../lib/knockout/knockout-2.3.0', 
        'bootstrap': '../lib/bootstrap/js/bootstrap', 
        'jquery': '../lib/jquery/jquery-1.9.1' 
       }, 
       inlineText: true, 
       optimize : 'none', 
       pragmas: { 
        build: true 
       }, 
       stubModules : ['text'], 
       keepBuildDir: true, 
       out:'app/main-built.js' 
      } 
     }); 
} 
+0

這些路徑與我在應用中獲得的路徑完全不同,但這是一個很好的開始。我將一次通過這些路徑並調整它們以適應我的應用程序佈局。我確信我已經開始使用「入門套件」,但顯然不是因爲我錯過了weyland-config.js文件,我的路徑有點不同。我會報告它是如何發生的。謝謝! – Josh

+0

好吧,這看起來很有希望,但在更新所有路徑並嘗試執行weyland之後,失敗並沒有錯誤。根本沒有輸出,即使使用「-v」選項(即「使用詳細日誌記錄」)。這讓我不知道下一步該去哪裏。我想我會嘗試讓RequireJS的包裝工作 - 並且希望Durandal的人們可以在Weyland上多一些文檔! :-) – Josh