初衷: 整理一些經常使用的loader分享給你們,方便知道在什麼場景下該用什麼loader。若是有大佬都懂悄悄左滑就行,不喜勿噴。javascript
適合人羣: 前端初級開發。css
用途: 用於將css
編譯完成的樣式,掛載到頁面style
標籤上。須要注意loader執行順序,style-loader放到第一位,由於loader都是從下往上執行,最後所有編譯完成掛載到style上html
安裝前端
cnpm i style-loader -D
複製代碼
配置vue
webpack.config.jsjava
module.exports = {
module: {
rules: [
{
test: /\.css/,
use: ["style-loader"]
}
]
}
}
複製代碼
用途: 用於識別.css
文件, 處理css
必須配合style-loader
共同使用,只安裝css-loader
樣式不會生效。node
安裝webpack
cnpm i css-loader style-loader -D
複製代碼
配置git
webpack.config.jsgithub
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
複製代碼
配置
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]
,解決方案有
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
複製代碼
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/
}
]
}
}
複製代碼
謝謝你讀完本篇文章,但願對你能有所幫助,若有問題歡迎各位指正。
我是蛙人(✿◡‿◡),若是以爲寫得能夠的話,請點個贊吧❤。
感興趣的小夥伴能夠加入 [ 前端娛樂圈交流羣 ] 歡迎你們一塊兒來交流討論
寫做不易,「點贊」+「在看」+「轉發」 謝謝支持❤
《聊聊什麼是CommonJs和Es Module及它們的區別》