初衷: 整理一些常用的loader分享给大家,方便知道在什么场景下该用什么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文件, 处理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"
]
}
]
}
}
用途: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/,
},
]
}
}
用途: 用于补充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/,
},
]
}
}
用途: 将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"}]
]
}
}
},
]
}
}
用途: 用于配置项目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页面代码片段赋值给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"
}
]
}
}
用途: 用于处理文件类型资源,如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也是处理图片类型资源,只不过它与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目录
}
}
]
}
]
}
}
用途: 我们在编译图片时,都是使用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>
<img src="./src/img/pic.jpg" alt="">
</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文件,如我们自己搭建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()
]
}
用途: 用于检查代码是否符合规范,是否存在语法错误。
安装
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/
}
]
}
}
webpack的loaders是一块很重要的组成部分。我们都知道webpack是用于打包的,里面的所有资源都是“模块”,内部实现了对模块资源进行加载的机制。loader的作用为了转换应用程序的资源文件。
知道在webpack中使用scss,less之类的东西,需要配置style-loader, css-loader, sass-loader这些,但是在vue-cli的项目中会报Invalid CSS after ...load the styles的错误,这是由于loader重复加载导致的。
我们在写webpack配置文件的时候,应该有注意到经常用到loader这个配置项,那么loader是用来做什么的呢?loader其实是用来将源文件经过转化处理之后再输出新文件。
方案一:使用lib-flexible包:使用flexible包方式,安装 lib-flexible 包和 px2rem-loader包;方案二:使用less或者sass等CSS 预处理语言写适配方案:基准按照设计图尺寸,但是缺点是不通用,不同页面可能设计图基准尺寸不同
那是因为,webpack 默认只支持打包 Javascript 模块,比如 import m1 from m1.js,而对于引入了图片模块,webpack 并不知道该如何处理,因此在打包的时候就报错了。对于上述打包图片资源报错的问题
通过配置 name 和 outputPath 选项,可以自定义图片名称和路径。打包后,dist 目录下会生成一个 images 文件夹;url-loader 将图片转化成 base 编码字符串和 main.js 打包在一起。
`babel-loader` 是一个 npm 包,它使得 webpack 可以通过 babel 转译 JavaScript 代码。babel 的功能在于「代码转译」,具体一点,即将目标代码转译为能够符合期望语法规范的代码。在转译的过程中
项目中常常会引入一些图片资源,什么jpg|jpeg|png|gif|ico之类的,正常情况下,我们需要做一下性能优化,看看如何大而化小、小而化了,提升生产环境资源加载速度。所以,本文记录一下大图片使用image-webpack-loader插件压缩一下
用过webpack的朋友一定知道webpack中有个loader的概念,用于加载并处理不同类型文件,比如css-loader、url-loader。loader的执行顺序取决于webpack内部对文件树解析、遍历的顺序。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!