为什么要使用模块打包工具

1.模块化开发ES Modules存在兼容性问题 打包之后成产阶段编译为ES5 解决兼容性问题

2.模块文件过多 网络请求频繁  开发阶段把散的模块打包成一个模块 解决网络请求频繁问题

3.支持不同类型的资源模块

对于有兼容问题的代码,我们可以通过模块加载器(Loader)编译转化,代码拆分(按需加载)引入资源模块,比如import css,

打包工具解决的是前端整体的模块化 并不单指 JavaScript模块化,而是指对所有的资源进行模块化

webpack 配置文件

webpack4.0之后的版本支持0配置的情况进行打包,webpack默认打包的入口文件为src/index.js到dist/main.js,很多时候我们都需要

自定义路径,需要添加webpack的配置文件,在根目录下创建webpack.config.js,这个文件运行到node环境下,使用commonjs规范,

比如:指定入口文件及出口文件

webpack4新增了工作模式的功能,大大简化了webpack的复杂程度,针对不同环境的几组预设问题,如上图所示的简单配置中,没有

指定mode的属性,wenpack会按照production模式去工作,这对生成环境是很好的,但是没办法去阅读,因为代码压缩编译过了,

有三种模式

1.development开发模式 优化打包速度,代码中会添加一些调试辅助

2.none 模式 webpack运行最原始的打包 不会去做任何额外的处理

3.production模式

可以在配置文件中配置mode属性

WebPack 资源模块加载

上文中提到过webpack不仅是JS的模块打包工具,也是整个前端工程的模块化打包工具,也就是说我们可以引入前端项目中的任意类

型文件,但是webpack内部默认只会处理JavaScript文件,这时候我们需要配置loader处理对应的文件,下面尝试下打包css文件(正常开发

中不会以css为入口文件),安装下这个loader.

yarn add css-loader --dev   //css-loader作用是将我们css文件转化为js模块

yarn add style-loader --dev //style-loader是将转化的js模块展示到页面上

loader是webpack的核心特性,借助于loader就可以加载任何类型的资源

Webpack 导入资源模块

一般webpack的打包/运行入口是JS文件,因为javascript驱动整个前端应用的业务,然后在JS中以import的方式引入css,图片,文字等

及一切javaScript所需要的资源,这也是webpack的核心思想,保证所有必须的资源都能打包进去。

Webpack 文件资源加载器及 URL加载器

文件资源加载器:还有一些比较大的我们需要用到file-loader

yarn add file-loader --dev //处理体积比较大的图片字体等文件 安装依赖

在说url加载器之前先说下Data Urls是一种特殊的协议,他可以直接用来表示一个文件内容,在访问url时就不会访问任何的http请求,达

到减少http请求的效果,所以我们可以以代码的形式转化任何文件,这时候我们需要用到加载器url-loader,

yarn add url-loader --dev //通过url-loader转化为data url的形式。

url-loader适用于体积比较小的资源,因为体积比较大的资源会造成我们的打包结果非常大,从而影响运行速度,这里我们只需要把配

置文件中的file-loader,替换成url-loader

针对小文件使用url-loader,嵌入代码减少请求次数,针对大文件单独获取存放,提高加载速度用file-loader,file-loader和url-loader必须

要同时安装,虽然配置文件中是url-loader,如图所示当大于10KB时还是会运行file-loader(这里啰嗦下...)

Webpack js编译加载器

把ES2015等js代码的新特性编译成原生js

yarn add babel-loader @babel/preset-env --dev

Webpack 模块加载方式

webpack遵循不同的导出和导入文件的标准,但是建议不要混淆,最好只使用一种标准

CSS中加载其它css的方式 @import url(xxx.css);

加载html的loader

yarn add html-loader --save

Webpack 核心工作原理

以JS为入口文件,通过require或者import的方式层层依赖 形成一个依赖树,递归依赖树找到对应的文件,找到对应的loader属性,找到

模块对应的加载器去加载模块,实现整个项目的打包,loader机制是Webpack的核心。

Webpack 开发一个Loader

首先创建一个.md文件about.md,创建一个markdown-loader.js文件,

由于webpack打包返回的结果必须为js代码,要么makedown解析模块导出结果交给下个模块,继续处理直到最终导出JS代码形式,要

么makedown导出后解析成字符串直接return出去

第一种方案

创建一个解析makedown的解析模块

yarn add marked --dev 安装解析makedown的模块,打包结果为html字符串

第二种方案

makedown打包结果传给html-loder

yarn add html-loader --dev html-loader

所以说loader就是一个从输入到输出的转换,对于同一个资源可以依次使用多个Loader

浅谈Webpack模块打包工具一的更多相关文章

  1. 浅谈Webpack模块打包工具三

    Source Map 生产代码与开发代码完全不同,如果需要调试应用的话会非常的麻烦,错误信息无法定位,Soutce Map就会逆向得到源代码, 须在打包之后的代码文件的末尾位置例如添加//# sour ...

  2. 浅谈Webpack模块打包工具四

    Webpack 生产环境优化 生产环境和开发环境有很大的差异,生产环境只注重运行效率,开发环境主要开发效率,webpack4.0开始提出了(mode)模式的概念 针对不同的环境进行不同的配置,为不同的 ...

  3. 浅谈Webpack模块打包工具二

    Webpack插件机制介绍 Loader专注实现资源模块加载,plugin解决其他自动化工作,比如清除dist目录,拷贝静态文件值输出目录,压缩输出代码等,下面列举几个plugin 的例子. Webp ...

  4. 浅谈webpack优化

    webpack优化方案 1. 优化开发体验 1-1. 加快构建速度 ① 缩小文件搜索范围 由于 Loader 对文件的转换操作很耗时,需要让尽可能少的文件被 Loader 处理,用include和ex ...

  5. 模块打包工具webpack

    1.webpack的安装 1.1在安装node的基础上,npm install -g webpack(window版本,因为是全局安装,所以无所谓是哪个路径下) 1.2新建一个文件夹用于此项目  eg ...

  6. Webpack, 现在最流行的模块打包工具.压缩打包

    压缩bundle.js 1.把我们项目的代码从es6 -> es5 [babel] 参考:http://babeljs.io/docs/setup/#installation 1.1.安装包 b ...

  7. Webpack前端打包工具

    一.安装 安装Webpack之前需要安装nodejs,然后用npm安装: $ npm install webpack -g &nsbp;运行以上命令就将Webpack安装到了全局环境中.  但 ...

  8. 浅谈maven自动化构建工具

    转载https://blog.csdn.net/zxm1306192988/article/details/76209062 Maven是什么[what] 1.Maven 是 Apache 软件基金会 ...

  9. webpack模块打包简易版

    webpack基本使用流程(react) 1.安装webpack脚手架 cnpm install webpack webpack-cli -D 2.安装处理css的loader cnpm instal ...

随机推荐

  1. CentOS7 普通用户绕过root登录

      正常环境中我们的服务器都会使用一个普通用户跳转到root进行操作,如果root用户的密码不记得只知道普通用户密码,设备又不方便进行开关机破密码时,我们就可以用到以下方法登陆设备. pkexec : ...

  2. WebSocket协议中文版

    WebSocket协议中文版 摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信.用于这个安全模型是通常由web浏览器使用 ...

  3. JVM 源码分析(三):深入理解 CAS

    前言 什么是 CAS Java 中的 CAS JVM 中的 CAS 前言 在上一篇文章中,我们完成了源码的编译和调试环境的搭建. 鉴于 CAS 的实现原理比较简单, 然而很多人对它不够了解,所以本篇将 ...

  4. Jenkins Android APP 持续集成体系建设二—自动部署、执行测试任务,关联打包任务

    经过上一遍博客我们知道了怎么使用Jenkins自动打包,但打完包之后,我们还需要对新包进行回归测试,确定新包有没有问题,然后才能发布包,那么,话不多说,我们先来新建个自动化回归测试任务 新包自动化回归 ...

  5. 关联实现上-jsonpath取值

    举例子: demo01.py import jsonimport requestsimport jsonpathsession = requests.session()get_param_dict={ ...

  6. 【Docker】Docker启动停止重启 Redirecting to /bin/systemctl start docker.service

    [root@liuawen local]# docker -v Docker version 1.13.1, build cccb291/1.13.1 [root@liuawen local]# 启动 ...

  7. 【Oracle】密码文件相关

    Oracle数据库的orapwd命令,主要用来建立密码(口令)文件. 一.查看帮助信息 [oracle@oracle11g dbs]$ orapwd Usage: orapwd file=<fn ...

  8. poj-Decoding Morse Sequences(动态规划)

    Description Before the digital age, the most common "binary" code for radio communication ...

  9. 单元测试:单元测试中的mock

    公司要求提升单元测试的质量,提高代码的分支覆盖率和行覆盖率,安排我研究单元测试,指定方案分享并在开发部普及开.整理完资料后,同步一下到博客. 单元测试中的mock的目的 mock的主要目的是让单元测试 ...

  10. Spring Aop中四个重要概念,切点,切面,连接点,通知

    1. 通知: 就是我们编写的希望Aop时执行的那个方法.我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行.2. 切点:切点就是我们配置的满足我们条件的目标方法.比如我们规定:名字前 ...