什么是loader

类似gulp中的taskes,即任务

webpack除了主营JS,还可以对指定的文件进行统一处理,比如把typescript转换为js,js内导入css等

这些任务都需要安装对应的依赖,且在module.rules配置项中配置(其他方式忽略)

{module: {rules: [//任务配置{test:regex,//正则,匹配文件规则exclude:regex,//正则,不包含的文件夹use:[//使用到的loaders及其配置{//某个loaderloader:'xx',options:{}}]}]}
}
复制代码

以下列举一些常常做的任务

css打包

html中不需要引入css文件,通过js间接的获取样式,这样整个html只需要引入一个js文件即可。

  • 使用 css-loader 可以在js中直接导入css文件,并在打包时把样式也打包在output文件中

    //比如,其中indexcss名称任意
    import indexcss from './index.css';
    复制代码

    在js中使用方式:className直接写名称即可(在引入的文件类)

    如何解决引入多个css重名问题?

  • 使用 style-loader 把js中的样式输入到html中的 <style> 标签内

1 . 安装依赖包

cnpm install style-loader css-loader --save-dev
复制代码

2 . 配置

module: {rules: [{test: /\.css$/,use: [{ loader: "style-loader" },{ loader: "css-loader" }]//简写//use:["style-loader","css-loader"]}]
}
复制代码

注:options不存在时可简写成数组,注意loader引入的 顺序

贴测试配置图:

postcss

postcss 是对css的扩展,允许使用下一代 CSS 语法,编译后转换成正常的css且会自动加上前缀

配和 autoprefixer 使用(why?)

1 . 安装

cnpm i  postcss-cssnext autoprefixer --save-dev
复制代码

2 . 配置

rules: [{// 使用 PostCSS 处理 CSS 文件test: /\.css/,use: ['style-loader', 'css-loader', 'postcss-loader'],},
]
复制代码

注意:postcss-loader 应该先执行,再执行 css-loader (倒序)

3 . 创建配置文件 postcss.config.js

module.exports = {plugins: {'autoprefixer': {browsers: 'last 5 version' // 代表意思为每个主流浏览器的最后5个版本}}
}
复制代码

less

处理less文件,一般和上面的css-loader style-loader一起使用

1 . 安装依赖包

cnpm install less-loader less --save-dev
复制代码

2 . 配置

在上面的use加入

{loader: "less-loader"}
复制代码

注:注意顺序,链式调用,放在最后

图片移动和打包

css既然都放在js中了,为什么图片不可以呢?

  • file-loader

    css打包会导致个问题:写background图片路径可能是按照css文件相对路径计算的,那么打包进js后值未改变,会导致路径错误。(还有什么地方用到?)

    file-loader 解决了这个问题:它把都图片移动到指定的位置,并修改url

    另外,也允许使用import导入图片,被计算出正确的路径,后续使用这个路径作为图片的正确路径

    import banner1 from "../../images/banner1.jpg";
    <img src={banner1} />
    复制代码
  • url-loader

    它把一部分图片转换为base64编码打包进js中,实际上是对file-loader的上层封装(但不依赖,内置file-loader)

    注:虽然不依赖,但是图片import还需要它,url-loader只转编码

1 . 安装依赖包

cnpm install url-loader file-loader --save-dev
复制代码

2 . 配置

{test: /\.(png|jpg|gif)$/,use: [{ loader: "url-loader",options:{limit: 8192, //单位byte,小于8KB的图片都会被编码(base64)放打包在js中name: 'images/[name].[ext]' //图片复制到指定位置}}]
}
复制代码

贴测试配置图:

img1.jpg(小于8kb)和img2.jpg(大)

打包后img1被打包进了js里,img2由于超过指定大小被复制到了指定位置 且 background中的url路径被更改

ES6转ES5 ES3

babel-loader 它把ES6转换成低版本的js代码以在低版本浏览器中运行(大部分浏览器不能完全支持es6)

1 . 安装依赖包

cnpm install babel-loader babel-core babel-preset-env --save-dev
复制代码

2 . 配置

{test: /\.js$/,exclude: /(node_modules|bower_components)/,//只是节约打包时间,这些文件夹内的js不会babal处理use: {loader: 'babel-loader',options: {presets: ['env']}}
}
复制代码

支持React

1 . 额外依赖包

cnpm install babel-preset-react --save-dev
复制代码

附react安装

cnpm install react react-dom --save
复制代码
  1. 额外配置

preset中加入react

presets: ['env','react']
复制代码

webpack4入门笔记——loader相关推荐

  1. vue router 入门笔记

    vue router 入门笔记 tips: components优先级大于component,即当一个route对象里同时配置了component和components时component视为无效 即 ...

  2. 十年公务员转行IT,自学AI三年,他淬炼出746页机器学习入门笔记

    整理 | Jane 编辑 | Just 出品 | AI科技大本营(ID:rgznai100) 近期,梁劲传来该笔记重大更新的消息.<机器学习--从入门到放弃>这本笔记的更新没有停止,在基于 ...

  3. Webpack4 学习笔记 - 01:webpack的安装和简单配置

    安装 webpack 新建一个Demo文件夹,执行初始化: npm init 在Demo文件夹里安装 webpack 和 webpack-cli : npm install webpack webpa ...

  4. html缩进快捷键_HTML 入门笔记

    HTML 入门笔记 HTML (HyperText Markup Language) 不是一门编程语言,而是一种用来告知浏览器如何组织页面的标记语言. HTML 可复杂.可简单,一切取决于开发者. 它 ...

  5. Python3入门笔记(1) —— windows安装与运行

    Python3入门笔记(1) -- windows安装与运行 Python的设计哲学是"优雅"."明确"."简单".这也是我喜欢Python ...

  6. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  7. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  8. python3入门与进阶笔记_我的Python3萌新入门笔记

    Python3萌新入门笔记是一系列真实的自学笔记. 当然,它也是比较全面的入门教程,共包括54篇笔记. 从第一篇笔记开始,大半年的时间我都是在自学和组织教程内容. 我觉得有必要,把我自己的学习过程和大 ...

  9. MySql入门笔记二~悲催的用户

    这些是当年小弟的MySql学习笔记,木有多么复杂的结构操作,木有多炫丽的语句开发,木有...总之就是木有什么技术含量... 日复一日,彪悍的人生伴随着彪悍的健忘,运维操作为王,好记性不如烂笔头,山水有 ...

  10. 2接口详解_TS入门笔记2——TS接口进阶详解

    TS入门笔记--TS接口进阶详解 一.为什么需要接口? let obj:object; // 定义了一个只能保存对象的变量 // obj = 1; // obj = "123"; ...

最新文章

  1. 《javascript设计模式》笔记之第七章:工厂模式
  2. php 请求url没有扩展名,apache – 将.php重定向到无扩展名,并在没有.php的情况下创建url...
  3. jvm什么是本地方法
  4. PHP随笔---简述var_dump()、print_r()、echo()
  5. Google 将于明年彻底关闭 Chrome Apps,以后就是 PWA 的天下了
  6. foobar2000转换APE参数设置
  7. 计算机数据采集管理系统的结构和功能,计算机数据采集系统简介
  8. putty怎么进入文件夹_putty常用命令
  9. 用java 解密pdf_Java 加密、解密PDF文档(示例代码)
  10. 2011微软MVP全球峰会美国行之飞抵西雅图
  11. 凝思系统激活序列号_凝思磐石安全操作系统
  12. BI可视化和大数据分析的两大巨头全方位对比,谁更强好像有了答案
  13. xshell 6查看测试日志
  14. 基于Xilinx LUT6设计高效紧凑的2:1 Bus Mux
  15. maven打包将依赖jar也打包的方法
  16. 图像处理与计算机视觉:3D射影变换
  17. WEB12_HttpTomcat
  18. QT 录制鼠标键盘回放
  19. platformio如何向Arduino开发板发送文本
  20. 装系统时遇到的常见问题汇总

热门文章

  1. Spring.Net学习笔记(1)-容器的使用
  2. WebStorm配置(2016/11/18更新)
  3. 如何控制多线程之间的优先级顺序
  4. dom4j解析XML文件(4)—实战
  5. hdu 1074 Doing Homework
  6. 汉字取首字母(第三节蓝桥杯决赛)
  7. 经典的Fisher-Yates Shuffle算法
  8. 3、JSON相关基础知识点总结(3)
  9. .net框架笔记(四)
  10. django管理界面使用与bootstrap模板使用