详解webpack介绍&安装&常用命令


Posted in Javascript onJune 29, 2017

webpack系列目录

基于webpack搭建纯静态页面型前端工程解决方案模板, 最终形态源码见github: https://github.com/ifengkou/webpack-template

正文

Webpack是一款用户打包前端模块的工具,它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。主要是用来打包在浏览器端使用的javascript的。同时也能转换、捆绑、打包其他的静态资源,包括css、image、font file、template等

webpack的官网是 http://webpack.github.io/ ,文档地址是 http://webpack.github.io/docs/

市面已存在大量的模块管理和打包工具,为什么还重复造轮子,webpack有什么特色?

这些已有的模块化工具并不能很好的完成如下的目标:

  1. 将依赖树拆分成按需加载的块
  2. 初始化加载的耗时尽量少
  3. 各种静态资源都可以视作模块
  4. 将第三方库整合成模块的能力
  5. 可以自定义打包逻辑的能力
  6. 适合大项目,无论是单页还是多页的 Web 应用

webpack 特点

代码拆分

Webpack 有两种组织模块依赖的方式,同步和异步。异步依赖作为分割点,形成一个新的块。在优化了依赖树后,每一个异步区块都作为一个文件被打包。

Loader

 Webpack 本身只能处理原生的 JavaScript 模块,但是 loader 转换器可以将各种类型的资源转换成 JavaScript 模块。这样,任何资源都可以成为 Webpack 可以处理的模块。

智能解析

Webpack 有一个智能解析器,几乎可以处理任何第三方库,无论它们的模块形式是 CommonJS、 AMD 还是普通的 JS 文件。甚至在加载依赖的时候,允许使用动态表达式 require("./templates/" + name + ".jade")。

插件系统

Webpack 还有一个功能丰富的插件系统。大多数内容功能都是基于这个插件系统运行的,还可以开发和使用开源的 Webpack 插件,来满足各式各样的需求。

快速运行

Webpack 使用异步 I/O 和多级缓存提高运行效率,这使得 Webpack 能够以令人难以置信的速度快速增量编译。

总结下来其主要的优势:

1.按需加载模块,按需进行懒加载,在实际用到某些模块的时候再增量更新

2.webpack 是以 commonJS 的形式来书写脚本,但对 AMD/CMD 的支持也很全面,方便旧项目进行代码迁移。

3.能被模块化的不仅仅是 JS 了,能处理各种类型的资源。

4.开发便捷,能替代部分 grunt/gulp 的工作,比如打包、压缩混淆、图片转base64等。

5.扩展性强,插件机制完善

安装

首先要安装 Node.js, Node.js 自带了软件包管理器 npm

用npm 安装webpack

$ npm install webpack -g

此时 Webpack 已经安装到了全局环境下,可以通过命令行 webpack -h 查看相关指令

通常我们会将webpack安装到项目依赖,这样就可以使用本地版本的webpack

//进入项目目录
//确定已有package.json,没有就npm init 创建
$ npm install webpack --save-dev

//查看webpack 版本信息
$ npm info webpack
//安装指定版本
$ npm install webpack@1.31.x --save-dev

如果要使用webpack开发工具,要单独安装 webpack-dev-server

$ npm install webpack-dev-server --save-dev

常用命令

webpack

构建命令,webpack的常用参数

$ webpack --config webpack.min.js //另一份配置文件

$ webpack --display-error-details //显示异常信息

$ webpack --watch //监听变动并自动打包
 
$ webpack -p //压缩混淆脚本,这个非常非常重要!
 
$ webpack -d //生成map映射文件,告知哪些模块被最终打包到哪里了

webpack-dev-server

webpack-dev-server是一个小型的node.js Express服务器,它使用webpack-dev-middleware中间件来为通过webpack打包生成的资源文件提供Web服务。它还有一个通过Socket.IO连接着webpack-dev-server服务器的小型运行时程序。webpack-dev-server发送关于编译状态的消息到客户端,客户端根据消息作出响应。

webpack-dev-server有两种模式支持自动刷新——iframe模式和inline模式

  1. 在iframe模式下:页面是嵌套在一个iframe下的,在代码发生改动的时候,这个iframe会重新加载
  2. 在inline模式下:一个小型的webpack-dev-server客户端会作为入口文件打包,这个客户端会在后端代码改变的时候刷新页面

使用iframe模式,无需额外配置,只需在浏览器输入http://localhost:8080/webpack-dev-server/index.html

使用inline模式有两种方式:命令行和nodejs API

1.命令行: 在运行时,加上 --inline 选项

$ webpack-dev-server --inline

访问,通过http://localhost:8080 就可以访问

2.nodejs API 方式 ,需要手动把 webpack-dev-server/client?http://localhost:8080 加到配置文件的入口文件处

webpac-dev-server支持Hot Module Replacement,即模块热替换,在前端代码变动的时候无需整个刷新页面,只把变化的部分替换掉

下章,就开始利用 Webpack 实现 前端项目的 自动构建部署!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE8中使用javascript动态加载CSS的解决方法
Jun 17 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
JavaScript实现向右伸出的多级网页菜单效果
Aug 25 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
Apr 26 Javascript
Bootstrap模态对话框的简单使用
Apr 29 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
May 05 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
利用Vue实现移动端图片轮播组件的方法实例
Aug 23 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
Oct 09 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 Javascript
javascript实现倒计时关闭广告
Feb 09 Javascript
基于node.js制作简单爬虫教程
Jun 29 #Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 #Javascript
详解webpack自动生成html页面
Jun 29 #Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 #Javascript
详解webpack分包及异步加载套路
Jun 29 #Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 #Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 #Javascript
You might like
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
输出控制类
2006/10/09 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php实现的生成排列算法示例
2019/07/25 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python中max函数用法实例分析
2015/07/17 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
行政办公员自我评价分享
2013/12/14 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
JS封装cavans多种滤镜组件
2022/02/15 Javascript