在 IIS 上提供 bundle.js.gz 文件

pto*_*szi 5 iis angular-cli angular

我正在使用 Angular 2 最新的 CLI 来捆绑和构建应用程序。

因此,CLI 生成了我想在 IIS 服务器上托管的“main.bundle.js.gz”文件。

我不确定如何配置 IIS 以提供压缩内容。

当我手动更改“index.html”文件以指向“.gz”文件时,它不起作用。有没有人在 IIS 上尝试过,并且可以提供一些如何配置它以使其工作的线索。

我知道 IIS 内置了压缩支持,但我不想使用它。我想通过 Angular CLI 提供已经压缩的文件。

任何帮助都将得到认可。

Did*_*nov 5

共享配置我想在 IIS 中提供预压缩的静态内容。

构建 ng2 项目后,您将拥有带有 *.gz 文件和其他文件的 dist 目录。创建“gz”目录并将 *.gz 文件移动到其中。

对 Web.config 进行更改。为 gz 目录添加“位置”元素。这里我们禁用了内置的 IIS 压缩,因此 IIS 不会第二次压缩我们的预压缩文件(双重压缩)。为浏览器添加标题“内容编码: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>
Run Code Online (Sandbox Code Playgroud)

接下来是我们自定义的 *.js.gz 文件扩展名。我们必须将其内容类型定义为 application/javascript。添加到全局 system.webServer > staticContent:

<mimeMap fileExtension=".js.gz" mimeType="application/javascript" />
Run Code Online (Sandbox Code Playgroud)

最后一步。编辑 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