前端构建工具的用法—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里面可以方便做多种环境下的配置命令。

  

以上就是这几种构建工具的基本使用方法,希望大家工作过程中,尽量使用,去体会它在提高效率的同时带给我们编程的快乐感觉!

 

转载于:https://www.cnblogs.com/souyidai/p/util_1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb命令刷机vivox20_vivo手机变砖 刷机手机端口连上显示adb

展开全部vivo的刷机解账户锁方法如下 有了这个方法 以后不管手机出现啥毛病 只要是软件系统引32313133353236313431303231363533e4b893e5b19e31333365643535起的故障 都能一招搞定提示:刷机有风险 刷机需谨慎 对于刷机造成的一切后果均与本处无关 而避免风险的最好…

SQLServer常用的聚合函数笔记

今天给大家分享一下SQLServer常用的聚合函数,希望对初学者有所帮助!1、COUNT合计函数:返回查询记录(行)数。格式:COUNT([ALL|DISTINCT] [表达式|*])参数说明:ALL:默认值,指对查询所有…

android studio 工程demo例子,Android Studio 实现跑马灯微项目实例

**闲来无事,自己做了很多小的Demo,现在分享一个小的跑马灯项目实例,有机会把2048小游戏的Demo也发了。不过那个的算法稍微有点儿复杂,需要整理。首先在创建一个MarqueeTextViewDemo项目在res-layout-activity_main.xml中编写出相应…

SQLServer常用的配置函数笔记

今天给大家分享一下SQLServer常用的配置函数知识,希望对初学者能有所帮助!1、DATEFIRST Datefirst返回值tinyint说明:datefirst指一周中的第一天,英语中第一天为星期日示例:SELECT DATEFIRST AS 1st Day, DATEPART(dw, GETDATE())…

localdatetime 默认时间_datetime-local设置初始值

//全局变量var format "";//构造符合datetime-local格式的当前日期function getFormat(){format "";var nTime new Date();format nTime.getFullYear()"-";format (nTime.getMonth()1)<10?"0"(nTime.getMonth()1):(nTime.get…

android音乐播放器完整教程,android实现简单音乐播放器

本文实例为大家分享了android音乐播放器的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下话不多说先上效果前言写这个音乐播放器实在是迫不得已。因为我们Andoird课程要求写一个音乐播放器。所以就有了此项目。这个项目比较简单&#xff0c;实现了最基本的音乐播放功…

编译原理

编译原理是计算机专业的一门重要专业课&#xff0c;旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 这门课程是一门真正与代码做斗争的课程&#xff0c;对于一个有至于追…

JDK1.8 JVM元数据区取代了永久代,元数据空间并不在虚拟机中,而是使用本地内存

JDK1.8 JVM运行时内存数据区域划分。1.8同1.7比&#xff0c;最大的差别就是&#xff1a;元数据区取代了永久代。元空间的本质和永久代类似&#xff0c;都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于&#xff1a;元数据空间并不在虚拟机中&#xff0c;而是…

SQLServer常用的字符串函数梳理

今天给大家分享一下SQLServer常用的字符串函数知识笔记&#xff0c;希望对大家能有所帮助&#xff01;1、ASCII(字符串表达式)作用&#xff1a;返回表达式最左侧字符串的ASCII代码值。示例&#xff1a;SELECT ASCII(ABC),ASCII(A) --返回结果都是65 计算的是第一个字符串的ASCI…

tchar linux,错误:Error:未定义标识符_TCHAR

svn sc create 命令行创建服务自启动今天重装了系统,Subversion服务也得重装.照例输入代码: sc create svnserve binpath"d:\PortableApps\svn\svnserve.exe - ...Spring&lowbar;Springmvc&lowbar;mybatis一般配置web.xml配置 <?xml version"1.0" e…

Mac 系统引导过程概述 BootCamp 的秘密

http://bbs.feng.com/read-htm-tid-6890655.html转载于:https://www.cnblogs.com/zengkefu/p/5857710.html

开封机器人餐厅_百合汇主题酒店——开封首家机器人服务员餐厅

【中原经济网开封新闻讯】 (河南经济报记者 张长剑 李海) 年底岁末&#xff0c;服务行业的用工荒逐渐凸显&#xff0c;不过&#xff0c;开封百合汇主题酒店的老板却不为此发愁&#xff0c;因为&#xff0c;这家店刚刚引进了两台高大上的机器人服务员。2月3日&#xff0c;记者在…

SQLServer常见的数学函数梳理

今天给大家分享一下SQLServer常见的数学函数相关的知识笔记。1.绝对值函数ABS(x)和返回圆周率的函数PI()ABS(x)返回x的绝对值,PI()返回圆周率的值用法&#xff1a;select ABS(5),ABS(-10.6),ABS(-99),PI();输出结果&#xff1a;5 10.6 99 3.141592653589792.平方根函数SQRT(x)S…

android 属性动画变大,Android PropertyAnimation 属性动画(一)初探

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;前言相对于静态的页面&#xff0c;动画往往能更直观地表达所需的信息&#xff0c;在UI开发过程中起着相当大的作用。Android为我们提供了一系列实现动画效果的方法…

android stadio svn 使用技巧

有时候有这样的需求&#xff1a; 就是我一次要改很多的需求&#xff0c;然后代码要分开提交&#xff0c;那么怎么办&#xff1f; 提交的时候一个一个的点开看&#xff1f; 比如&#xff1a;这次改的还没有提上去&#xff0c;又来了一个需求&#xff0c;怎么区分呢 新建一个ac…

用扫地机器人楼下吵吗_扫地机器人到底好不好用?说说我两年的使用体验!

原标题&#xff1a;扫地机器人到底好不好用&#xff1f;说说我两年的使用体验&#xff01;说到扫地机器人绝大部分人都非常陌生&#xff0c;因为我国目前还处在扫地机器人发展初期阶段&#xff0c;连一线城市普及率都只有5%&#xff0c;所以非常理解大家对新事物的恐惧和排斥&a…

SQLServer常用的日期和时间函数梳理

今天给大家分享一下SQLServer常用的日期和时间函数知识笔记&#xff0c;希望对大家能有所帮助&#xff01;1、DATEADD(datepart,number,date)作用&#xff1a;返回给指定日期加一个时间间隔后新的datetime值参数说明&#xff1a;datepart&#xff1a;指定为日期的哪部分增加数值…