WebPack前端打包工具

摘要:
Webpack是用户打包前端模块的工具。它将根据模块的依赖性进行静态分析,然后根据指定的规则为这些模块生成相应的静态资源。智能解析Webpack有一个智能解析器,可以处理几乎任何第三方库,无论其模块形式是CommonJS、AMD还是普通JS文件。插件系统Webpack还有一个功能丰富的插件系统。快速运行的Webpack使用异步I/O和多级缓存来提高运行效率,这使Webpack能够以惊人的速度快速增量编译。Webpack-dev服务器向客户端发送一条关于编译状态的消息,客户端根据该消息进行响应。

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

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

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

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

  • 将依赖树拆分成按需加载的块
  • 初始化加载的耗时尽量少
  • 各种静态资源都可以视作模块
  • 将第三方库整合成模块的能力
  • 可以自定义打包逻辑的能力
  • 适合大项目,无论是单页还是多页的 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 -w 
  #提供watch方法,实时进行打包更新
 
  webpack -p 
  #对打包后的文件进行压缩
 
  webpack -d 
  #提供SourceMaps,方便调试
 
  webpack --colors 
  #输出结果带彩色,比如:会用红色显示耗时较长的步骤
  
  webpack --profile 
  #输出性能数据,可以看到每一步的耗时
  
  webpack --display-modules 
  #默认情况下 node_modules 下的模块会被隐藏,加上这个参数可以显示这些被隐藏的模块
$ webpack --config webpack.min.js #另一份配置文件

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

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模式

  • 在iframe模式下:页面是嵌套在一个iframe下的,在代码发生改动的时候,这个iframe会重新加载
  • 在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 就可以访问

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

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

请参考 https://zhuanlan.zhihu.com/p/65574428

https://www.cnblogs.com/sloong/p/5584684.html

免责声明:文章转载自《WebPack前端打包工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇StringBuilder类为什么每个前端开发者都要理解页面的渲染?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Composer 的下载与安装

一,Composer 的下载与安装 官网下载:https://getcomposer.org/download/  打开  penssl的注释,在  D:wampphp7230php.ini  文件的如下图位置:  下图不用勾选,意思是“仅安装Composer ,不包括卸载功能” 选择php的路径: 配置代理,先暂时不用配置,等安装完成后再进行配置...

前端组件/库打包利器rollup使用与配置实战

目前主流的前端框架vue和react都采用rollup来打包,为了探索rollup的奥妙,接下来就让我们一步步来探索,并基于rollup搭建一个库打包脚手架,来发布自己的库和组件。 前言 写rollup的文章是因为笔者最近要规范前端开发的业务流程和架构,并提供内部公有组件库和工具库供团队使用。在查阅大量资料并对比了webpack和rollup的优缺点之后...

Vue SSR 组件加载:Node 端渲染提示 window/document 没有定义

业务场景 首先来看一个简单的 Vue 组件test.vue <template> <div> <h2>clientHeight: {{ clientHeight }} px </h2> </div> </template> <script type="text...

常用的npm命令

npm ls -g 列出全局安装的所有模块 npm ls webpack -g 查看全局安装的模块版本信息 npm view webpack versions 查看npm服务器上的全部版本信息 npm view webpack version 查看npm服务器上的最新版本信息 npm install -g cnpm --registry...

Vue2+VueRouter2+webpack 构建项目实战(二):目录以及文件结构

通过上一篇博文《Vue2+VueRouter2+webpack 构建项目实战(一):准备工作》,我们已经新建好了一个基于vue+webpack的项目。本篇文章详细介绍下项目的结构。 项目目录以及文件结构 如图所示: 如上图所示,自动构建的vue项目的结构就是这样。 目录/文件 说明 build 这个是我们最终发布的时候会把代码发布在这里,在开发...

前端项目里常见的十种报错及其解决办法

错误一:Uncaught TypeError: Cannot set property 'onclick' of null at operate.js:86 图片.png 原因:当js文件放在head里面时,如果绑定了onclick事件,就会出现这样的错误,是因为W3School的写法是浏览器先加载完按钮节点才执行的js,所以当浏览器自顶向下解析...