前端构建工具的用法—grunt、gulp、browserify、webpack
随着前端项目的飞速发展,项目越来越大、文件越来越多,前端工程化的工具也越来越多。下面介绍目前最流行的四种构建工具——grunt、gulp、browserify、webpack
所有的构建工具都是基于NodeJs和Npm,所以使用下面任何工具都需要安装Node
一、grunt
1、需要两个文件:
Gruntfile.js —— grunt执行任务文件:描述项目会执行的任务。
package.json —— 工程描述文件:描述项目基本信息,和项目中使用到的npm包信息,方便其他人了解项目信息、跑起来该项目。
2、安装grunt-cli命令环境和项目里面用到的grunt包
npm install grunt-cli -g
mac下面需要sudo:sudo npm install grunt-cli -g
npm install grunt --save-dev // --save-dev:表示该npm包在dev开发环境时需要用到,加这个会在package.json中自动增加相关包描述。
3、安装grunt任务相关的npm包
npm install xxx --save-dev
4、Gruntfile.js任务写法
module.exports = function(grunt){
// 加载需要的任务包
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-uglify');
// 初始化任务
grunt.initConfig({
"less": { //包名
"a":{ //任务名
"src": "a.less",
"dest": "index.css"
},
"b":{
"src": "b.less",
"dest": "main.css"
}
},
"uglify": {
"a": {
"src": "aa.js",
"dest": "index.js"
}
}
});
// 注册多任务
grunt.registerTask('abc', ['less:a', 'uglify']);
}
总结:最早开始自动化构建前端项目的工具之一,极大提高前端开发过程中的开发效率、更加方便工程化的部署到线上以及优化了线上前端代码。
二、gulp
1、需要两个文件:
gulpfile.js —— gulp执行任务文件:描述项目会执行的任务。
package.json —— 工程描述文件:描述项目基本信息,和项目中使用到的npm包信息,方便其他人了解项目信息、跑起来该项目。
2、安装gulp-cli命令环境和项目里面用到的gulp包
npm install gulp-cli -g
mac下面安装全局包都需要sudo一下:sudo npm install gulp-cli -g
npm install gulp --save-dev // --save-dev:表示该npm包在dev开发环境时需要用到,加这个会在package.json中自动增加相关包描述。
3、安装gulp任务相关的npm包
npm install xxx --save-dev
4、gulpfile.js任务写法
// 引用需要的包
const gulp = require('gulp');
const less = require('gulp-less');
const uglify = require('gulp-uglify'); gulp.task('less:a', function(){
gulp.src('a.less').pipe(less()).pipe(gulp.dest('css'));
}); gulp.task('uglify:a', function(){
gulp.src('a.js').pipe(uglify()).pipe(gulp.dest('js'));
});
// 注册多任务,默认任务用 default
gulp.task('abc', ['less:a', 'uglify:a']);
优点:1、执行任务比grunt快(原因:读取二进制流通过pipe执行)2、写法上更优雅、简洁、清晰
三、browserify
使用目的:
1、用作模块化(跟requireJs、seaJs类似作用)
2、构建化构建打包工作
3、可以使用node中的一些内置模块如querystring、path、util等,提高工作效率
使用方法:
1、安装browserify-cli命令环境和项目中用到的browserify包
npm install -g browserify-cli
npm install browserify --save-dev
2、项目中自己编写的模块,通过 modules.exports 或 export 抛出去,如:
// sum.js
module.exports = function (sum1, sum2){
return sum1+sum2;
}
引用时通过 require('./sum') 来使用,如:
// index.js
var sum = require('./sum.js');
var querystring = require('querystring'); var parse = "a=1&b=2&c=2";
console.log(querystring.parse(parse)); console.log(sum(11, 12));
注意:使用node内置模块或者通过npm下载的包,直接 require('querystring') 即可。但如果是自己编写的模块,需要加 ./ ,require('./sum')
3、编译
// 通过browserify命令,将index.js编译成bundle.js
browserify index.js -o bundle.js
4、如果需要 项目自动编译,需要安装 全局watchify这个包
npm install -g watchify
执行时,就不用browserify命令,用watchify命令
watchify index.js -o bundle.js
四、webpack
webpack是近来最火的工程化构建工具,为什么这么火?是因为在webpack中 “一切皆模块” !
最大的优点也就在这:js、css、less、sass、json、coffer、image、...... 各种类型文件都可以通过loader来处理打包。
1、安装webpack-cli命令环境和项目用刀到的webpack包
npm install -g webpack-cli
npm install webpack --save-dev
2、跟browserify第二步一样,module.export抛出自定义模块,require来模块化引用
3、编译打包
// 跟browserify区别是 没有 -o
webpack index.js bundle.js
// -w:监视 -p:压缩代码
webpack -w -p index.js bundle.js
4、打包less、sass、image等
1)安装使用的loader的安装包
// 同时安装多个包,可以用 空格 分开
npm install less-loader css-loader style-loader --save-dev
2)引用less包等
// index.js
require('style-loader!css-loader!less-loader!./less/index.less');
// 或者省去loader简写成:
require('style!css!less!./less/index.less');
如果每个文件的loader都这么写的话,太麻烦,可以在webpack的配置文件作配置
5、配置文件名:webpack.config.js
// webpack.config.js
module.exports = {
module: {
loaders: [
// less结尾的文件,使用style、css、less三种loader处理
// 用!连接loader
{ test: /\.less$/, loader: 'style!css!less'}
]
}
};
此时的index.js入口文件引用index.less
require('./less/index.less');
6、配置文件可以配置入口、输出等
module.exports = {
entry: "./index.js", // 入口文件
output: {
filename: 'bundle.js' // 出口文件名
},
module: {
loaders: [
{ test: /\.less$/, loader: 'style!css!less'}
]
}
};
7、如果我们要修改完文件后,自动编译、同时刷新浏览器怎么做?
1)安装webpack-dev-server 全局包 和webpack-dev-server 项目包
npm install webpack-dev-server -g
npm install webpack-dev-server --save-dev
2)此时需要使用webpack中另外一个强大的功能——插件,plugins,在配置文件中配置
// 引用webpack
var webpack = require('webpack'); module.exports = {
entry: "./index.js", // 入口文件
output: {
filename: 'bundle.js' // 出口文件名
},
plugins: [
// 自动刷新浏览器用到的插件
new webpack.DefinePlugin({
'process.env.NODE.ENV':"development"
})
],
module: {
loaders: [
{ test: /\.less$/, loader: 'style!css!less'}
]
}
};
3)执行编译
// --inline:表示实时编译
webpack-dev-server --inline
8、如果想把命令写的更简单,可以在package.json的script属性中配置
1)如何生成package.json文件
// init 命令让你一步步选择、填写安装工程文件的描述
npm init // 或者一步到位
npm init --yes
2)配置script属性
{
"name": "webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"css-loader": "^0.25.0",
"less": "^2.7.1",
"less-loader": "^2.2.3",
"style-loader": "^0.13.1",
"webpack": "^1.13.2"
},
"devDependencies": {
"webpack-dev-server": "^1.15.1"
},
"scripts": {
"dev": "webpack-dev-server --inline"
},
"keywords": [],
"author": "",
"license": "ISC"
}
此时,执行变成
npm run dev
是不是更简单了,而且在script里面可以方便做多种环境下的配置命令。
以上就是这几种构建工具的基本使用方法,希望大家工作过程中,尽量使用,去体会它在提高效率的同时带给我们编程的快乐感觉!
前端构建工具的用法—grunt、gulp、browserify、webpack的更多相关文章
- 流行得前端构建工具比较,以及gulp配置
前端现在三足鼎立的构建工具(不算比较老的ant,yeoman),非fis,grunt,gulp莫属了. fis用起来最简单,我打算自己得项目中使用一下fis. 先说一下gulp安装吧. 第一步:安装n ...
- Grunt Gulp Browserify Webpack
Grunt 是相比后面几个更早的项目,他依赖于各种插件的配置.这是一个很好的解决方案,但是请相信我,你不会想看到一个 300 行的 Gruntfile Gulp 提供了一个不一样的解决方案,而不是依赖 ...
- Gulp vs Grunt 前端构建工具对比
Gulp vs Grunt 前端工程的构建工具对比 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Jav ...
- Gulp, 比Grunt更好用的前端构建工具
Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp相对于Grunt的优势 gulp.js 的作者 ...
- 前端构建工具gulp介绍
2016年3月3日 10:46:08 晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...
- Gulp前端构建工具
Gulp, 比Grunt更好用的前端构建工具 Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp ...
- 前端构建工具Gulp的学习和使用
前几天刚鼓捣了Grunt的使用,结果文档还没捂热,老大说我们还是用gulp吧,搞得我又得来整gulp,眼泪流成河了,真是不晓得底层人民的辛苦啊.不过经过对gulp的学习,发现很好用,比grunt舒服! ...
- 前端读者 | 前端构建工具Gulp
@羯瑞 整理 前言 前端工具现在层出不穷,网上搜下一大片,就看你怎么去使用了,基于项目看用什么样的构建工具.有的工具提供的功能还是非常强大的. FIS.百度团队的产品.现在百度的多个产品中使用.面向前 ...
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
随机推荐
- ajax的循环
一.业务需求 在开发中,当一个列表页面加载完成后,我需要根据列表每一项的id去服务器端获取对应的数据然后再把获取的数据赋给当前id对应的标签. 例如如下表格: 我有一系列的商品编号,我需要根据商品编号 ...
- 实体类和DataTable的转换
引子 最近在项目中在数据库查询的时间,总是要用到数据表到实体类对象列表的转化,自己封装了一个转换的方法,用起来还比较方便,记下来,以后可以重复使用,原理就主要是利用反射,当然有更好的ORM框架可以实现 ...
- C#之发送邮件【模板】+【封装】ZJ版
PS: 为了弥补上篇博客的不足,正好周六闲着没事.所以进行优化下,来个终结版 功能实现:模板发送+自指定邮箱发送+解耦 总体预览如下: 各代码如下:(代码略多,所以都折叠了) 前台; @{ Layou ...
- mac上安装ubuntu双系统
mac和ubuntu双系统 mac系统安装ubuntu双系统的方法, mac系统要安装ubuntu, 必须使用u盘作为启动盘, 在mac启动的时候引导mac安装ubuntu, 下面为详细的安装方法: ...
- 输入流和字符串互转,InputStream2String,String2InputStream
输入流转字符串 public static String InputStream2String(InputStream in) { InputStreamReader reader = null; t ...
- C#调用百度高精度IP定位API通过IP获取地址
API首页:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 1.申请百度账号,创建应用,获取密钥(AK) http://lbsyu ...
- iframe用js设定自定义高度
JS代码 function SetWinHeight(obj){ var win=obj; if (document.getElementById){ if (win && !wind ...
- oracle--逻辑对象--bai
1 序列 sequence oracle特有.实现"自增"或"自减"的逻辑对象. 2 同义词 synonym 对表取别名,该别名被永久存储. 比视图更省资源. ...
- MySQL 代码开发注意事项----开发高性能的sql
序言 一个服务或者一个程序,由 程序+数据组成.在数据这块,计算机中IO是比CPU要慢得多,为了减少IO,减少CPU运算.我们第一时间会想到索引,但索引为啥会提高效率,因为可以减少IO,在查询的时候不 ...
- Python Day18
WEB框架 MVC Model View Controller 数据库 模板文件 业务处理 MTV Model Template View 数据库 模板文件 业务处理 Web请求流程 -- 原始Web ...