[翻译]Gulp.js简介 - 脚后跟着猫
我们讨论了很多关于怎么减少页面体积,提高重网站性能的方法。有些是操作是一劳永逸的,如开启服务器的gzip压缩,使用适当的图片格式,或删除一些不必要的字符。但有一些任务是每次工作都必须反复执行的。如
- 新图片或修改后图片的压缩
- 去除调试语句如console,debugger
- 合并和压缩css和js
- 把更新的文件部署到服务器
你可能设想大家都会记住所有的这些操作,但总会有人忘记一两条。随着项目越来越大,上面的工作越来越浪费时间。只好设专人来完成这些枯燥的工作。
能不能让这些工作不用占用人手呢?
你需要一个自动化的运行程序或构建过程,这听起来很复杂
虽然在搭建这个构建过程比单独执行每个小任务要复杂得多,但随着应用越广,你可以节省大量的时间和人力,而且也可以避免错误。
采取注重实效的解决方案:
- 把最耗时的任务自动化
- 不要过度设计,初始安装设置尽量短和简单
- 使用一个任务管理工具一段时间,不要一时兴起随便切换到另外一个
我们将讨论一些新的工具和概念。
- Node.js-我们将使用node.js,但不用对它了解太深,只要知道一些javascript知识,并会用搜索引擎就好了。
- 命令行-你得会输入命令,虽然没有图形界面,但一些命令都很简单。
grunt vs gulp
你可能听过grunt,grunt是基于node.js的构建工具
gulp是一个新的基于node.js的构建工具
grunt和gulp做同样的事。grunt出来更早,发展得也不错,可以找到很多的插件和资源,而且可以找到很多教程。这是一个很牛的工具,如果你已经很熟悉这个工具了,有哪些问题会让你替换掉它呢?
没有完美的工具,gulp.js被开发出来解决一些grunt无法解决的问题:
- grunt插件经常执行多个任务,gulp插件只做一件事
- grunt需要插件完成一些基本功能,如文件监听,gulp内置了基础功能
- grunt使用JSON格式的配置文件,gulp采用更精简,更简单的js代码来配置
不是每个人都觉得最后一条,gulp比grunt好,但建议查看一下gulp的演示幻灯片然后自己判断。
最重要的是gulp是基于流的概念。想想一下,你的文件通过一个管道,在沿着该管道的一个或多个点上一些操作被执行。(很像流水线)
例如我们可以把我们所有的js文件放到一个script管道,其中
- 合并为一个文件
- 删除调试代码
- 压缩代码
- 把生成的文件放到指定目录
数据输入到一个方法。该方法输出的新数据被下一个方法使用。这让人感觉很像jQuery的链式调用,例如
1
<code>$(
"#element"
).text(
"hello world!"
).addClass(
"myclass"
).fadeIn();</code>
로그인 후 복사
理论讲完了,下面动手使用gulp吧。
第1步:安装Node.js
可以到官网下载你电脑系统对应的版本,具体怎么安装自己百度吧。
安装完成后,打开命令行,输入
1
<code>node -v</code>
로그인 후 복사
如显示你当前安装的node版本。下面同样可以输入
1
<code>npm -v</code>
로그인 후 복사
查看node.js的包管理器的版本信息。
如果哪个命令失败,检查一下你是不是命令输入错误了。如果没错,那更好,说明你node安装成功了。
第2步:安装gulp
使用npm安装gulp,需要添加-g标识把gulp安装到全局环境,可以在使其在任意项目中使用。
1
<code>npm install gulp -g</code>
로그인 후 복사
如果使用的是mac或linux,需要在命令前加sudo,切换到管理员权限。
1
<code>sudo npm install gulp -g</code>
로그인 후 복사
输入下面命令查看一下gulp是否安装成功
1
<code>gulp -v</code>
로그인 후 복사
第3步:配置项目
举个例子,比如你的项目文件夹为test,首先切换到项目文件夹
1
<code>cd test</code>
로그인 후 복사
根据不同的系统,window可以用dir,mac/linus用ls查看文件目录
我们的test文件夹,包括下面的子文件夹
-
src — the location of pre-processed HTML source files and folders:
- images — uncompressed images
- scripts — multiple pre-processed script files
- styles — multiple pre-processed CSS files
-
build — the location of production files for upload including:
- images — compressed images
- scripts — a single minified script file
- styles — a single minified CSS file
(build文件夹是我们的生成目录,是通过自动化任务生成的)
首先,在项目里安装gulp
1
<code>npm install gulp --save-dev</code>
로그인 후 복사
这个命令会在test里创建用于存放gulp和它插件的node_modules文件夹
最后,在test文件夹里创建一个空的gulpfile.js配置文件。这里放我们要声明的任务。
第4步:安装第1个gulp插件
gulp不能自己就工作,你必须安装和配置插件来执行特定任务。首先安装jshint,用于检测我们的js源文件的质量。安装命令如下
1
<code>npm install gulp-jshint --save-dev</code>
로그인 후 복사
打开gulpfile.js文件,添加以下代码
1
2
3
4
5
6
7
8
9
10
11
<code>
// include gulp
var
gulp =
require
(
'gulp'
);
// include plug-ins
var
jshint =
require
(
'gulp-jshint'
);
// JS hint task
gulp.task(
'jshint'
,
function
() {
gulp.src(
'./src/scripts/*.js'
)
.pipe(jshint())
.pipe(jshint.reporter(
'default'
));});</code>
로그인 후 복사
上面代码的意思是。
- 引用gulp
- 把gulp-jshint插件对象放到jshint变量中
- 声明一个新的gulp任务jshint。这个把所有在src/scripts内的js文件输入到jshint对象中,并把发现的错误输出到控制台。
保存gulpfile.js文件,并且在命令行运行任务,如下
1
<code>gulp jshint</code>
로그인 후 복사
你会在控制台得到以下信息:
1
2
3
4
5
6
7
<code>[gulp] Using file D:\test\gulpfile.js
[gulp] Working directory changed to D:\test
[gulp] Running
'jshint'
...
[gulp] Finished
'jshint'
in 8.24 ms
D:\test\src\scripts\lib.js: line 2, col 20, Missing semicolon.
1 error</code>
로그인 후 복사
第5步:添加其它任务
让我们多尝试一些插件。我们将查找src/images文件夹下,新图片或修改图片,把它们压缩并输出到build/images文件夹里。要做到这些,我们需要安装gulp-changed和gulp-imagemin两个插件。
1
2
<code>npm install gulp-changed --save-dev
npm install gulp-imagemin --save-dev</code>
로그인 후 복사
接下来在gulpfile.js文件中引用它们。
1
2
<code>
var
changed =
require
(
'gulp-changed'
);
var
imagemin =
require
(
'gulp-imagemin'
);</code>
로그인 후 복사
并且添加一个新gulp任务,用于执行插件
1
2
3
4
5
6
7
8
9
<code>
// minify new images
gulp.task(
'imagemin'
,
function
() {
var
imgSrc =
'./src/images/**/*'
,
imgDst =
'./build/images'
;
gulp.src(imgSrc)
.pipe(changed(imgDst))
.pipe(imagemin())
.pipe(gulp.dest(imgDst));});</code>
로그인 후 복사
保存gulpfile.js,然后在命令行运行下面的命令
1
<code>gulp imagemin</code>
로그인 후 복사
图片会被压缩并保存到生成目录对应的文件夹中,并且在控制台会得到下面的信息
1
2
3
4
5
6
7
<code>[gulp] Using file D:\test\gulpfile.js
[gulp] Working directory changed to D:\test
[gulp] Running
'imagemin'
...
[gulp] Finished
'imagemin'
in 5.71 ms
[gulp] gulp-imagemin: ? battery.png (saved 2.7 kB)
[gulp] gulp-imagemin: ? app.png (saved 3.2 kB)
[gulp] gulp-imagemin: ? tick.png (saved 2.8 kB)</code>
로그인 후 복사
相同的方法,我们可以添加gulp-minify-html插件,用于压缩所有src下的html文件
1
<code>npm install gulp-minify-html --save-dev</code>
로그인 후 복사
修改gulpfile.js文件,添加新任务htmlpage
1
2
3
4
5
6
7
8
9
10
11
12
<code>
// include plug-ins
var
minifyHTML =
require
(
'gulp-minify-html'
);
// minify new or changed HTML pages
gulp.task(
'htmlpage'
,
function
() {
var
htmlSrc =
'./src/*.html'
,
htmlDst =
'./build'
;
gulp.src(htmlSrc)
.pipe(changed(htmlDst))
.pipe(minifyHTML())
.pipe(gulp.dest(htmlDst));});</code>
로그인 후 복사
保存gulpfile.js,然后测试一下html的压缩
1
<code>gulp htmlpage</code>
로그인 후 복사
很简单吧?下面来使用一下js相关的插件,对源文件进行合并,压缩,去除调试代码的插件。
还是先安装
1
2
3
<code>npm install gulp-concat --save-dev
npm install gulp-strip-debug --save-dev
npm install gulp-uglify --save-dev</code>
로그인 후 복사
在gulpfile.js添加一个新任务scripts
1
2
3
4
5
6
7
8
9
10
11
12
<code>
// include plug-ins
var
concat =
require
(
'gulp-concat'
);
var
stripDebug =
require
(
'gulp-strip-debug'
);
var
uglify =
require
(
'gulp-uglify'
);
// JS concat, strip debugging and minify
gulp.task(
'scripts'
,
function
() {
gulp.src([
'./src/scripts/lib.js'
,
'./src/scripts/*.js'
])
.pipe(concat(
'script.js'
))
.pipe(stripDebug())
.pipe(uglify())
.pipe(gulp.dest(
'./build/scripts/'
));});</code>
로그인 후 복사
这个例字中,我们使用一个数组给gulp.src方法传值。这样可以让js按照给定的顺序进行合并和压缩,可以解决一些依赖的问题。和上面一样,保存,然后运行任务
1
<code>gulp scripts</code>
로그인 후 복사
最后让我们来处理一下css文件,使用添加浏览器前缀插件,压缩插件。
安装
1
2
<code>npm install gulp-autoprefixer --save-dev
npm install gulp-minify-css --save-dev</code>
로그인 후 복사
更新gulpfile.js文件
1
2
3
4
5
6
7
8
9
10
11
<code>
// include plug-ins
var
autoprefix =
require
(
'gulp-autoprefixer'
);
var
minifyCSS =
require
(
'gulp-minify-css'
);
// CSS concat, auto-prefix and minify
gulp.task(
'styles'
,
function
() {
gulp.src([
'./src/styles/*.css'
])
.pipe(concat(
'styles.css'
))
.pipe(autoprefix(
'last 2 versions'
))
.pipe(minifyCSS())
.pipe(gulp.dest(
'./build/styles/'
));});</code>
로그인 후 복사
最后运行
1
<code>gulp styles</code>
로그인 후 복사
给autoprefixer插件,传入以字符串或数组形式的浏览器支持配置,这里我们希望支持所有最新两个版本的浏览器。它会把每个属性按照caniuse.com里的数据进行对照,需要添加前缀则添加。可以避免每次去手工查询并添加对应前缀。
在这些例子中我们只是演示了几个有用的插件,你也可以自己到npmjs.org里去查找你需要的。其它一些有用的插件有:
- gulp-sass 一个node版本的css预处理器
- gulp-clean 可以用来移除没用的文件或文件夹
- gulp-file-include 用对应的文件替换对应的@@inclue('filename')
- gulp-size 日志文件和项目文件的大小
第6步:自动化任务
到现在为止,我们都是一次运行一个任务,gulp允许我们在一个任务中执行所有它依赖的子任务。下面在gulpfile.js中创建一个default任务
1
2
<code>
// default gulp task
gulp.task(
'default'
, [
'imagemin'
,
'htmlpage'
,
'scripts'
,
'styles'
],
function
() {});</code>
로그인 후 복사
然后在命令行运行下面命令
1
<code>gulp</code>
로그인 후 복사로그인 후 복사
所有任务都是按照顺序执行。
但这样还是太麻烦了,每次都要执行。gulp可以使用watch方法来监听你的文件夹,如果有变化,会执行一个任务来完成。下面我们修改一下default任务,使其可以监听html,css,js,image文件的变化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code>
// default gulp task
gulp.task(
'default'
, [
'imagemin'
,
'htmlpage'
,
'scripts'
,
'styles'
],
function
() {
// watch for HTML changes
gulp.watch(
'./src/*.html'
,
function
() {
gulp.run(
'htmlpage'
);
});
// watch for JS changes
gulp.watch(
'./src/scripts/*.js'
,
function
() {
gulp.run(
'jshint'
,
'scripts'
);
});
// watch for CSS changes
gulp.watch(
'./src/styles/*.css'
,
function
() {
gulp.run(
'styles'
);
});});</code>
로그인 후 복사
现在我们再运行
1
<code>gulp</code>
로그인 후 복사로그인 후 복사
程序会一直保持激活状态并在你改变文件时运行。你不再需要每次都运行任务了。
第7步:效果
使用上面的方法对项目进行处理,可以减少50%的页面体积。当你花上几个小时学习一下gulp,它比grunt学习起来容易。希望这个教程对你有用,并且可以让你动手去搭建一个自己的gulp构建工具。
相关链接:
原文:An Introduction to Gulp.js

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

이미지를 클릭 한 후 주변 이미지를 산란 및 확대하는 효과를 얻으려면 많은 웹 디자인이 대화식 효과를 달성해야합니다. 특정 이미지를 클릭하여 주변을 만들 수 있습니다 ...

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

웹 주석 기능에 대한 Y 축 위치 적응 알고리즘이 기사는 Word 문서와 유사한 주석 기능을 구현하는 방법, 특히 주석 간격을 다루는 방법을 모색합니다 ...
