详解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 相关文章推荐
JQuery select标签操作代码段
May 16 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
May 07 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
Oct 12 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
微信小程序 开发指南详解
Sep 27 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 Javascript
selenium+java中用js来完成日期的修改
Oct 31 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 Javascript
使用Vant完成Dialog弹框案例
Nov 11 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
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
JS实现li标签的删除
2019/04/12 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
python判断数字是否是超级素数幂
2018/09/27 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
python一些性能分析的技巧
2020/08/30 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
管理站站长岗位职责
2013/11/27 职场文书
21岁生日感言
2014/02/27 职场文书
求职自我评价范文100字
2014/09/23 职场文书
寒山寺导游词
2015/02/03 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
Go语言实现Snowflake雪花算法
2021/06/08 Golang
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python