项目上线也有一阵子,回头过来看了看从最初的项目配置到开发的过程,总有些感慨,疲软期,正好花点时间,看看最初的配置情况

随着前端的发展,前端工程化慢慢成为业内的主流方式,项目开发的各种构建工具,也出现了不少,如:grunt,gulp,webpack,百度团队的fis3等,在前端的领域都占有自己的一席之地,webpack可以说是后起之秀,加之vuejs,reactjs,angularjs等MVVM框架的出现,配合webpack开发,成为业内常见的一种开发模式

在公司项目开发的时候,选用了gulp+webpack进行配合开发,正好写写总结算是复习吧

gulp传送门 :——> gulp中文网

       ——> gulp官网

webpack官网:——> webpack中文网

          ——> webpack官网

在官网可以学习最基础的基本配置,在网上也可以找到一些大神的分享

gulp的思想是基于流的思想,进行构建工具,类似管道的结构,由于gulp是基于node,所以在开发进行配置之前,首先要安装nodejs才能进行配置

进入到项目的根目录,在根目录下执行命令行命令初始化项目:

npm init

在项目的根目录,我们可以看到会出现一个名为:package.json的文件,是整个项目的项目信息清单

同时在项目根目录下新建一个gulpfile.js文件,开始配置gulp文件

一些gulp的基本语法结构,可以在gulp的api文档中可以查找到 -->gulp中文api文档

其中包括gulp常使用的关键字:src,dest,watch,pipe,task等

准备工作做好之后,开始进行配置:

gulp:   

需要先全局安装gulp

npm install gulp -g

完成之后,在配置项目中安装gulp

npm install gulp --save-dev

需要注意的是,在后面添加 --sav-dev,才能将安装的gulp的信息,添加到package.json清单文件当中

安装完成之后,在配置文件gulpfile.js中引入gulp模块

var gulp = require('gulp');

sass:  

在sass的配置的时候,首先要全局安装基于ruby的sass编译环境,在命令行中要安装:

npm install ruby -g

npm install gulp-sass -g

npm install gulp-sass

安装完成之后,开始配置gulp中sass的配置

var sass = require("gulp-sass");                    //编译sass

// gulp-sass
var sassSrc = [
'./src/styles/style.scss'
];
//新建编译sass文件的gulp任务 gulp.task('sass',function(){
return gulp.src(sassSrc)
.pipe(sass()).pipe( gulp.dest( './klm/styles/' ) );
});

webserver:

基于gulp还可以配置前端自己本地的服务器,在后端没有开发接口出来之前,可以自己配置mock数据

配置代码如下:

//mockApi
//配置mock数据的路径
var mockbase = path.join(__dirname, './mock');
var mockApi = function(res, pathname, paramObj, next) {
switch (pathname) {
case '/api/vote':
var data = fs.readFileSync(path.join(mockbase, 'classify.json'), 'utf-8');
res.setHeader('Content-Type', 'application/json');
res.setHeader('Content-type', 'application/javascript');
res.end(data);
// console.log(typeof data);
// console.log(paramObj.callback);
return ;
default:
}
next();
};
gulp.task('webserver', function () {
gulp.src( './' ) // 服务器目录(./代表根目录)
.pipe(webserver({ // 运行gulp-webserver
livereload:true, // 启用LiveReload
port:1000,
// open: true // 服务器启动时自动打开网页
//middleware为处理数据的中间件
middleware: function(req, res, next) {
var urlObj = url.parse(req.url, true),
method = req.method,
paramObj = urlObj.query;
// mock数据
mockApi(res, urlObj.pathname, paramObj, next);
}
}));
});

webpack: 

gulp还可以结合webpack对js组件进行按需加载,webpack对于js模块化的开发思想,有着很强的支持,和gulp结合可以相互弥补,解决很多相互之间的补足之处,

webpack作为近两年前端项目构建工具的后起之秀,到成为主流,和行业的发展离不开,学习webpack使用到项目当中,能提高开发效率等,webpack官网有着详细的入门教程,

需要学习的同学,可以在上面的官网传送门,到官网去学习

// 要进行自动化的文件
var jsFiles = [
'./src/scripts/entry.js'
];
gulp.task("packjs",function(){
return gulp.src(jsFiles)
.pipe(webpack({
//插件项
// plugins: [
// new HtmlWebpackPlugin({
// title: 'jquery',
// filename: './jquery.js'
// })
// ],
//输入
entry: {
app:jsFiles //文件引入路径
},
output: {
path:"", //输出路径
// publicPath: 'http://mycdn.com/', //cdn
filename: 'bundle.js'
},
// 新添加的module属性
module: {
loaders: [
//.css 文件使用 style-loader 和 css-loader 来处理
{ test: /\.css$/, loader: 'style-loader!css-loader' },
//.js 文件使用 jsx-loader 来编译处理
{ test: /\.js$/, loader: 'jsx-loader?harmony' },
// vue加载器
// {test: /\.vue$/,loader: 'vue'},
//.scss 文件使用 style-loader、css-loader 和 sass-loader 来编译处理
{ test: /\.scss$/, loader: 'style!css!sass?sourceMap'},
//图片文件使用 url-loader来处理,小于8kb的直接转为base64
{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'},
{test: /\.html$/, loader: 'html'}
]
},
//其它解决方案配置
resolve: {
root: 'E:/akari丶/workspace/gulp-webpack', //绝对路径
extensions: ['', '.js', '.json', '.scss'],
alias: {
// AppStore : 'js/stores/AppStores.js',
// ActionType : 'js/actions/ActionType.js',
// AppAction : 'js/actions/AppAction.js'
}
}
}))
//输出路径
.pipe(gulp.dest('./klm/js'));
});

同时,在安装多个模块的时候,我们可以类似这样的安装:

npm install gulp gulp-sass webpack --save-dev

下面这些是我自己自己的配置文件:

var gulp = require('gulp');
var concat = require('gulp-concat'); //文件管道
var stripDebug = require('gulp-strip-debug'); //调试工具
var uglify = require('gulp-uglify'); //丑化
var autoprefix = require('gulp-autoprefixer'); //浏览器内核名称前缀
var minifyCSS = require('gulp-minify-css'); //压缩css
var connect = require('gulp-connect'); //服务器连接
var livereload = require('gulp-livereload'); // 网页自动刷新(服务器控制客户端同步刷新)
var webserver = require('gulp-webserver'); // 本地服务器
var jshint = require('gulp-jshint'); //检测js是否存在错误
var sass = require("gulp-sass"); //编译sass
var named = require('vinyl-named'); //重新命名
var webpack = require('gulp-webpack'); //js模块打包
var cssmin = require('gulp-cssmin'); //压缩css
var imagemin = require("gulp-imagemin"); //图片压缩
var url = require("url"); //node.js url模块
var fs = require("fs"); //node.js 文件模块
var path = require("path"); //node.js 路径模块
var coffee = require('gulp-coffee');
var base64 = require("gulp-base64"); //base64
var gutil = require("gutil"); // //image min
gulp.task('imagemin', function () {
gulp.src('./src/img/*')
.pipe(imagemin())
.pipe(gulp.dest('./klm/images/'));
}); //mockApi
var mockbase = path.join(__dirname, './mock');
var mockApi = function(res, pathname, paramObj, next) {
switch (pathname) {
case '/api/vote':
var data = fs.readFileSync(path.join(mockbase, 'classify.json'), 'utf-8');
res.setHeader('Content-Type', 'application/json');
res.setHeader('Content-type', 'application/javascript');
res.end(data);
// console.log(typeof data);
// console.log(paramObj.callback);
return ;
default:
}
next();
};
gulp.task('webserver', function () {
gulp.src( './' ) // 服务器目录(./代表根目录)
.pipe(webserver({ // 运行gulp-webserver
livereload:true, // 启用LiveReload
port:1000,
// open: true // 服务器启动时自动打开网页
//middleware为处理数据的中间件
middleware: function(req, res, next) {
var urlObj = url.parse(req.url, true),
method = req.method,
paramObj = urlObj.query;
// mock数据
mockApi(res, urlObj.pathname, paramObj, next);
}
}));
}); // gulp-sass
var sassSrc = [
'./src/styles/style.scss'
];
gulp.task('sass',function(){
return gulp.src(sassSrc)
.pipe(autoprefix('last 2 versions'))
.pipe(sass()).pipe( gulp.dest( './klm/styles/' ) );
});
// CSS concat, auto-prefix and minify
var styleSrc = [
'./klm/styles/styles.css'
];
gulp.task('styles', function() {
gulp.src(styleSrc)
.pipe(concat('styles.css'))
.pipe(cssmin())
.pipe(minifyCSS()) //可以使用外部工具进行实现:编辑器插件
.pipe(gulp.dest('./klm/styles/'));
// .pipe(autoprefix('last 2 versions'));
});
// 要进行自动化的文件
var jsFiles = [
'./src/scripts/entry.js'
];
gulp.task("packjs",function(){
return gulp.src(jsFiles)
.pipe(webpack({
//插件项
// plugins: [
// new HtmlWebpackPlugin({
// title: 'jquery',
// filename: './jquery.js'
// })
// ],
//输入
entry: {
app:jsFiles //文件引入路径
},
output: {
path:"", //输出路径
// publicPath: 'http://mycdn.com/', //cdn
filename: 'bundle.js'
},
// 新添加的module属性
module: {
loaders: [
//.css 文件使用 style-loader 和 css-loader 来处理
{ test: /\.css$/, loader: 'style-loader!css-loader' },
//.js 文件使用 jsx-loader 来编译处理
{ test: /\.js$/, loader: 'jsx-loader?harmony' },
// vue加载器
// {test: /\.vue$/,loader: 'vue'},
//.scss 文件使用 style-loader、css-loader 和 sass-loader 来编译处理
{ test: /\.scss$/, loader: 'style!css!sass?sourceMap'},
//图片文件使用 url-loader来处理,小于8kb的直接转为base64
{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'},
{test: /\.html$/, loader: 'html'}
]
},
//其它解决方案配置
resolve: {
root: 'E:/akari丶/workspace/gulp-webpack', //绝对路径
extensions: ['', '.js', '.json', '.scss'],
alias: {
// AppStore : 'js/stores/AppStores.js',
// ActionType : 'js/actions/ActionType.js',
// AppAction : 'js/actions/AppAction.js'
}
}
}))
//输出路径
.pipe(gulp.dest('./klm/js'));
});
// default gulp task
gulp.task('default', ['packjs',"styles",'sass','webserver',"imagemin"], function() {
// watch for scss changes
var watchSass = [
'./src/**/*.scss',
'./src/styles/*.scss'
]; gulp.watch(watchSass, function() {
gulp.run('sass');
});
// watch for CSS changes
gulp.watch('./src/styles/*.css', function() {
gulp.run('styles');
});
// watch for JS changes
var watchJs = [
'./src/scripts/**/*.js',
'./src/scripts/*.js'
];
gulp.watch(watchJs, function() {
// gulp.run('jshint', 'scripts');
gulp.run('packjs');
});
// watch for html changes
// gulp.watch("./src/page/*.html",function(){
// gulp.run("html");
// });
});

值得一提的是,在命令行中编译执行gulp的时候,在命令行直接输入gulp回车,就可以执行gulp配置中default默认执行的gulp任务了,同时,watch里面所监控的文件,在文件发生改动的时候,就是执行相应的任务

之前上传过一份简单的配置在githup里面,有需要的童鞋可以下载看一下    -->gulp基本配置仓库地址

由于在工作中开发的时候,并不需要和后端进行数据对接,只是简单的html模板的编写,所以并不需要很复杂的gulp配置,不足之处,请在评论中指出,请多指教~

不管是gulp也好,webpack也好,不管是什么工具,适合自己的,适合团队的,适合项目的,或许才是最好的,要结合开发现状和团队等等因素,就像我们开发的时候,要考虑技术选型一样重要

基于流的自动化构建工具------gulp (简单配置)的更多相关文章

  1. Gulp:基于流的自动化构建工具

    前言 先说说为什么会使用gulp. 当你沉醉于撸代码之时,是否想过正规的前端代码需要走哪些流程,复杂的不说了,有几点想必你也思考过,比如: 1.代码的压缩合并.图片压缩怎么搞: 2.代码校验,是否规范 ...

  2. 自动化构建工具gulp简单介绍及使用

    一.简介及安装: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快 ...

  3. 前端自动化构建工具Gulp简单入门

    昨天听同事分享了Gulp的一些简单使用,决定自己也试一试. 一.安装 gulp是基于nodejs的,所以要先下载安装node(直接搜node,在官网下载就好了) 1.全局安装gulp npm inst ...

  4. 前端自动化构建工具--Gulp&&Webpack

    前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...

  5. 前端自动化构建工具 gulp 学习笔记 一、

    一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...

  6. 前端自动化构建工具gulp的使用总结

    前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...

  7. 前端自动化构建工具——gulp

    gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...

  8. 前端自动化构建工具 Gulp 使用

    一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...

  9. 自动化构建工具—gulp的简单配置

    把之前用到的gulp总结整理下,有时候说不出来的,就写出来吧,做个笔记,以后也可以慢慢补充 cnpm i --save-dev gulp 把nodejs模块写到package.json配置文件中,当保 ...

随机推荐

  1. spring中bean配置和bean注入

    1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean ...

  2. ctex moderncv版本更新--用latex写一个漂亮的简历

    我的电脑是win7系统32位,ctex版本是v2.9.2.164 full(http://www.ctex.org/CTeXDownload) 一直不太清楚moderncv里面类似\cventry这种 ...

  3. mysql 索引- 笔记

    索引 mysql最常用的索引结构是btree(O(log(n))),但是总有一些情况下我们为了更好的性能希望能使用别的类型的索引.hash就是其中一种选择,例如我们在通过用户名检索用户id的时候,他们 ...

  4. JAVA 多线程编程之一(基础)

    1.原子变量(java.util.concurrent.atomic) 原子状态,变化不会被打断,如 AtomicLong , AtomicInteger 2.内部锁  synchronized 块 ...

  5. 关于win7和xp的屏设置类

    DisplayInfo.h #pragma once enum WinVerDef { WIN_VER_UNKNOWN = -, WIN_VER_95 = , WIN_VER_98, WIN_VER_ ...

  6. (转) 寄存器、RAM、ROM、Flash相关概念区别整理

    转自 http://m.blog.chinaunix.net/uid-30077524-id-5570244.html 文章对这几个东西讲得很清楚,值得收藏. 寄存器 寄存器是中央处理器内的组成部份. ...

  7. windows下面go语言环境搭建

    步骤一:golang下载 下载地址是:http://www.golangtc.com/download 下载完成之后解压缩,放到你的c:/根目录下面.然后配置一下环境变量! 环境变量配置如下: 1.新 ...

  8. IP Failover Setup using Keepalived on CentOS/Redhat 6

    source url:http://tecadmin.net/ip-failover-setup-using-keepalived-on-centos-redhat-6/ Keepalived is ...

  9. 初遇sql server

    今天初始接触sql server 和mysql的语法有一些不同 sql server中使用[] 或双引号来表示数据库.字段名.表名等,而字符串使用单引号来表示 mysql中数据库名,表名,字段名不需要 ...

  10. ActiveMQ学习(二)——MQ的工作原理

    如图所示 首先来看本地通讯的情况,应用程序A和应用程序B运行于同一系统A,它们之间可以借助消息队列技术进行彼此的通讯:应用程序A向队列1发送一条信息,而当应用程序B需要时就可以得到该信息. 其次是远程 ...