【问题标题】:how to enable gzip compression in angular cli for production build如何在 Angular cli 中启用 gzip 压缩以进行生产构建
【发布时间】:2017-11-29 05:40:58
【问题描述】:

我想压缩在构建angular 项目时创建的捆绑文件。我目前使用ng build --environment=${environment} 构建应用程序,"@angular/compiler-cli": "^4.0.0" 的版本不会将.gz 文件生成到 dist 文件夹。生成.gz 捆绑文件的最简单方法是什么(最好不要接触webpack.config.js 文件)? PS:我知道创建.gz 文件的选项在某个时候被 angular/cli 团队删除了。但是我非常需要它,因为我的捆绑文件很大。

【问题讨论】:

    标签: angular compression angular-cli gzip angular7


    【解决方案1】:

    我的理解是 cli 团队删除了 .gz 压缩选项,因为大多数服务器会在将文件提供给浏览器之前自动压缩文件(只要浏览器支持压缩响应 - 大多数都支持)。

    【讨论】:

    • 有什么替代方法?我想在我的 Angular7、Ionic 4 项目中进行压缩?
    【解决方案2】:

    您可以在将它们传输到服务器之前使用简单的 bash 脚本来实现这一点,甚至可以将其作为命令添加到 package.json 中

     "scripts": {
       "build.prod": "ng build --environment=prod && tar -zcvf archive.tar.gz dist/prod/*",
    

    不确定您的文件夹结构是什么,但您可以在终端中使用tar -zcvf archive.tar.gz dist/prod/*,直到找到适合您需要的路径。

    编辑:似乎我误解了这个问题,如果在向最终用户提供内容时涉及捆绑大小,您应该查看 AOT + Rollup 以最小化捆绑大小。并在提供文件时在您的网络服务器上启用 gzip 压缩(可能大多数服务器已经启用它)。

    【讨论】:

    • 我继续在服务器上进行 gzip 压缩,效果很好。
    • 不知何故它失败了tar -zcvf archive.tar.gz dist/prod/*" 命令,即使我已经安装了tar
    • 这种服务器压缩很神奇。但是为什么 Angular 本身不提供这样的压缩呢?
    • 好的,接下来的答案讨论一下。
    【解决方案3】:

    Angular-cli 团队已移除对生成压缩文件 (.gz) 的支持。 Github discussion url.

    我们可以为此使用 gulp 任务。 安装以下 npm 模块:

    $npm install --save-dev gulp
    $npm install --save-dev gulp-gzip
    

    创建 gulpfile.js

    var gulp = require('gulp');
    var gzip = require('gulp-gzip');
    
    gulp.task('compress', function() {
      return gulp.src(['./dist/**/*.*'])
          .pipe(gzip())
          .pipe(gulp.dest('./dist'));
    });
    

    由于.gz 支持可以在Web 服务器中配置,但服务器必须自己进行压缩并为此花费一些CPU 周期。如果我们预先构建它,那么它可以帮助服务器节省一些 cpu 周期。 :)

    我们可以将它作为脚本添加到package.json 中,以便在应用程序的每个build 之后运行。

    "scripts": {
           ...
           "postbuild": "gulp compress"
           ...
       }
    

    【讨论】:

    • 在哪里添加这个 gulpfile.js ?
    • 嗨@SureshKumar,您可以将文件保存在项目的根目录或package.json的同一级别
    • ng serve创建的文件可以gzip吗?
    • @OkashaRafique 这个脚本在npm run build 命令之后运行。
    • @Amitesh 谢谢。我在 IIS 上发布了它,还在 IIS 中添加了 URL 审查包,然后我就可以对其进行测试了。
    【解决方案4】:

    我找到了更简单的解决方案来解决这个问题。 试试这个:

    npm i --save-dev gzipper
    

    并在您的 angular-cli.json 中将 gzipper --verbose ./dist 添加到您的构建命令中,例如:

    ng build && gzipper --verbose ./dist
    

    【讨论】:

    • @iliya.rudberg 命令ng build --prod && gzipper --verbose ./dist 创建压缩文件,但一旦部署,仍然引用js 文件。知道为什么吗?
    • @UthpalaPathirana 你的意思是浏览器没有得到压缩文件?您使用哪个服务器来托管您的文件?如果是 nginx,请检查此链接 - stackoverflow.com/questions/12640014/…
    • 我认为需要启用 SSL 才能获取预压缩文件,即使服务器配置为在 IIS 中获取具有 URL-rewrite 的文件。
    • 这是我的首选解决方案。提示:在新版本的 gzipper 中你必须写 ng build && gzipper compress ./dist --verbose
    • 运行“ng build --prod && gzipper ./dist”后,我将所有文件上传到 Azure 静态 Web 存储,但是当访问网站仍然使用未压缩版本时...有人可以指点我吗方向?
    【解决方案5】:

    我认为您需要在您的 api 上启用 gzip 编码。 这样,客户端就会向服务器请求压缩资源。

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 1970-01-01
      • 2010-10-21
      • 2015-02-15
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      相关资源
      最近更新 更多