2016-11-30 148 views
4

我正在使用Angular 2的最新CLI捆綁和構建應用程序。在IIS上提供bundle.js.gz文件

由於CLI生成我想在IIS服務器上託管的「main.bundle.js.gz」文件。

我不知道如何配置IIS來提供壓縮內容。

當我手動將「index.html」文件指向「.gz」文件時,它不起作用。有沒有人嘗試過在IIS上,可以提供一些線索如何配置它使其工作。

我知道IIS具有壓縮支持,但我不想使用它。我想通過Angular CLI爲已經壓縮的文件提供服務。

任何幫助將appriciated。

回答

1

共享配置我想出來在IIS中提供預壓縮的靜態內容。

建立你的ng2項目後,你有* .gz文件和其他文件。創建「gz」目錄並將* .gz文件移入其中。

對Web.config進行更改。 爲gz dir添加「location」元素。這裏我們禁用內置的IIS壓縮,所以IIS不會第二次壓縮我們的預壓縮文件(雙壓縮)。爲瀏覽器添加標題「content-encoding:gzip」,以便了解我們提供的是gzip內容。

<location path="gz"> 
    <system.webServer> 
     <urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" /> 
     <httpProtocol> 
      <customHeaders> 
       <add name="content-encoding" value="gzip" /> 
      </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</location> 

接下來是我們定製的* .js.gz文件擴展名。我們必須將其內容類型定義爲application/javascript。添加到全局system.webServer> staticContent:

<mimeMap fileExtension=".js.gz" mimeType="application/javascript" /> 

最後一步。編輯index.html,將主腳本路徑爲 「GZ/main.xxx.bundle.js.gz」

完整的Web.config例如https://gist.github.com/suhrab/552af7b3383706081fbe51c102c290d7

結束。

請教。由於用於生產的angular-cli生成具有唯一名稱(散列)的文件,對於我來說它是「main.0b55c0ac894d24f40217.bundle.js.gz」,因此您可以添加緩存控制標頭以永不過期。 https://www.iis.net/configreference/system.webserver/staticcontent/clientcache

+0

它不加載延遲加載的模塊,它試圖在沒有* .gz擴展的情況下加載它們。 – Helzgate