2016-11-30 146 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