2.webpack是什么?搭建vue腳手架

上一期,我們搭建了一個vue的基礎(chǔ)工程,接下來,我們開始完善它,讓它能夠在我們的日常開發(fā)中使用

上一期回顧:http://www.itdecent.cn/p/8e23b64da517

本期大綱

  1. 使用Eslint規(guī)范化代碼
  2. 在工程中支持scss
  3. 支持資源文件識別

1. 使用Eslint規(guī)范化代碼

ESLint 是一個廣泛使用的 JavaScript 代碼檢查工具(也稱為 linter)。以下是它的主要特點(diǎn)和用途:

  1. 代碼質(zhì)量檢查

    • 幫助發(fā)現(xiàn)代碼中的錯誤和潛在問題
    • 確保代碼風(fēng)格的一致性
    • 識別可能的 bug 和反模式
  2. 主要功能

    • 語法錯誤檢查
    • 代碼風(fēng)格規(guī)范
    • 最佳實(shí)踐建議
    • 自動修復(fù)能力
      接下來,我們安裝eslint,并向工程添加EslintWebpackPlugin插件,那么,它們兩個有啥區(qū)別呢?
      簡單說一下,其實(shí)EslintWebpackPlugin是將ESLint 檢查集成到 Webpack 構(gòu)建流程中,不需要單獨(dú)運(yùn)行eslint的命令
npm init @eslint/config
npm install eslint-webpack-plugin --save-dev

關(guān)于eslint的具體配置還是蠻多的,我就不細(xì)說了,大家可以去官網(wǎng)看下,說實(shí)話,我也沒看完,都是邊用邊找
https://zh-hans.eslint.org/docs/latest/use/getting-started
下面具體說下EslintWebpackPlugin

常用的我整理了下,其它的我放到下面,有興趣的可以自己去官網(wǎng)查看

 new ESLintPlugin({
      context: path.resolve(__dirname, "src"), // 指定文件根目錄
      // extensions: ["js", "jsx"], // 指定要檢查的文件擴(kuò)展名
      exclude: "node_modules", // 排除的文件或目錄
      // fix: true, // 啟用自動修復(fù)
    }),

選項(xiàng)說明

  • cache: 啟用緩存以減少執(zhí)行時間,默認(rèn)值為 true1。

  • cacheLocation: 指定緩存位置,默認(rèn)值為 node_modules/.cache/eslint-webpack-plugin/.eslintcache1。

  • configType: 指定 ESLint 配置類型,可以是 eslintrcflat,默認(rèn)值為 eslintrc1。

  • context: 指定文件根目錄,默認(rèn)值為 compiler.context2。

  • eslintPath: 指定 ESLint 實(shí)例的路徑,默認(rèn)值為 eslint2。

  • extensions: 指定要檢查的文件擴(kuò)展名,默認(rèn)值為 'js'2。

  • exclude: 指定要排除的文件或目錄,默認(rèn)值為 'node_modules'2

  • fix: 啟用自動修復(fù)功能,默認(rèn)值為 false2。

  • formatter: 指定格式化程序,默認(rèn)值為 'stylish'2。

  • lintDirtyModulesOnly: 僅檢查更改的文件,默認(rèn)值為 false2

  • threads: 啟用多線程,默認(rèn)值為 false2

錯誤和警告處理

  • emitError: 是否始終發(fā)出錯誤,默認(rèn)值為 true1。

  • emitWarning: 是否始終發(fā)出警告,默認(rèn)值為 true1。

  • failOnError: 是否在有錯誤時使模塊構(gòu)建失敗,默認(rèn)值為 true1。

  • failOnWarning: 是否在有警告時使模塊構(gòu)建失敗,默認(rèn)值為 false1。

  • quiet: 是否僅處理和報告錯誤,忽略警告,默認(rèn)值為 false1。

  • outputReport: 將錯誤輸出到文件,默認(rèn)值為 false1。

2.在工程中支持scss

首先,我們加入sass-loader

npm install sass-loader sass webpack --save-dev

emmm ....搞了半天,我們?nèi)绻胍R別vue里面的修飾符,并且顯示樣式,還需要加入css-loader,vue-style-loader

這里說明一下,vue-style-loader,他是vue官方基于style-loader開發(fā)的一款用于處理 Vue 組件中的樣式的loader,關(guān)于style-loader,他的作用主要有

  • 將 CSS 注入到 DOM 中
  • 通過創(chuàng)建 <style> 標(biāo)簽的方式,把 CSS 插入到 HTML 文件的 <head> 中
    但是如果在大型的項(xiàng)目中,大多數(shù)還是推薦mini-css-extract-plugin,因?yàn)樗梢詫?CSS 提取到單獨(dú)的文件中,這樣可以更好地利用瀏覽器緩存。這個暫時不去研究,先回到vue-style-loader,以后有機(jī)會專門寫點(diǎn)東西說說這方面的東西

命令敲一下;

npm install css-loader
npm install vue-style-loader
npm install sass-loader

在webpack.config.js里面配置一下loader

 module: {
    rules: [
      {
        test: /\.s[ac]ss$/i,
        use: ["vue-style-loader", "css-loader","sass-loader"],
      }
    ],
  },

3.接下來,我們配置資源文件相關(guān)的

在webpack5以前,我們處理圖片資源通過 file-loader 和 url-loader 進(jìn)行處理

現(xiàn)在 Webpack5 已經(jīng)將兩個 Loader 功能內(nèi)置到 Webpack 里了,我們只需要簡單配置即可處理圖片資源

      {
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
      }

Tips:現(xiàn)在我們有了一個相對完整的vue腳手架,下一節(jié),我們開始做一些便于編碼和開發(fā)的配置,比如自動格式化代碼,開發(fā)環(huán)境區(qū)分,資源文件提示等,下面貼一下本次結(jié)束之后的完整配置文件

 
const { VueLoaderPlugin } = require("vue-loader");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const ESLintPlugin = require("eslint-webpack-plugin");
const path = require("path");
module.exports = {
  mode: "development",
  entry: "./src/main.js",
  output: {
    path: __dirname + "/dist",
  },
  resolve: {
    //別名
    alias: {
        //resolve 獲取絕對路徑的API,join也可以獲取; @ 也可以用 $,就是個 別名
      '@': path.resolve(__dirname, './src')    // 設(shè)置 src的絕對路徑 
    } 
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: "vue-loader",
      },
      {
        test: /\.css$/,
        use: ["vue-style-loader", "css-loader"],
      },
      {
        test: /\.s[ac]ss$/i,
        use: ["vue-style-loader", "css-loader","sass-loader"],
      },
      {
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
      },
    ],
  },
  devServer: {
    static: "./dist", // 開發(fā)服務(wù)器的靜態(tài)文件目錄
    open: true, // 是否自動打開瀏覽器
    port: 3000, // 端口號
  },
  plugins: [
    new VueLoaderPlugin(),
    new ESLintPlugin({
      context: path.resolve(__dirname, "src"), // 指定文件根目錄
      extensions: ["js", "jsx"], // 指定要檢查的文件擴(kuò)展名
      exclude: "node_modules", // 排除的文件或目錄
      // fix: true, // 啟用自動修復(fù)
    }),
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容