这就是本文的内容。 它可以帮助你获得如此好的Gulp的基础知识,你可以开始自己探索一切。
在我们开始使用Gulp之前,让我们来谈谈为什么你可能想使用Gulp而不是其他类似的工具。
$ sudo npm install gulp -g
$ npm init
npm init命令为项目创建一个package.json文件,该文件存储有关项目的信息,如项目中使用的依赖项(Gulp是依赖关系的示例)。
$ npm install gulp --save-dev
这一次,我们正在将Gulp安装到项目中,而不是在全局安装,这就是为什么命令有一些区别。
var gulp = require('gulp');
require语句告诉Node来查看一个名为gulp的包的node_modules文件夹。 找到包后,我们将其内容分配给变量gulp。
gulp.task('task-name', function() {
// Stuff here
});
task-name指的是任务的名称,当您要在Gulp中运行任务时,该名称将被使用。 您还可以通过编写gulp task-name在命令行中运行相同的任务。
gulp.task('hello', function() {
console.log('Hello Zell');
});
我们可以在命令行中使用gulp hello来运行这个任务。
$ gulp hello
命令行将返回一个“Hello Zell!”的日志。
gulp.task('task-name', function () {
return gulp.src('source-files') // Get source files with gulp.src
.pipe(aGulpPlugin()) // Sends it through a gulp plugin
.pipe(gulp.dest('destination')) // Outputs the file in the destination folder
})
正如你所看到的,一个真正的任务需要两个额外的gulp方法 - gulp.src和gulp.dest。
$ npm install gulp-sass --save-dev
我们需要从node_modules文件夹中使用gulp-sass,就像我们用gulp一样,我们可以使用该插件。
var gulp = require('gulp');
// Requires the gulp-sass plugin
var sass = require('gulp-sass');
我们可以用sass()替换aGulpPlugin()来使用gulp-sass。 由于任务是将Sass编译成CSS,所以我们来命名为sass。
gulp.task('sass', function(){
return gulp.src('source-files')
.pipe(sass()) // Using gulp-sass
.pipe(gulp.dest('destination'))
});
我们需要提供sass任务的源文件和任务的目的地,所以让我们在app / scss文件夹中创建一个styles.scss文件。 该文件将被添加到gulp.src中的sass任务。
gulp.task('sass', function(){
return gulp.src('app/scss/styles.scss')
.pipe(sass()) // Converts Sass to CSS with gulp-sass
.pipe(gulp.dest('app/css'))
});
我们将要测试这个sass任务是否按照我们想要的方式工作。 为此,我们可以在styles.scss中添加一个Sass函数。
// styles.scss
.testing {
width: percentage(5/7);
}
如果在命令行中运行gulp sass,现在应该可以看到在app / css中创建了一个styles.css文件。 另外,它的代码中的百分比(5/7)被评估为71.42857%。
/* styles.css */
.testing {
width: 71.42857%;
}
这就是我们知道sass任务的工作原理!
gulp.task('sass', function() {
return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss and children dirs
.pipe(sass())
.pipe(gulp.dest('app/css'))
})
在app / scss中找到的任何其他Sass文件将自动被包含在具有此更改的sass任务中。 如果将print.scss文件添加到项目中,您将看到print.css将在app / css中生成。
// Gulp watch syntax
gulp.watch('files-to-watch', ['tasks', 'to', 'run']);
如果我们想要保存所有Sass文件并运行sass任务,那么我们只需要使用app / scss / ** / * .scss和['tasks',' to','run'] :
// Gulp watch syntax
gulp.watch('app/scss/**/*.scss', ['sass']);
更多的时候,我们会一次看多种类型的文件。 为此,我们可以将多个监视进程分组到一个监视任务中:
gulp.task('watch', function(){
gulp.watch('app/scss/**/*.scss', ['sass']);
// Other watchers
})
如果您现在运行gulp watch命令,您会看到Gulp立即开始
这些脚本位于两个不同的目录中。 将它们与传统的插件(如gulp-concatenate)连接是很困难的。
... HTML Markup, list of script / link tags.
现在让我们在gulpfile中配置gulp-useref插件。 我们必须安装插件,并在gulpfile中引入它。
$ npm install gulp-useref --save-dev
var useref = require('gulp-useref');
设置用户任务类似于我们迄今为止完成的其他任务。 以下是代码:
gulp.task('useref', function(){
return gulp.src('app/*.html')
.pipe(useref())
.pipe(gulp.dest('dist'))
});
现在,如果你运行这个useref任务,Gulp将运行3脚本标签,并将它们连接成dist / js / main.min.js。
$ npm install gulp-uglify --save-dev
// Other requires...
var uglify = require('gulp-uglify');
var gulpIf = require('gulp-if');
gulp.task('useref', function(){
return gulp.src('app/*.html')
.pipe(useref())
// Minifies only if it's a JavaScript file
.pipe(gulpIf('*.js', uglify()))
.pipe(gulp.dest('dist'))
});
$ npm install gulp-cssnano
var cssnano = require('gulp-cssnano');
gulp.task('useref', function(){
return gulp.src('app/*.html')
.pipe(useref())
.pipe(gulpIf('*.js', uglify()))
// Minifies only if it's a CSS file
.pipe(gulpIf('*.css', cssnano()))
.pipe(gulp.dest('dist'))
});
$ npm install gulp-imagemin --save-dev
var imagemin = require('gulp-imagemin');
在gulp-imagemin的帮助下,我们可以缩小png,jpg,gif甚至svg。 让我们为这个优化过程创建一个图像任务。
gulp.task('images', function(){
return gulp.src('app/images/**/*.+(png|jpg|gif|svg)')
.pipe(imagemin())
.pipe(gulp.dest('dist/images'))
});
gulp.task('images', function(){
return gulp.src('app/images/**/*.+(png|jpg|jpeg|gif|svg)')
.pipe(imagemin({
// Setting interlaced to true
interlaced: true
}))
.pipe(gulp.dest('dist/images'))
});
$ npm install gulp-cache --save-dev
var cache = require('gulp-cache');
gulp.task('images', function(){
return gulp.src('app/images/**/*.+(png|jpg|jpeg|gif|svg)')
// Caching images that ran through imagemin
.pipe(cache(imagemin({
interlaced: true
})))
.pipe(gulp.dest('dist/images'))
});
我们几乎完成了优化过程。 还有一个文件夹,我们需要从`app`目录转换成`dist`,这是fonts目录。 现在我们来做
gulp.task('fonts', function() {
return gulp.src('app/fonts/**/*')
.pipe(gulp.dest('dist/fonts'))
})
npm install del --save-dev
var del = require('del');
gulp.task('clean:dist', function() {
return del.sync('dist');
})
gulp.task('watch', ['browserSync', 'sass'], function (){
// ... watchers
})
gulp.task('build', [`clean`, `sass`, `useref`, `images`, `fonts`], function (){
console.log('Building files');
})
$ npm install run-sequence --save-dev
var runSequence = require('run-sequence');
gulp.task('task-name', function(callback) {
runSequence('task-one', 'task-two', 'task-three', callback);
});
gulp.task('task-name', function(callback) {
runSequence('task-one', ['tasks','two','run','in','parallel'], 'task-three', callback);
});
gulp.task('build', function (callback) {
runSequence('clean:dist',
['sass', 'useref', 'images', 'fonts'],
callback
)
})
gulp.task('default', function (callback) {
runSequence(['sass','browserSync', 'watch'],
callback
)
})