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 相关文章推荐
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 Javascript
Bootstrap中data-target 到底是什么
Feb 14 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
利用vue.js把静态json绑定bootstrap的table方法
Aug 28 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
Vue动态加载异步组件的方法
Nov 21 Javascript
详解vue开发中调用微信jssdk的问题
Apr 16 Javascript
Javascript操作select控件代码实例
Feb 14 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 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
3种平台下安装php4经验点滴
2006/10/09 PHP
php,ajax实现分页
2008/03/27 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
Backbone.js中的集合详解
2015/01/14 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
Angular的$http与$location
2016/12/26 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python实现带百分比的进度条
2016/06/28 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
薪酬专员岗位职责
2014/02/18 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS