WebPack基础知识详解


Posted in Javascript onJanuary 16, 2017

1、什么是Webpack

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。

2、为什要使用WebPack

今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包。为了简化开发的复杂度,前端社区涌现出了很多好的实践方法

a:模块化,让我们可以把复杂的程序细化为小的文件;

b:类似于TypeScript这种在JavaScript基础上拓展的开发语言:使我们能够实现目前版本的JavaScript不能直接使用的特性,并且之后还能能装换为JavaScript文件使浏览器可以识别;

c:scss,less等CSS预处理器

.........

这些改进确实大大的提高了我们的开发效率,但是利用它们开发的文件往往需要进行额外的处理才能让浏览器识别,而手动处理又是非常反锁的,这就为WebPack类的工具的出现提供了需求。

3、WebPack和Grunt以及Gulp相比有什么特性

其实Webpack和另外两个并没有太多的可比性,Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack可以替代Gulp/Grunt类的工具。

Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,这个工具之后可以自动替你完成这些任务。

Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。

优点:模块化

在webpack看来一切都是模块!这就是它不可不说的优点,包括你的JavaScript代码,也包括CSS和fonts以及图片等等等,只有通过合适的loaders,它们都可以被当做模块被处理。

1、CSS

webpack提供两个工具处理样式表,css-loader 和 style-loader,二者处理的任务不同,css-loader使你能够使用类似@import 和 url(...)的方法实现 require()的功能,style-loader将所有的计算后的样式加入页面中,二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中。

需要分别安装:npm install --save-dev style-loader css-loader

WebPack基础知识详解

2、CSS modules

在过去的一些年里,JavaScript通过一些新的语言特性,更好的工具以及更好的实践方法(比如说模块化)发展得非常迅速。模块使得开发者把复杂的代码转化为小的,干净的,依赖声明明确的单元,且基于优化工具,依赖管理和加载管理可以自动完成。

不过前端的另外一部分,CSS发展就相对慢一些,大多的样式表却依旧是巨大且充满了全局类名,这使得维护和修改都非常困难和复杂。

最近有一个叫做 CSS modules 的技术就意在把JS的模块化思想带入CSS中来,通过CSS模块,所有的类名,动画名默认都只作用于当前模块。Webpack从一开始就对CSS模块化提供了支持,在CSS loader中进行配置后,你所需要做的一切就是把”modules“传递都所需要的地方,然后就可以直接把CSS的类名传递到组件的代码中,且这样做只对当前组件有效,不必担心在不同的模块中具有相同的类名可能会造成的问题。具体的代码如下

WebPack基础知识详解

这样相同的类名也不会互相污染

3、CSS预编译

Sass 和 Less之类的预处理器是对原生CSS的拓展,它们允许你使用类似于variables, nesting, mixins, inheritance等不存在于CSS中的特性来写CSS,CSS预处理器可以这些特殊类型的语句转化为浏览器可识别的CSS语句,

你现在可能都已经熟悉了,在webpack里使用相关loaders进行配置就可以使用了,以下是常用的CSS 处理loaders

a:less-loader

b:sass-loader

c:stylus-loader

还有一个CSS处理平台-PostCSS,可以让你用CSS事先更多功能,比如如何使用PostCSS,我们使用PostCSS来为CSS代码自动添加适应不同浏览器的CSS前缀。

首先安装postcss-loader 和 autoprefixer(自动添加前缀的插件)

npm install --save-dev postcss-loader autoprefixer

并在webpack配置文件中进行设置,只需要新建一个postcss关键字,并在里面申明依赖的插件,如下,现在你写的css会自动根据Can i use里的数据添加不同前缀了。

WebPack基础知识详解

二、webpack-pulgins

插件(Plugins)是用来拓展Webpack功能的,它们会在整个构建过程中生效,执行相关的任务。

Loaders和Plugins常常被弄混,但是他们其实是完全不同的东西,可以这么来说,loaders是在打包构建过程中用来处理源文件的(JSX,Scss,Less..),一次处理一个,插件并不直接操作单个文件,它直接对整个构建过程其作用。

Webpack有很多内置插件,同时也有很多第三方插件,可以让我们完成更加丰富的功能。

1、如何使用插件?

要使用某个插件,我们需要通过npm安装它,然后要做的就是在webpack配置中的plugins关键字部分添加该插件的一个实例(plugins是一个数组),我们添加了一个实现版权声明的插件。如HtmlWebpackPugin插件,

该插件的作用是依据一个简单的模板,帮你生成最终的Html5文件,这个文件中自动引用了你打包后的JS文件。每次编译都在文件名中插入一个不同的哈希值。

//安装

npm install --save-dev html-webpack-pugin

WebPack基础知识详解

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
Dec 16 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
js实现简单的选项卡效果
Feb 23 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
Oct 12 Javascript
React操作真实DOM实现动态吸底部的示例
Oct 23 Javascript
JS实现左边列表移到到右边列表功能
Mar 28 Javascript
JavaScript ES 模块的使用
Nov 12 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 #Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 #Javascript
函数四种调用模式以及其中的this指向
Jan 16 #Javascript
js实现导航栏中英文切换效果
Jan 16 #Javascript
Bootstrap面板使用方法
Jan 16 #Javascript
codeMirror插件使用讲解
Jan 16 #Javascript
微信小程序 图片边框解决方法
Jan 16 #Javascript
You might like
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
JavaScript访问样式表代码
2010/10/15 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
让 python 命令行也可以自动补全
2014/11/30 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python数据结构之翻转链表
2017/02/25 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
Django stark组件使用及原理详解
2019/08/22 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
事业单位公务员的职业生涯规划
2014/01/15 职场文书
学校安全管理责任书
2014/07/23 职场文书
演讲稿开场白台词
2014/08/25 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis