641 webpack配置和css處理:默認打包,配置文件,依賴圖,css-loader,style-loader,less-loader,browserslist,PostCSS,postcss-loader,autoprefixer,postcss-preset-env


webpack默認打包



index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- <script src="./src/index.js" type="module"></script> -->
  <script src="./dist/main.js"></script>
</body>
</html>

index.js

import { sum, mul } from './js/math.js';
const { dateFormat, priceFormat } = require('./js/format');

console.log(sum(20, 30));
console.log(mul(20, 30));

console.log(dateFormat("1213"));
console.log(priceFormat("1213"));


format.js

const dateFormat = (date) => {
  return "2020-12-12";
}

const priceFormat = (price) => {
  return "100.00";
}

module.exports = {
  dateFormat,
  priceFormat
}


math.js

export const sum = (num1, num2) => {
  return num1 + num2;
}

export const mul = (num1, num2) => {
  return num1 * num2;
}


webpack默認打包


Webpack配置文件


wk.config.js

const path = require('path');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, './build')
  },
  mode: 'development',
}

指定配置文件


Webpack依賴圖


編寫案例代碼


css-loader的使用


css-loader的使用方案


loader配置方式


Loader的配置代碼


認識style-loader


配置style-loader


如何處理less文件?


Less工具處理


less-loader處理


瀏覽器兼容性


瀏覽器市場占有率

我們工具通常會查詢的一個網站就是caniuse;
https://caniuse.com/usage-table


認識browserslist工具


瀏覽器查詢過程


Browserslist編寫規則


命令行使用browserslist

windows系統不需要加后面的參數,只需要寫npx browserslist即可。


配置browserslist


默認配置和條件關系


認識PostCSS工具


命令行使用postcss


插件autoprefixer


postcss-loader


單獨的postcss配置文件


postcss-preset-env


舉個例子


目錄結構


wk.config.js

const path = require('path');

module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    // 必須是一個絕對路徑
    path: path.resolve(__dirname, "./build")
  },
  module: {
    rules: [
      { 
        // 規則使用正則表達式
        test: /\.css$/, // 匹配資源
        use: [
          // { loader: "css-loader" },
          // 注意: 編寫順序(從下往上, 從右往做, 從后往前)
          "style-loader", 
          // 為了回頭處理@import的css文件,寫成對象
          {
            loader: "css-loader",
            options: {
              importLoaders: 1 
            }
          },
          "postcss-loader"
        ],
        // loader: "css-loader"
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          {
            loader: "css-loader",
            options: {
              // @import的css文件,回頭能被前面的"less-loader"、"postcss-loader"處理
              importLoaders: 2 
            }
          },
          "postcss-loader",
          "less-loader"
        ]
      }
    ]
  }
}

main.js

import { sum, mul } from './js/math.js';
const { dateFormat, priceFormat } = require('./js/format');
import "./js/test";
import "./js/component";

console.log(sum(20, 30));
console.log(mul(20, 30));

console.log(dateFormat("1213"));
console.log(priceFormat("1213"));

.browserslistrc

>1%
last 2 version
not dead

postcss.config.js

module.exports = {
  plugins: [
    'postcss-preset-env'
  ]
}

package.json

{
  "name": "01_learn_webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack --config wk.config.js"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "autoprefixer": "^10.2.3",
    "css-loader": "^5.0.1",
    "less": "^4.1.0",
    "less-loader": "^7.2.1",
    "postcss": "^8.2.4",
    "postcss-cli": "^8.3.1",
    "postcss-loader": "^4.1.0",
    "postcss-preset-env": "^6.7.0",
    "style-loader": "^2.0.0",
    "webpack": "^5.14.0",
    "webpack-cli": "^4.3.1"
  }
}


component.js

// import "css-loader!../css/index.css";
import "../css/index.css";
import "../css/component.less";

function component() {
  const element = document.createElement("div");
  element.innerHTML = ["Hello", "Webpack"].join(" ");
  element.className = "content";
  return element;
}

document.body.appendChild(component());

component.less

@fontSize: 50px;
@fontWeight: 700;

.content {
  font-size: @fontSize;
  font-weight: @fontWeight;
}

index.css

@import "./test.css";

.demo {
  color: red;
}

test.css

.content {
  /* 十六進制通常是寫幾位 */
  color: #12345678;
}

:fullscreen {
  color: red;
}

.content {
  user-select: none;
  transition: all 2s ease;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM