style -loader <= css-loader <= less-loader

  • style-loader 将css样式插入到html中

  • css-loader 解析import、require 路径处理

  • less-loader 将less解析为css

{
test: /\.less$/,
use: [{
loader: 'style-loader', // 配置成一个对象
options: {
insertAt: 'top' // 设置解析后的样式 插入html的位置,top为最上面,目的是为了使得用户在html中编写的样式优先级最高
}
}, 'css-loader','less-loader']
},

postcss-loader

配合autoprefixer插件,给css 添加浏览器前缀,需要在解析css代码之前使用。(写在css-loader之后,因为loader执行顺序是从右往左)

需要一个配置文件:postcss.config.js

postcss.config.js

module.exports = {
plugins: [require('autoprefixer')] // 给css添加浏览器前缀
}
{
test: /\.less$/,
use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
},

file-loader

默认会在内部生成一张图片,到build目录下,再返回生成的图片名称,在css中可以直接使用,因为使用了css-loader,会进行require操作,在js文件中使用图片,则需要import 或者require操作。

body {
background: url('./logo.png') /* css-loader 会转换为 url(require('./logo.png')) */
}
// index.js
import logo from './logo'
let image = new Image()
image.src = logo
document.body.appendChild(image)
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
},

url-loader

使用url-loader可以对解析的图片的规格进行一些限制。当图片小于 xx K时,用base64来转化,可以减少http请求(但是base64生成的文件,会比源文件大1/3,是base64的特点)。否则是file-loader

{
test: /\.(png|svg|jpg|gif)$/,
use: {
loader: 'url-loader',
options: {
limit:200*1024,
outputPath:'img/',
publicPath: 'http://www.xxx.com' // 资源放至cdn服务器后,可以配置请求域名等
}
}
},

html-withimg-loader

解析html中 引入的图片,

<div>
< img src="./logo.png" /> <-- 会使用打包生成的文件名-->
</div>
{
test: /\.html$/,
use: ['html-withimg-loader']
},

babel-loader

babel默认只转换新的 JavaScript 语法,如箭头函数,不能转换新的 API,如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转译。

npm install babel-loader @babel/core @babel/preset-env -D
npm install @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties -D
npm install @babel/plugin-transform-runtime -D
npm install @babel/runtime @babel/polyfill
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'], // 预设,转换js语法
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }], // 解析类的装饰器
["@babel/plugin-proposal-class-properties", { "loose": true }], // 解析类的属性
"@babel/plugin-transform-runtime", // 解析promise,Generator等新的API
"@babel/polyfill" // 解析实例上的方法
]
}
},
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/
}

expose-loader

npm install jquery
npm install expose-loader -D
  1. 在模块中,使用内联loader,完成向全局暴露一个变量
import $ from 'expose-loader?$!jquery'
console.log(window.$) // 打开浏览器,打印成功
  1. 通过webpack配置模块规则,向每个引入jquery的模块中注入全局变量
import $ from 'jquery'

// webpack.config.js
module: {
rules: [{
test: require.resolve('jquery'),
use: 'expose-loader?$'
}
}
  1. 其他暴露变量的方法:ProvidePlugin(内置):提供插件 — 可以用来向每个模块注入变量,但不能通过通过window.$来访问,并未暴露给全局,仅在每个模块中使用
// webpack.config.js
const webpack = require('webpack');
module: {
// ...
plugins: [
new webpack.ProvidePlugin({
$:'jquery'
}),
],
}
  1. cdn引入,但不打包
<-- index.html -->

<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
// index.js
// 此时在文件中,可以拿到 $ 对象
// 但是如果再次通过 import 引入jquery,就会被重复打包,使打包后的文件,体积变大
import $ from 'jquery'
// webpack.config.js
module: {
// ...
externals: { // 分别对比配置该属性前后,打包后文件的体积,明显变小
jQuery: '$'
},
}

webpack4.15.1 学习笔记(十) — 常见 loader 使用的更多相关文章

  1. SharpGL学习笔记(十) 常见的光源类型,创建光源

    在OpenGL中,使用光源的特性组合,如颜色,位置,方向等等,可以创建多种不同类型的灯光. 常见的几种灯光类型有: 定向光源(directonal) 定位光源(positional) 衰减光源 聚光灯 ...

  2. go微服务框架kratos学习笔记十(熔断器)

    目录 go微服务框架kratos学习笔记十(熔断器) 什么是熔断 熔断器逻辑 kratos Breaker kratos 熔断逻辑 kratos熔断器使用说明 bladmaster client br ...

  3. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  5. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  6. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

  7. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  8. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  9. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  10. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

    python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

随机推荐

  1. deeplearning4j训练MNIST数据集以及验证

    训练模型官方示例 MNIST数据下载地址: http://github.com/myleott/mnist_png/raw/master/mnist_png.tar.gz GitHub示例地址: ht ...

  2. 安装node-sass失败原因及解决办法汇总

    node-sass 安装过程 npm 拉下 node-sass包: 根据node版本和node-sass版本拉取对应的binding.node编译器,原因是sass的编译语言比较特殊,需要下载对应版本 ...

  3. 【C#】 封装的异步HttpRequest

      private async void btn_userLogin_Click(object sender, EventArgs e)        {            UInfo = new ...

  4. go语言开发的内网穿透工具,frp.

    转载自:https://www.appinn.com/frp/ 什么是 Frp? 内网穿透工具有很多,其中 Frp (Fast Reverse Proxy) 是比较流行的一款.FRP 是一个免费开源的 ...

  5. 鸿蒙HarmonyOS实战-Web组件(前端函数和应用侧函数相互调用)

    前言 前端函数和应用侧函数相互调用是指前端页面中的JavaScript函数和应用程序侧的函数之间进行相互调用. 在前端开发中,常常会使用JavaScript函数来处理用户的交互事件和操作.这些函数可以 ...

  6. vivo 制品管理在 CICD 落地实践

    作者:vivo 互联网效能平台团队 - Chen Lingling 在DevOps实践中,制品管理是一个重要的组成部分,它可以帮助团队快速交付高质量.高可靠性的软件,本文将介绍在 DevOps 领域, ...

  7. 春松客服入驻Rainbond开源应用商店

    "做好开源客服系统" 春松客服是拥有坐席管理.渠道管理.机器人客服.数据分析.CRM 等功能于一身的新一代客服系统.将智能机器人与人工客服完美融合,同时整合了多种渠道,结合 CRM ...

  8. Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解析)

    什么是鉴权(身份验证)? https://learn.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore- ...

  9. xv6 内存管理

    前文讲述了 xv6 的启动过程,本文接着讲述 xv6 内存管理的部分,直接来看. 公众号:Rand_cs 启动部分完善 前文只是介绍了启动的过程,但是各类函数之间的调用,地址的变换,内存布局的变化并没 ...

  10. linux系统下,redis如何设置密码

    1.命令方式 首先查看下密码是否存在,发现并未设置为空. -bash-4.2# cd /usr/local/redis-6.2.6/src -bash-4.2# ./redis-cli 127.0.0 ...