使用 gulp 搭建前端环境之 盛繁项目实践总结
Posted Kolf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 gulp 搭建前端环境之 盛繁项目实践总结相关的知识,希望对你有一定的参考价值。
简介
主要介绍 使用gulp搭建的 盛繁项目的前端自动化开发环境。
这只是篇06年一个小的工作项目总结
开始一个新项目
传统做法
创建文件夹,命名为新项目balbala
新建一个index.html,从过去的一个文件中把用得到的html代码拷贝进来,再新 建css、js、images文件夹
新建style.css,base.js等需要的样式表文件和js以及一堆乱七八糟的文件。
切图、写html,写css、写js
不断F5刷新、F5刷新:浏览器里测试
差不多完成了,开一个压缩工具(线下的或者在线的),压缩下js和css文件,新建一个min.style.css和min.v.js,修改html中的文件路径
现在
npm init
git init
bower init
…
gulp install && bower install
gulp serve
实现了什么功能
编译 sass
编译 es6
合并优化压缩 css
校验压缩 js
优化图片
PC、平板、手机等设备同步测试
实时自动刷新…
安装、管理第三方包,解决它们之间的依赖
…
怎么使用
准备工作
安装nodejs
安装gulp
安装ruby
安装git
使用
安装 npm install && bower install
开发 gulp serve
发布 gulp build
浏览器打开 http://localhost:9000/
目录结构
app // 开发目录
fonts
images
scripts
styles
bower-components // 共公组件
dist // 项目发布目录
fonts
images
scripts
styles
.bowerrc // bower 配置文件
.gitignore // git 提交忽略文件
package.json // 项目配置文件
gulpfile.js // gulp配置文件
README.md //项目说明文件
技术选型
gulp 构建工具
browsersync 浏览器同步测试工具
sass css开发工具
bower 包管理工具
为什么使用Gulp
简洁 代码优于配置
高效 基于nodejs中的流的构建任务,更快、更为纯粹
易学 核心API只是4个,src、dest、task、watch
最后
附上gulpfile.js文件,以供参考:
var gulp = require('gulp'),
gulpLoadPlugins = require('gulp'),
browserSync = require('gulp'),
del = require('gulp'),
stream = require('wiredep').stream,
wiredep = require('wiredep').wiredep,
$ = gulpLoadPlugins(),
reload = browserSync.reload;
gulp.task('styles', function () {
return gulp.src('app/styles/*.scss')
.pipe($.plumber())
.pipe($.sourcemaps.init())
.pipe($.sass.sync({
outputStyle: 'expanded',
precision: 10,
includePaths: ['.']
}).on('error', $.sass.logError))
.pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']}))
.pipe($.sourcemaps.write())
.pipe(gulp.dest('.tmp/styles'))
.pipe(reload({stream: true}));
})
gulp.task('scripts', function () {
return gulp.src('app/scripts/**/*.js')
.pipe($.plumber())
.pipe($.sourcemaps.init())
.pipe($.babel())
.pipe($.sourcemaps.write('.'))
.pipe(gulp.dest('.tmp/scripts'))
.pipe(reload({stream: true}));
});
function lint(files, options) {
return function () {
return gulp.src(files)
.pipe(reload({stream: true, once: true}))
.pipe($.eslint(options))
.pipe($.eslint.format())
.pipe($.if(!browserSync.active, $.eslint.failAfterError()));
};
}
const testLintOptions = {
env: {
mocha: true
}
};
gulp.task('lint', lint('app/scripts/**/*.js'));
gulp.task('lint:test', lint('test/spec/**/*.js', testLintOptions));
gulp.task('html', ['styles', 'scripts'], function () {
return gulp.src('app/*.html')
.pipe($.useref({searchPath: ['.tmp', 'app', '.']}))
.pipe($.if('*.js', $.uglify()))
.pipe($.if('*.css', $.cssnano()))
.pipe($.if('*.html', $.htmlmin({collapseWhitespace: true})))
.pipe(gulp.dest('dist'));
});
gulp.task('images', function () {
return gulp.src('app/images/**/*')
.pipe($.cache($.imagemin({
progressive: true,
interlaced: true,
// don't remove IDs from SVGs, they are often used
// as hooks for embedding and styling
svgoPlugins: [{cleanupIDs: false}]
})))
.pipe(gulp.dest('dist/images'));
});
gulp.task('fonts', function () {
return gulp.src(require('main-bower-files')('**/*.{eot,svg,ttf,woff,woff2}', function (err) {
})
.concat('app/fonts/**/*'))
.pipe(gulp.dest('.tmp/fonts'))
.pipe(gulp.dest('dist/fonts'));
});
gulp.task('extras', function () {
return gulp.src([
'app/*.*',
'!app/*.html'
], {
dot: true
}).pipe(gulp.dest('dist'));
});
gulp.task('clean', del.bind(null, ['.tmp', 'dist']));
gulp.task('serve', ['styles', 'scripts', 'fonts'], function () {
browserSync({
notify: false,
port: 9000,
server: {
baseDir: ['.tmp', 'app'],
routes: {
'/bower_components': 'bower_components'
}
}
});
gulp.watch([
'app/*.html',
'app/images/**/*',
'.tmp/fonts/**/*'
]).on('change', reload);
gulp.watch('app/styles/**/*.scss', ['styles']);
gulp.watch('app/scripts/**/*.js', ['scripts']);
gulp.watch('app/fonts/**/*', ['fonts']);
gulp.watch('bower.json', ['wiredep', 'fonts']);
});
gulp.task('serve:dist', function () {
browserSync({
notify: false,
port: 9000,
server: {
baseDir: ['dist']
}
});
});
gulp.task('serve:test', ['scripts'], function () {
browserSync({
notify: false,
port: 9000,
ui: false,
server: {
baseDir: 'test',
routes: {
'/scripts': '.tmp/scripts',
'/bower_components': 'bower_components'
}
}
});
gulp.watch('app/scripts/**/*.js', ['scripts']);
gulp.watch('test/spec/**/*.js').on('change', reload);
gulp.watch('test/spec/**/*.js', ['lint:test']);
});
// inject bower components
gulp.task('wiredep', function () {
gulp.src('app/styles/*.scss')
.pipe(wiredep({
ignorePath: /^(\.\.\/)+/
}))
.pipe(gulp.dest('app/styles'));
gulp.src('app/*.html')
.pipe(wiredep({
ignorePath: /^(\.\.\/)*\.\./
}))
.pipe(gulp.dest('app'));
});
gulp.task('build', ['html', 'images', 'fonts', 'extras'], function () {
return gulp.src('dist/**/*').pipe($.size({title: 'build', gzip: true}));
});
gulp.task('default', ['clean'], function() {
gulp.start('build');
});
以上是关于使用 gulp 搭建前端环境之 盛繁项目实践总结的主要内容,如果未能解决你的问题,请参考以下文章