<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在前端開發中,經常需要使用特定的字型包,但由於中文字型包特別大,嚴重影響網頁的載入速度,所以需要對字型包進行壓縮。
提取專案中使用到的漢字,並利用gulp-font-spider
來實現ttf格式字型包的壓縮,並生成eot,svg,woff等其他格式的字型包,其中使用gulp
來實現這一流程的自動化。
字蛛是一箇中文 WebFont 自動化壓縮工具,它能自動分析頁面使用的 WebFont 並進行按需壓縮,無需手工設定。
npm install gulp-font-spider --save-dev
3.2 使用範例
var gulp = require( 'gulp' ); var fontSpider = require( 'gulp-font-spider' ); gulp.task('fontspider', function() { return gulp.src('./index.html') .pipe(fontSpider()); }); gulp.task('defualt', ['fontspider']);
推薦的跨瀏覽器 @font-face
CSS 寫法:
/* html中 宣告 WebFont*/ @font-face { font-family: 'pinghei'; src: url('../font/pinghei.eot'); src: url('../font/pinghei.eot?#font-spider') format('embedded-opentype'), url('../font/pinghei.woff') format('woff'), url('../font/pinghei.ttf') format('truetype'), url('../font/pinghei.svg') format('svg'); font-weight: normal; font-style: normal; } /*使用選擇器指定字型*/ .home h2, .demo > .test { font-family: 'pinghei'; }
特別說明: @font-face
中的 src
定義的 .ttf 檔案必須存在,其餘的格式將由工具自動生成
font-spider [options] <htmlFile1 htmlFile2 ...>
utf-8
編碼的 HTML 與 CSS 檔案content
屬性只支援普通文字,不支援屬性、計數器等特性利用through2
外掛,將業務資料夾src內所有的漢字提取出來,並生成chars.txt檔案暫存。
gulp.task('extract', () => { return gulp.src('src/**/*{.vue,.scss,.ts}', { dot: true }).pipe(concat('chars.txt')) .pipe(through2.obj(function (file, enc, callback) { const { contents } = file; let text = contents.toString(); var result = text.match(/[u4e00-u9fa5]/ig)?.join(''); if (result){ file.contents = Buffer.from(result) this.push(file); } callback(); })).pipe(gulp.dest('fontMinify/')) });
讀取上一步生成的chars.txt中的漢字,組裝html檔案,寫入字型檔案引入樣式,並將提取出的漢字插入html中
gulp.task('insertCharactersToHtml', () => { return gulp.src('fontminify/chars.txt').pipe(concat('fontMin.html')) .pipe(through2.obj(function (file, enc, callback) { const { contents } = file; let text = contents.toString(); if (text){ file.contents = Buffer.from(`<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> @font-face { font-family: 'fz'; src: url('${fontName}.eot'); src: url('${fontName}.eot?#font-spider') format('embedded-opentype'), url('${fontName}.woff') format('woff'), url('${fontName}.ttf') format('truetype'), url('${fontName}.svg') format('svg'); font-weight: normal; font-style: normal; } /*使用選擇器指定字型*/ #app { font-family: 'fz'; } </style> </head> <body> <div id="app"> ${text} </div> </body> </html>`); this.push(file); } callback(); })).pipe(gulp.dest('fontMinify')) });
gulp.task('fontspider', function () { return gulp.src('./fontMinify/fontMin.html') .pipe(fontSpider()); });
實現提取文字,壓縮字型包後,移動到靜態資原始檔夾public下並刪除任務中生成的fontMInify檔案
const gulp = require('gulp') const through2 = require("through2"); const del = require('del'); const concat = require('gulp-concat'); const fontSpider = require('gulp-font-spider'); let fontName = 'FZMWFont' gulp.task('genFontMinify', () => { return gulp.src(`public/originalFont/${fontName}.ttf`).pipe(gulp.dest('fontMinify/')) }); // 提取專案中的漢字 gulp.task('extract', () => { return gulp.src('src/**/*{.vue,.scss,.ts}', { dot: true }).pipe(concat('chars.txt')) .pipe(through2.obj(function (file, enc, callback) { const { contents } = file; let text = contents.toString(); var result = text.match(/[u4e00-u9fa5]/ig)?.join(''); if (result){ file.contents = Buffer.from(result) this.push(file); } callback(); })).pipe(gulp.dest('fontMinify/')) }); // 將提取出的漢字插入模版html中 gulp.task('insertCharactersToHtml', () => { return gulp.src('fontminify/chars.txt').pipe(concat('fontMin.html')) .pipe(through2.obj(function (file, enc, callback) { const { contents } = file; let text = contents.toString(); if (text){ file.contents = Buffer.from(`<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> @font-face { font-family: 'fz'; src: url('${fontName}.eot'); src: url('${fontName}.eot?#font-spider') format('embedded-opentype'), url('${fontName}.woff') format('woff'), url('${fontName}.ttf') format('truetype'), url('${fontName}.svg') format('svg'); font-weight: normal; font-style: normal; } #app { font-family: 'fz'; } </style> </head> <body> <div id="app"> ${text} </div> </body> </html>`); this.push(file); } callback(); })).pipe(gulp.dest('fontMinify')) }); // 字型檔案壓縮 gulp.task('fontspider', function () { return gulp.src('./fontMinify/fontMin.html') .pipe(fontSpider()); }); // 將生成後的字型檔案移動到預定的靜態資源目錄 gulp.task('mvMinifyFontToPublic', function () { return gulp.src(`./fontMinify/${fontName}.*`) .pipe(gulp.dest('public/fonts')); }); // 刪除字型壓縮檔案產生的中間檔案 gulp.task('rmFontMinify', function () { return del('fontMinify') }); gulp.task('default', gulp.series('genFontMinify','extract', 'insertCharactersToHtml', 'fontspider', 'mvMinifyFontToPublic','rmFontMinify'))
如上介紹,可以實現字型檔案的壓縮並生成多種格式字型包,本文使用的字型包從5M壓縮到了200K,體積大大減小,並且可以通過gulp.watch
監聽src資料夾的變動來實現這一流程的自動化
目前gulp-font-spider
只能實現提取專案中出現的漢字,對於後端介面返回的動態漢字無法提取,只能預先列舉可能使用的漢字來使用
以上就是gulp-font-spider實現中文字型包壓縮實踐的詳細內容,更多關於gulp font spider中文字型包壓縮的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45