欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Webpack打包圖片-js-vue 案例解析

 更新時間:2023年11月06日 10:05:49   作者:coder!mq  
在開發(fā)中我們會有各種各樣的模塊依賴,這些模塊可能來自于自己編寫的代碼,也可能來自第三方庫,本文給大家介紹Webpack打包圖片-js-vue的相關知識,感興趣的朋友跟隨小編一起看看吧

一、Webpack打包圖片

1.加載圖片資源的準備

為了演示我們項目中可以加載圖片,我們需要在項目中使用圖片,比較常見的使用圖片的方式是兩種:

  • img元素,設置src屬性;
  • 其他元素(比如div),設置background-image的css屬性;

2.認識asset module type

我們當前使用的webpack版本是webpack5:

  • 在webpack5之前,加載這些資源我們需要使用一些loader,比如raw-loader 、url-loader、file-loader;
  • 在webpack5開始,我們可以直接使用資源模塊類型(asset module type),來替代上面的這些loader;

資源模塊類型(asset module type),通過添加 4 種新的模塊類型,來替換所有這些 loader:

  • asset/resource 發(fā)送一個單獨的文件并導出 URL。
  • 之前通過使用 file-loader 實現(xiàn);
  • asset/inline 導出一個資源的 data URI。
  • 之前通過使用 url-loader 實現(xiàn);
  • asset/source 導出資源的源代碼
  • 之前通過使用 raw-loader 實現(xiàn);
  • asset 在導出一個 data URI 和發(fā)送一個單獨的文件之間自動選擇。
  • 之前通過使用 url-loader,并且配置資源體積限制實現(xiàn);

3.asset module type的使用

比如加載圖片,我們可以使用下面的方式:

{
    test: /\.(png|svg|jpg|jpeg|gif)$/i,
    type: "asset/resource"    
}

但是,如何可以自定義文件的輸出路徑和文件名呢?

  • 方式一:修改output,添加assetModuleFilename屬性;
  • 方式二:在Rule中,添加一個generator屬性,并且設置filename;
output: {
    filename: "js/bundle.js",
    path: path.resolve(__dirname, "./dist"),
    assetModuleFilename: "img/[name].[hash:6][ext]"    
}
{
    test: /\.(png|svg|jpg|jpeg|gif)$/i,
    type: "asset/resource",
    generator: {
        filename: "img/[name].[hash:6][ext]"
    }    
}

我們這里介紹幾個最常用的placeholder:

  • [ext]: 處理文件的擴展名;
  • [name]:處理文件的名稱;
  • [hash]:文件的內容,使用MD4的散列函數(shù)處理,生成的一個128位的hash值(32個十六進制);

4.url-loader的limit效果

開發(fā)中我們往往是小的圖片需要轉換,但是大的圖片直接使用圖片即可

  • 這是因為小的圖片轉換base64之后可以和頁面一起被請求,減少不必要的請求過程;
  • 而大的圖片也進行轉換,反而會影響頁面的請求速度;

我們需要兩個步驟來實現(xiàn):

  • 步驟一:將type修改為asset;
  • 步驟二:添加一個parser屬性,并且制定dataUrl的條件,添加maxSize屬性;
module.exports = {
    rules: [
        {
            test: /\.(png|svg|jpg|jpeg|gif)$/i,
            type: "asset",
            generator: {
                filename: "img/[name].[hash:6][ext]"
            },
            parser: {
                dataUrlCondition: {
                    maxSize: 100 * 1024
                }
            }
        }
    ]
}

二、babel

1.為什么需要babel

事實上,在開發(fā)中我們很少直接去接觸babel,但是babel對于前端開發(fā)來說,目前是不可缺少的一部分:

  • 開發(fā)中,我們想要使用ES6+的語法,想要使用TypeScript,開發(fā)React項目,它們都是離不開Babel的;
  • 所以,學習Babel對于我們理解代碼從編寫到線上的轉變過程至關重要;

那么,Babel到底是什么呢?

  • Babel是一個工具鏈,主要用于舊瀏覽器或者環(huán)境中將ECMAScript 2015+代碼轉換為向后兼容版本的JavaScript;
  • 包括:語法轉換、源代碼轉換等;

2.babel命令行的使用

babel本身可以作為一個獨立的工具(和postcss一樣),不和webpack等構建工具配置來單獨使用。

如果我們希望在命令行嘗試使用babel,需要安裝如下庫:

  • @babel/core:babel的核心代碼,必須安裝;
  • @babel/cli:可以讓我們在命令行使用babel;
npm install -D @babel/core @babel/cli

使用babel來處理我們的源代碼:

  • src:是源文件的目錄;
  • –out-dir:指定要輸出的文件夾dist;
npx babel src --out-dir dist

3.babel插件的使用

比如我們需要轉換箭頭函數(shù),那么我們就可以使用箭頭函數(shù)轉換相關的插件

npm install @babel/plugin-transform-arrow-functions -D
npx babel src --out-dir dist --plugins=@babel/plugin-transform-arrow-functions

查看轉換后的結果:我們會發(fā)現(xiàn) const 并沒有轉成 var

  • 這是因為 plugin-transform-arrow-functions,并沒有提供這樣的功能;
  • 我們需要使用 plugin-transform-block-scoping 來完成這樣的功能;
npm install @babel/plugin-transform-block-scoping -D 
npx babel src --out-dir dist --plugins=@babel/plugin-transform-block-scoping
						,@babel/plugin-transform-arrow-functions

4.babel的預設preset

但是如果要轉換的內容過多,一個個設置是比較麻煩的,我們可以使用預設(preset):

后面我們再具體來講預設代表的含義;

安裝@babel/preset-env預設:

npm install -D @babel/preset-env

執(zhí)行如下命令:

npx babel src --out-dir dist --presets=@babel/preset-env

5.babel-loader

在實際開發(fā)中,我們通常會在構建工具中通過配置babel來對其進行使用的,比如在webpack中。

那么我們就需要去安裝相關的依賴:

如果之前已經安裝了@babel/core,那么這里不需要再次安裝;

npm install babel-loader -D

我們可以設置一個規(guī)則,在加載js文件時,使用我們的babel:

module.exports = {
	module: {
		rules: [
			{
				test: /\.m?js$/,
				use: {
					loader: "babel-loader"
				}
			}
		]
	}
}

6.babel-preset

如果我們一個個去安裝使用插件,那么需要手動來管理大量的babel插件,我們可以直接給webpack提供一個preset,webpack會根據(jù)我們的預設來加載對應的插件列表,并且將其傳遞給babel。

比如常見的預設有三個:

  • env
  • react
  • TypeScript

安裝preset-env:

npm install @babel/preset-env
module.exports = {
    module: {
        rules: [
			{
				test: /\.m?js$/,
				use: {
					loader: "babel-loader",
                    options: {
                        presets: [
                            ["@babel/preset-env"]
                        ]
                    }
				}
			}
		]
    }
}

三、加載Vue文件

1.編寫App.vue代碼

在開發(fā)中我們會編寫Vue相關的代碼,webpack可以對Vue代碼進行解析:

接下來我們編寫自己的App.vue代碼;

<template>
  <h2>{{ title }}</h2>
</template>
<script>
export default {
  data() {
    return {
      title: "我是標題"
    }
  }
}
</script>

2.App.vue的打包過程

我們對代碼打包會報錯:我們需要合適的Loader來處理文件。

這個時候我們需要使用vue-loader:

npm install vue-loader -D

在webpack的模板規(guī)則中進行配置:

{
    test: /\.vue$/,
    loader: "vue-loader"
}

3.@vue/compiler-sfc

打包依然會報錯,這是因為我們必須添加@vue/compiler-sfc來對template進行解析:

npm install @vue/compiler-sfc -D

另外我們需要配置對應的Vue插件:

const { VueLoaderPlugin } = require('vue-loader/dist/index')
module.exports = {
    module: {},
    plugins: [
        new VueLoaderPlugin()
    ]
}

重新打包即可支持App.vue的寫法

另外,我們也可以編寫其他的.vue文件來編寫自己的組件;

四、resolve模塊解析

1.resolve模塊解析

resolve用于設置模塊如何被解析

  • 在開發(fā)中我們會有各種各樣的模塊依賴,這些模塊可能來自于自己編寫的代碼,也可能來自第三方庫;
  • resolve可以幫助webpack從每個 require/import 語句中,找到需要引入到合適的模塊代碼;
  • webpack 使用 enhanced-resolve 來解析文件路徑;

webpack能解析三種文件路徑:

絕對路徑

  • 由于已經獲得文件的絕對路徑,因此不需要再做進一步解析。

相對路徑

  • 在這種情況下,使用 import 或 require 的資源文件所處的目錄,被認為是上下文目錄;
  • 在 import/require 中給定的相對路徑,會拼接此上下文路徑,來生成模塊的絕對路徑;

模塊路徑

  • 在 resolve.modules中指定的所有目錄檢索模塊;
    • 默認值是 [‘node_modules’],所以默認會從node_modules中查找文件;
  • 我們可以通過設置別名的方式來替換初識模塊路徑,具體后面講解alias的配置;

2.文件還是文件夾

如果是一個文件:

  • 如果文件具有擴展名,則直接打包文件;
  • 否則,將使用 resolve.extensions選項作為文件擴展名解析;

如果是一個文件夾:

  • 會在文件夾中根據(jù) resolve.mainFiles配置選項中指定的文件順序查找;
    • resolve.mainFiles的默認值是 [‘index’];
    • 再根據(jù) resolve.extensions來解析擴展名;

3.extensions和alias配置

extensions是解析到文件時自動添加擴展名

默認值是 [‘.wasm’, ‘.mjs’, ‘.js’, ‘.json’];所以如果我們代碼中想要添加加載 .vue 或者 jsx 或者 ts 等文件時,我們必須自己寫上擴展名;

另一個非常好用的功能是配置別名alias:

  • 特別是當我們項目的目錄結構比較深的時候,或者一個文件的路徑可能需要 …/…/…/這種路徑片段;
  • 我們可以給某些常見的路徑起一個別名;
module.exports = {
  resolve: {
    extensions: [".js", ".json", ".vue", ".jsx", ".ts", ".tsx"],
    alias: {
      utils: path.resolve(__dirname, "./src/utils")
    }
  },
}

到此這篇關于Webpack打包圖片-js-vue的文章就介紹到這了,更多相關Webpack打包圖片內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue前端實現(xiàn)導出頁面為word的兩種方法代碼

    vue前端實現(xiàn)導出頁面為word的兩種方法代碼

    在前端開發(fā)中我們常常需要將頁面頁面為word文件,這篇文章主要給大家介紹了關于vue前端實現(xiàn)導出頁面為word的兩種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Vue + Echarts頁面內存占用高的問題解決方案

    Vue + Echarts頁面內存占用高的問題解決方案

    點擊左側的菜單可以切換不同的看板,有些看板頁面中的報表比較多,用戶多次切換后頁面的內存占用可以上升為GB級,嚴重時導致頁面內存溢出,使得頁面崩潰,極大影響了用戶體驗,本文給大家介紹Vue + Echarts頁面內存占用高的問題解決方案,感興趣的朋友一起看看吧
    2024-02-02
  • Vue實現(xiàn)hash模式網(wǎng)址方式(就是那種帶#的網(wǎng)址、井號url)

    Vue實現(xiàn)hash模式網(wǎng)址方式(就是那種帶#的網(wǎng)址、井號url)

    這篇文章主要介紹了Vue實現(xiàn)hash模式網(wǎng)址方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • VUE項目運行失敗原因及解決辦法圖解(以vscode為例)

    VUE項目運行失敗原因及解決辦法圖解(以vscode為例)

    記錄一下踩坑,前幾天從同事手上接手了一個Vue的項目,下面這篇文章主要給大家介紹了關于VUE項目運行失敗原因及解決辦法的相關資料,本文以vscode為例,需要的朋友可以參考下
    2023-06-06
  • Vue項目中env文件的作用和配置詳解

    Vue項目中env文件的作用和配置詳解

    Vue項目中,.env文件是運行項目時的環(huán)境配置文件,但是在實際開發(fā)過程中,有本地開發(fā)環(huán)境、測試環(huán)境、生產環(huán)境等,不同環(huán)境對應的配置會不一樣,本文給大家介紹了Vue項目中env文件的作用和配置,需要的朋友可以參考下
    2024-12-12
  • element?時間選擇器禁用選擇的使用示例

    element?時間選擇器禁用選擇的使用示例

    最近做項目遇到的一個功能,禁止用戶在輸入內容的時候選擇今天以前的日期或者包含今日的日期,本文主要介紹了element?時間選擇器禁用選擇的使用示例,感興趣的可以了解一下
    2023-09-09
  • vue-loader教程介紹

    vue-loader教程介紹

    本篇文章主要介紹了vue-loader教程介紹,vue-loader就是告訴webpack如何將vue格式的文件轉換成js。有興趣的可以了解一下
    2017-06-06
  • vue項目打包成桌面快捷方式(electron)的方法

    vue項目打包成桌面快捷方式(electron)的方法

    本文主要介紹了vue項目打包成桌面快捷方式(electron)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Vue實現(xiàn)動態(tài)創(chuàng)建和刪除數(shù)據(jù)的方法

    Vue實現(xiàn)動態(tài)創(chuàng)建和刪除數(shù)據(jù)的方法

    下面小編就為大家分享一篇Vue實現(xiàn)動態(tài)創(chuàng)建和刪除數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue+ElementUI怎么處理超大表單實例講解

    Vue+ElementUI怎么處理超大表單實例講解

    在本篇文章里小編給大家整理的是一篇關于Vue+ElementUI怎么處理超大表單實例講解內容,以后需要的朋友可以跟著學習參考下。
    2021-11-11

最新評論