前言
初衷: 整顿一些罕用的loader分享给大家,不便晓得在什么场景下该用什么loader。如果有大佬都懂轻轻左滑就行,不喜勿喷。
适宜人群: 前端高级开发。
style-loader
用处: 用于将css
编译实现的款式,挂载到页面style
标签上。须要留神loader执行程序,style-loader放到第一位,因为loader都是从下往上执行,最初全副编译实现挂载到style上
装置
cnpm i style-loader -D
配置
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css/,
use: ["style-loader"]
}
]
}
}
css-loader
用处: 用于辨认.css
文件, 解决css
必须配合style-loader
独特应用,只装置css-loader
款式不会失效。
装置
cnpm i css-loader style-loader -D
配置
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css/,
use: [
"style-loader",
"css-loader"
]
}
]
}
}
sass-loader
用处:css
预处理器,咱们在我的项目开发中常常会应用到的,编写css
十分便捷,一个字 “棒”。
装置
cnpm i sass-loader@5.0.0 node-sass -D
配置
index.js
import "index.scss"
index.scss
body {
font-size: 18px;
background: red;
}
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
"style-loader",
"css-loader",
"sass-loader"
],
include: /src/,
},
]
}
}
postcss-loader
用处: 用于补充css款式各种浏览器内核前缀,太不便了,不必咱们手动写啦。
装置
cnpm i postcss-loader autoprefixer -D
配置
postcss.config.js
如果不写在该文件呢,也能够写在postcss-loader
的options
外面,写在该文件跟写在那里是等同的
module.exports = {
plugins: [
require("autoprefixer")({
overrideBrowserslist: ["> 1%", "last 3 versions", "ie 8"]
})
]
}
属性 | 形容 |
---|---|
\> 1% | 寰球超过1%人应用的浏览器 |
\> 5% in CN | 指定国家使用率笼罩 |
last 2 versions | 所有浏览器兼容到最初两个版本依据CanIUse.com追踪的版本 |
Firefox ESR | 火狐最新版本 |
Firefox > 20 | 指定浏览器的版本范畴 |
not ie <=8 | 方向排除局部版本 |
Firefox 12.1 | 指定浏览器的兼容到指定版本 |
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
"style-loader",
"css-loader",
"sass-loader",
"postcss-loader"
],
include: /src/,
},
]
}
}
babel-loader
用处: 将Es6+ 语法转换为Es5语法。
装置
cnpm i babel-loader @babel/core @babel/preset-env -D
- babel-loader 这是使babel和webpack协同工作的模块
- @bable/core 这是babel编译器外围模块
- @babel/preset-env 这是babel官网举荐的预置器,可依据用户的环境主动增加所需的插件和补丁来编译Es6代码
配置
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: {
loader: "babel-loader",
options: {
presets: [
['@babel/preset-env', { targets: "defaults"}]
]
}
}
},
]
}
}
ts-loader
用处: 用于配置我的项目typescript
装置
cnpm i ts-loader typescript -D
配置
webpack.config.js
以后配置ts-loader
不会失效,只是会编译辨认.ts
文件, 次要配置文件在tsconfig.json
里
module.exports = {
module: {
rules: [
{
test: /\.ts$/,
use: "ts-loader"
},
]
}
}
tsconfig.json
{
"compilerOptions": {
"declaration": true,
"declarationMap": true, // 开启map文件调试应用
"sourceMap": true,
"target": "es5", // 转换为Es5语法
}
}
webpack.config.js
module.exports = {
entry: "./src/index.ts",
output: {
path: __dirname + "/dist",
filename: "index.js",
},
module: {
rules: [
{
{
test: /\.ts$/,
use: "ts-loader",
}
}
]
}
}
html-loader
用处: 咱们有时候想引入一个html
页面代码片段赋值给DOM
元素内容应用,这时就用到html-loader
装置
cnpm i html-loader@0.5.5 -D
倡议装置低版本,高版本可能会不兼容导致报错。我这里装置的是0.5.5版本
配置
index.js
import Content from "../template.html"
document.body.innerHTML = Content
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.html$/,
use: "html-loader"
}
]
}
}
file-loader
用处: 用于解决文件类型资源,如jpg
,png
等图片。返回值为publicPath
为准。
装置
cnpm i file-loader -D
配置
index.js
import img from "./pic.png"
console.log(img) // https://www.baidu.com/pic_600eca23.png
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.(png|jpg|jpeg)$/,
use: [
{
loader: "file-loader",
options: {
name: "[name]_[hash:8].[ext]",
publicPath: "https://www.baidu.com"
}
}
]
}
]
}
}
url-loader
用处: url-loader
也是解决图片类型资源,只不过它与file-loader
有一点不同,url-loader
能够设置一个依据图片大小进行不同的操作,如果该图片大小大于指定的大小,则将图片进行打包资源,否则将图片转换为base64
字符串合并到js
文件里
装置
cnpm i url-loader -D
配置
index.js
import img from "./pic.png"
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.(png|jpg|jpeg)$/,
use: [
{
loader: "url-loader",
options: {
name: "[name]_[hash:8].[ext]",
limit: 10240, // 这里单位为(b) 10240 => 10kb
// 这里如果小于10kb则转换为base64打包进js文件,如果大于10kb则打包到dist目录
}
}
]
}
]
}
}
html-withimg-loader
用处: 咱们在编译图片时,都是应用file-loader
和url-loader
,这两个loader
都是查找js
文件里的相干图片资源,然而html
外面的文件不会查找所以咱们html
里的图片也想打包进去,这时应用html-withimg-loader
装置
cnpm i html-withimg-loader -D
配置
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
</head>
<body>
<h4>我蛙人</h4>

</body>
</html>
webpack.config.js
如果打包呈现img的src门路为[Object Module]
,解决方案有
- 将file-loader降级到4.2.0
- 批改options参数esModule为false
module.exports = {
module: {
rules: [
{
test: /\.(png|jpg|jpeg)$/,
use: {
loader: "file-loader",
options: {
name: "[name]_[hash:8].[ext]",
publicPath: "http://www.baidu.com",
esModule: false
}
}
},
{
test: /\.(png|jpeg|jpg)/,
use: "html-withimg-loader"
}
]
}
}
vue-loader
用处: 用于编译.vue
文件,如咱们本人搭建vue
我的项目就能够应用vue-loader
, 以下简略理解一下,这里就不多赘述啦。
装置
cnpm i vue-loader@15.7.0 vue vue-template-compiler -D
- vue-loader 用于辨认.vue文件
- vue 不必多说,辨认反对vue语法
- vue-template-compiler 语法模板渲染引擎 {{}}
template
、script
、style
配置
main.js
import App from "./index.vue"
import Vue from 'Vue'
new Vue({
el: "#app",
render: h => h(App)
})
index.vue
<template>
<div class="index">
{{ msg }}
</div>
</template>
<script>
export default {
name: 'index',
data() {
return {
msg: "hello 蛙人"
}
},
created() {},
components: {},
watch: {},
methods: {}
}
</script>
<style scoped>
</style>
webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
entry: "./src/main.js",
output: {
path: __dirname + "/dist",
filename: "index.js",
},
module: {
rules: [
{
test: /\.vue$/,
use: "vue-loader"
}
]
},
plugins: [
new VueLoaderPlugin()
]
}
eslint-loader
用处: 用于查看代码是否符合规范,是否存在语法错误。
装置
cnpm i eslint-loader eslint -D
配置
index.ts
var abc:any = 123;
console.log(abc)
.eslintrc.js
这里简略写几个规定
module.exports = {
root: true,
env: {
browser: true,
},
rules: {
"no-alert": 0, // 禁止应用alert
"indent": [2, 4], // 缩进格调
"no-unused-vars": "error" // 变量申明必须应用
}
}
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.ts$/,
use: ["eslint-loader", "ts-loader"],
enforce: "pre",
exclude: /node_modules/
},
{
test: /\.ts$/,
use: "ts-loader",
exclude: /node_modules/
}
]
}
}
感激
谢谢你读完本篇文章,心愿对你能有所帮忙,如有问题欢送各位斧正。
我是蛙人(✿◡‿◡),如果感觉写得能够的话,请点个赞吧❤。
感兴趣的小伙伴能够退出 前端娱乐圈交换群 欢送大家一起来交换探讨
写作不易,「点赞」+「在看」+「转发」 谢谢反对❤
往期好文
《聊聊在Vue我的项目中应用Decorator装璜器》
《聊聊什么是CommonJs和Es Module及它们的区别》
《带你轻松了解数据结构之Map》
《这些工作中用到的JavaScript小技巧你都晓得吗?》
《【倡议珍藏】分享一些工作中罕用的Git命令及非凡问题场景怎么解决》
《你真的理解ES6中的函数个性么?》
发表回复