如何在 angular cli 中为生产构建启用 gzip 压缩
how to enable gzip compression in angular cli for production build
我想压缩构建 angular
项目时创建的捆绑文件。我目前使用 ng build --environment=${environment}
构建应用程序,"@angular/compiler-cli": "^4.0.0"
的版本不会将 .gz 文件生成到 dist 文件夹。生成 .gz
捆绑文件的最简单方法是什么(最好不要触及 webpack.config.js
文件)?
PS:我知道创建 .gz
文件的选项已被 angular/cli 团队删除。但我非常需要它,因为我的捆绑文件很大。
我的理解是 cli 团队删除了 .gz 压缩选项,因为大多数服务器会在将文件提供给浏览器之前自动压缩文件(只要浏览器支持压缩响应 - 大多数都支持)。
您可以在将它们传输到服务器之前使用简单的 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 压缩(可能大多数服务器已经启用)。
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"
...
}
我找到了更简单的方法来解决这个问题。
试试这个:
npm i --save-dev gzipper
在你的 angular-cli.json 中,只需将此 gzipper --verbose ./dist
添加到你的构建命令中,如:
ng build && gzipper --verbose ./dist
我认为您需要在 api 上启用 gzip 编码。
这样,客户端就会向服务器请求压缩资源。
我想压缩构建 angular
项目时创建的捆绑文件。我目前使用 ng build --environment=${environment}
构建应用程序,"@angular/compiler-cli": "^4.0.0"
的版本不会将 .gz 文件生成到 dist 文件夹。生成 .gz
捆绑文件的最简单方法是什么(最好不要触及 webpack.config.js
文件)?
PS:我知道创建 .gz
文件的选项已被 angular/cli 团队删除。但我非常需要它,因为我的捆绑文件很大。
我的理解是 cli 团队删除了 .gz 压缩选项,因为大多数服务器会在将文件提供给浏览器之前自动压缩文件(只要浏览器支持压缩响应 - 大多数都支持)。
您可以在将它们传输到服务器之前使用简单的 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 压缩(可能大多数服务器已经启用)。
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"
...
}
我找到了更简单的方法来解决这个问题。 试试这个:
npm i --save-dev gzipper
在你的 angular-cli.json 中,只需将此 gzipper --verbose ./dist
添加到你的构建命令中,如:
ng build && gzipper --verbose ./dist
我认为您需要在 api 上启用 gzip 编码。 这样,客户端就会向服务器请求压缩资源。