gulp结合webpack开启多页面模式,配置如下
首先老规矩哈、全局包安装先
cnpm install webpack -g cnpm install gulp -g cnpm install babel -g //转换Es6 上面的整合在一起安装可以写在一起 如下 cnpm install webpack gulp babel -g
gulpfile.js gulp的配置文件
var gulp = require('gulp'),
browserSync = require('browser-sync').create(),
plugins = require('gulp-load-plugins')(), //自动加载插件的插件,之后就可以不直接引用插件
reload = browserSync.reload,
spritesmith = require('gulp.spritesmith'),//合并雪碧图
babel = require("gulp-babel"), //转编成Es6
plumber = require("gulp-plumber"),//编译时出错不会终止gulp,结合gulp-notify使用可以弹窗提醒
notify = require("gulp-notify"),//为gulp-plumber 报错提供弹窗
webpack = require('webpack-stream'), //引入webpack
named = require('vinyl-named'); //输出时对应webpack的文件名 防止输出hash值
/************先不压缩css,js,开发完在进行压缩,这样便于调试***************/
// 引入webpack
gulp.task('webpack', function(){
return gulp.src('webpackDemo/*js')
.pipe(plumber({errorHandler: notify.onError({title: '小智哥编译出错啦',message: '<%=error%>'})}))
.pipe(named())
.pipe(webpack(require("./webpack.config.js")))
.pipe(gulp.dest('webpackPage/'));
});
// 转译Es6
gulp.task('Es6',function(){
return gulp.src('src/es6/*js')
.pipe(plumber({errorHandler: notify.onError({title: '小智哥编译出错啦',message: '<%=error%>'})})) //有时候失效
.pipe(babel({presets: ['es2015']}))
.pipe(plugins.uglify()) //压缩js
.pipe(gulp.dest('dist/es6/'));
})
// scss编译后的css将注入到浏览器里实现更新
gulp.task('sass', function() {
return gulp.src('src/sass/*.scss')//引入要编译的文件目录
.pipe(plumber({errorHandler: notify.onError({title: '小智哥编译出错啦',message: '<%=error%>'})}))
.pipe(plugins.sass()) //编译sass
.pipe(plugins.cleanCss()) //压缩编译后的css
.pipe(gulp.dest('dist/css/')) //输出目录
.pipe(reload({stream: true})); //browserSync的同步处理状态
});
// 压缩js
gulp.task('compressJs',function(){
return gulp.src('src/js/*js')
.pipe(plumber({errorHandler: notify.onError({title: '小智哥编译出错啦',message: '<%=error%>'})}))
.pipe(plugins.uglify()) //压缩js
.pipe(gulp.dest('dist/js/'));
})
// 公用的css处理
gulp.task('publicCss',function(){
return gulp.src('src/publicCss/*css') //压缩公用的css
.pipe(plugins.cleanCss()) //压缩编译后的css
.pipe(gulp.dest('dist/publicCss/')); //输出目录
})
//压缩img
gulp.task('compressImg', function (){
return gulp.src('src/images/*.{jpg,png}')
// .pipe(plugins.smushit()) //等项目开发完再压缩图片,因为压缩图片很费时间
.pipe(gulp.dest('dist/images/'));
});
// 生成雪碧图
gulp.task('spriteImg', function () {
return gulp.src('src/spriteImg/*.png')//需要合并的图片地址
.pipe(spritesmith({
imgName: 'spriteImg.png',//保存合并后图片的地址
cssName: 'sprite.css',//保存合并后对于css样式的地址
padding:5,//合并时两个图片的间距
algorithm: 'binary-tree',//默认位置,现在市值为左边开始
cssTemplate: function (data) { //cssTemplate 是生成css的模板文件可以是字符串也可以是函数。下面以js函数为例子
var arr=[];
data.sprites.forEach(function (sprite){
arr.push(".icon-"+sprite.name+
"{" +
"background-image: url('"+sprite.escaped_image+"');"+
"background-position: "+sprite.px.offset_x+" "+sprite.px.offset_y+";"+
"width:"+sprite.px.width+";"+
"height:"+sprite.px.height+";"+
"}\n");
});
return arr.join("");
}
}))
.pipe(gulp.dest('dist/spriteImg'));
});
// 静态服务器 + 监听 scss/html 文件
gulp.task('serve', ['sass','Es6','compressJs','webpack','publicCss','compressImg','spriteImg'], function() {
browserSync.init({
server: {
baseDir: "./", //默认的文件打开入口
// index:'banner.html' //自定义的打开入口
},
open:false,//停止自动打开浏览器
port: 9000, //修改端口
ui:{port: 9001}// 后台ui的设置,里面可以设置页面是否联动,默认是联动的
});
// 监控webpack
gulp.watch('webpackDemo/*.js', ['webpack']); //执行webpack
gulp.watch('webpackPage/*.js').on('change',reload); //执行webpack后监控它执行的目标文件,有变化则刷新页面
// 雪碧图
gulp.watch('src/spriteImg/*.png', ['spriteImg']); //执行sprite
gulp.watch('dist/spriteImg').on('change',reload); //执行sprite后监控它执行的目标文件,有变化则重新生成雪碧图
// 监听Es6
gulp.watch('src/es6/*.js', ['Es6']); //执行Es6
gulp.watch('dist/es6/*.js').on('change',reload); //执行Es6后监控它执行的目标文件,有变化则刷新页面
// 监听根目录html
gulp.watch("./*.html").on('change',reload); //监控html 只能在根目录
// 监听sass
gulp.watch('src/sass/*.scss',['sass']); //开启了browserSync监控就执行sass
gulp.watch("dist/css/*.css").on('change',reload); //执行sass后监控它生成的目标文件,有变化就刷新页面
//公用的css
gulp.watch('src/publicCss/*.css',['publicCss']);
gulp.watch('dist/publicCss/*.css').on('change',reload);
//监听js
gulp.watch('src/js/*js', ['compressJs']); //开启了browserSync监控就执行 compressJs
gulp.watch('dist/js/*.js').on('change',reload); //监控引入的js当js改变页面也同时进行
// 执行压缩img
gulp.watch('src/images/*.{jpg,png}',['compressImg']); //开启了browserSync监控就执行 compressImg
gulp.watch('dist/images/*.{jpg,png}').on('change',reload);
});
gulp.task('default', ['serve']); //gulp 默认执行同步指令
webpack.config.js webpack的配置文件
var webpack = require('webpack');
module.exports={
module:{
loaders:[
{ test:/\.css$/,//匹配.css文件
loader:'style-loader!css-loader'//用style-loader去解释css
}
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin({compress: {warnings: false} }) //自动输出压缩后的js,css
]
}
下面是package.json的依赖包列表
{
"scripts": {
"xz": "gulp"
},
"devDependencies": {
"babel-preset-es2015": "^6.24.1",
"browser-sync": "^2.18.12",
"css-loader": "^0.28.4",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2",
"gulp-clean-css": "^3.4.2",
"gulp-load-plugins": "^1.5.0",
"gulp-notify": "^3.0.0",
"gulp-plumber": "^1.1.0",
"gulp-sass": "^2.3.2",
"gulp-smushit": "^1.2.0",
"gulp-uglify": "^3.0.0",
"gulp.spritesmith": "^6.5.1",
"style-loader": "^0.18.2",
"uglify-js": "^3.0.20",
"vinyl-named": "^1.1.0",
"webpack": "^3.0.0",
"webpack-stream": "^3.2.0"
}
}
gulp结合webpack开启多页面模式,配置如下的更多相关文章
- gulp + webpack 构建多页面前端项目
修改增加了demo地址 gulp-webpack-demo 之前在使用gulp和webpack对项目进行构建的时候遇到了一些问题,最终算是搭建了一套比较完整的解决方案,接下来这篇文章以一个实际项目为例 ...
- Gulp和Webpack对比
在现在的前端开发中,前后端分离.模块化开发.版本控制.文件合并与压缩.mock数据等等一些原本后端的思想开始逐渐渗透到“大前端”的开发中.前端开发过程越来越繁琐,当今越来越多的网站已经从网页模式进化到 ...
- Webpack + Vue 多页面项目升级 Webpack 4 以及打包优化
0. 前言 早在 2016 年我就发布过一篇关于在多页面下使用 Webpack + Vue 的配置的文章,当时也是我在做自己一个个人项目时遇到的配置问题,想到别人也可能遇到跟我同样的问题,就把配置的思 ...
- webpack 构建多页面应用
如何使用webpack构建多页面应用,这是一个我一直在想和解决的问题.网上也给出了很多的例子,很多想法.猛一看,觉得有那么点儿意思,但仔细看也就那样. 使用webpack这个构建工具,可以使我们少考虑 ...
- webpack从单页面到多页面
前言 从上次更完webpack从什么都不懂到入门之后,好久没有更新过文章了,可能是因为自己懒了吧.今天看了下自己的索引量少了一半o(╥﹏╥)o,发现事态严重,赶紧更新一篇23333 也是因为最近踩了一 ...
- 使用gulp插件来自动刷新页面。
http://itakeo.com/blog/2016/05/19/gulpreload/?none=123 使用gulp插件来自动刷新页面.再也不用修改一次,按一下F5了. 首选通过npm inst ...
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- Gulp和webpack的区别,是一种工具吗?
疑问:gulp和webpack 什么关系,是一种东西吗?可以只用gulp,不用webpack吗 或者反过来? 它们的区别和概念 ------------------------------------ ...
- webpack开发与生产环境配置
前言 作者去年就开始使用webpack, 最早的接触就来自于vue-cli.那个时候工作重点主要也是 vue 的使用,对webpack的配置是知之甚少,期间有问题也是询问大牛 @吕大豹.顺便说一句,对 ...
随机推荐
- KVM_webvirtmgr
一.webvirtmgr安装前说明: 1:操作做系统:centos7.2_x86_64 2:安装参考出处1:https://github.com/retspen/webvirtmgr/wiki/Ins ...
- 20155228 2016-2017-2 《Java程序设计》第6周学习总结
20155228 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 输入与输出 在Java中输入串流代表对象为java.io.InputStream实例,输出串 ...
- 举例说明Unicode 和UTF-8之间的转换
1)写这篇博客的原因 首先我要感谢这篇博客,卡了很久,看完下面这篇博客终于明白Unicode怎么转换成UTF-8了. https://blog.csdn.net/qq_32252957/article ...
- Java解析Json字符串--复杂对象
{ "name": "三班", "students": [ { "age": 25, "gender" ...
- C#中对Web.Config、App.Config字符串加密与解密的方法
我们平常的项目里面的配置文件通常都是明文形式的存在,现在就是为了项目安全性增强,同时又显得高逼格点, 我们可以采用加密的方式,而我们C#很强大,因为他内置的一些指令方式,很方便而且使用起来还不用解密, ...
- ubuntu16.04 无法连接wifi和校园宽带问题的解决办法
我遇到的问题是在ubuntu16.04系统下无法进行上海大学校园宽带连接或者校园wifi连接,我一个一个来解决这两个问题. 1.无法连接校园宽带的问题:输入校园账号和密码后,宽带始终连接不上.(上海大 ...
- Java学习路线教程之JDBC基本操作
为了帮助大家熟练应用JDBC编程,接下来,在本节将通过一个综合案例来讲解JDBC的基本操作,确保大家能够深刻理解JDBC的增.删.改.查,灵活利用JDBC完成对数据库的各项操作. 1. 创建一个Jav ...
- 事务 c#
事务->:事务是恢复和并发控制的基本单位 ->事务具有四个特性:原子性.隔离性.一致性.持久性.这四个特性通常称为ACID Begin transaction/tran --开始事务 ...
- usb帧格式
源: usb帧格式
- 2016 icpc ECfinal && codeforcesgym101194
一不小心惨变旅游队,不过上海的风景不错 顺带找其他队交流一下集训经验...或许可以成为选拔和集训16级的依据 A.直接模3就可以了,2^(3*n)%7=1 C.Mr. Panda and Strips ...