【webpack】初始化

webpack

          • 舊項目的問題
          • 下一代構建工具 Vite
      • 主角 :webpack
          • 安裝webpack
          • 1,mode的選項
          • 2,使用source map 精準定位錯誤行數
          • 3,使用watch mode(觀察模式),自動運行
          • 4,使用webpack-dev-server工具,自動刷新
      • 自定義webpack配置初始化代碼
      • webpack處理資源模塊(asset module)
          • asset/resource
          • asset/inline
          • asset/source
          • asset
      • 管理資源(loader)
          • css-loader
          • 抽離style里代碼,并壓縮
          • 知識點補充,在css里面加載圖片資源
          • 知識點補充,加載fonts字體
          • 知識點補充,加載csv,tsv,xml數據
          • 自定義JSON模塊parser
      • 使用babel-loader轉換js文件
          • regeneratorRuntime插件

舊項目的問題

作用域問題

  • return 拋出賦給變量

如何解決代碼拆分問題

  • module.exports()拋出模塊
  • require()接受模塊

如何讓游覽器支持node模塊

下一代構建工具 Vite

主角 :webpack

  • 它可以幫助我們打包javascript的應用程序,
  • 同時支持es的模塊化以及commonjs
  • 可以擴展支持很多的靜態資源打包,圖片,字體,樣式等
  • 只能理解js和json這樣的文件
  • 出色的功能:除了引入js還可以使用內置的資源模塊

引用千峰教育一個圖:
在這里插入圖片描述

安裝webpack

安1:npm init -y
安2:npm install webpack webpack-cli --save-dev
安3: npm install html-webpack-plugin -D

  • 執行完前兩個會產生三個文件,第三個是為了自動引入資源
    在這里插入圖片描述
1,mode的選項
  mode: 'none', //不展示編譯時候的警告,還可以選擇'development'
2,使用source map 精準定位錯誤行數
  • 當我們游覽器報錯,點擊報錯內容時,發現報錯的指向不是源文件時候,不好排除錯誤
 devtool: 'inline-source-map', //可以精準的鎖定出錯位置行數,并且打包出的文件不再是亂碼
3,使用watch mode(觀察模式),自動運行
  • 每次編譯代碼,都需要手動運行npx webpack會顯得很麻煩
  • 運行 npx webpack --watch
  • 但還有點問題,現在弄完還需要游覽器再刷新一下,如何自動刷新游覽器!
4,使用webpack-dev-server工具,自動刷新
  • 安4. npm install webpack-dev-server -D
  • 配置里面添加
 devServer: {static: './dist', //需要熱模塊更新的文件},

自定義webpack配置初始化代碼

在本地開發環境里安裝,所以加-D

// path.resolve(_dirname,'./dist'),獲取文件的絕對路徑,參數一,代表當前文件的物理路徑,參數2是基于這個路徑下的文件路徑
const path = require('path');
// HtmlWebpackPlugin,可以自動引入資源文件
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {// 入口文件的地址entry: './src/index.js',output: {// 指定輸出文件的文件名filename: 'budle.js',// 指定輸出路徑,這個要設置為絕對路徑,:webpack.config.js配置文件中----" dirname " 必須為兩個下劃線“_ _”,否則打包報錯path: path.resolve(__dirname, './dist'),// 打包前清理上一次無用的打包內容clean: true,},// 不展示編譯時候的警告,還可以選擇'development'mode: 'none',// 可以精準的鎖定出錯位置行數,并且打包出的文件不再是亂碼devtool: 'inline-source-map',plugins: [// 創建一個插件的實例對象new HtmlWebpackPlugin({template: './index.html', // 模板filename: 'app.html', // 輸出的文件名,inject: 'body', // 自定義標簽的放置位置,默認在head}),],//運行路徑devServer: {static: './dist', //需要熱模塊更新的文件},
};

webpack處理資源模塊(asset module)

  • 資源模塊的類型,稱之為asset module type
  • 四種類型
asset/resource
  • 會發送一個單獨的文件并導出URL
output: {filename: 'budle.js',path: path.resolve(_dirname, './dist'), clean: true, // assetModuleFilename: 'images/test.png'//方法2:定義資源模塊的輸出包名//但是,不能每個文件名都叫這個名,所以要根據文件的內容來生成一個哈希的字符串,生成后綴名assetModuleFilename: 'images/[contenthash].[ext]', },
moduleS: {//加載資源模塊rules: [{test: /\.png$/,type: 'asset/resource', //資源類型generator: {//方法1,優先級高filename: 'images/[contenthash][ext]', //修改生成的文件的文件名},},],},
asset/inline
  • 會導出一個資源的Data URL,但不會產生打包文件
  • 一般生成的就是游覽器可查看的base64格式的路徑
{test: /\.svg$/,type: 'asset/inline', //資源類型},
asset/source
  • 會導出資源的源代碼,但不會產生打包文件
{test: /\.txt$/,type: 'asset/source', //資源類型},
asset
  • 會在導出一個Data URL和發送一個單獨的文件之間自動進行選擇
  • 自動的在resource和inline之間進行選擇,小于8kb的文件,將會
    視為inline模塊,否則會被視為resource模塊類型

在這里插入圖片描述

管理資源(loader)

  • 為了解決webpack只能理解js和json這樣的文件,理解不了其他文件的問題
  • 支持鏈式調用且逆加載
css-loader

npm install css-loader -D
npm install style-loader -D //會幫助我們把css放置到頁面上

  • 配置一下
{test: /\.css$/,use: ['style-loader', 'css-loader'],//順序不能顛倒
},

在這里插入圖片描述

  • 想要加載less,sass等這樣的css文件
  • npm install less-loader less -D
  • 配置完需要重新啟動一下
{test: /\.(css|less)$/,use: ['style-loader', 'css-loader''less-loader'],//順序不能顛倒
},
抽離style里代碼,并壓縮
  • 目前,上面的css和頁面在一起
  • 想要將style里面的這些代碼抽離出來
  • npm Install mini-css-extract-plugin -D
  • 依賴webpack5環境,接下來開始配置
  • 步驟一:導入
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
//MiniCssExtractPlugin,把css提取到單獨的文件中
  • 步驟二:實例化一下

  • 并且可以修改存放文件名
    在這里插入圖片描述
    在這里插入圖片描述

  • 步驟三:添加loader
    在這里插入圖片描述

  • 步驟四:文件打包了,但沒有壓縮

  • 解決思路

  • npm install css-minimizer-webpack-plugin -D

  • 步驟一:導入

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
//壓縮css文件
  • 步驟二:在優化的配置里面配置
    在這里插入圖片描述
  • 步驟三:
    在這里插入圖片描述
知識點補充,在css里面加載圖片資源

在這里插入圖片描述

知識點補充,加載fonts字體
  • 像字體這樣的其他資源如何可以接收并加載任何文件,然后將其輸出到構建目錄

  • 步驟一,配置
    在這里插入圖片描述

  • 步驟二.
    在這里插入圖片描述在這里插入圖片描述

知識點補充,加載csv,tsv,xml數據
  • 可以使用csv-loader和xml-loader
  • npm install csv-loader xml-loader -D
    在這里插入圖片描述
  • 步驟二:在使用的js文件中引入要使用的文件即可
import Xml from './assets/data.xml';
import Csv from './assets/data.csv';
自定義JSON模塊parser
  • 替代特定的webpack loader,可以將任何toml,yaml或json5文件作為JSON模塊導入
  • npm install toml yaml json5 -D
    在這里插入圖片描述
  • 步驟三,正常引入使用即可
    在這里插入圖片描述
    在這里插入圖片描述

使用babel-loader轉換js文件

  • npm install babel-loader @babel/core @babel/preset-env -D
  • 因為webpack只能做js模塊化的打包,并不能轉化js里的代碼,所以babel-loader轉換
  • 將ES6轉換成低版本的游覽器能夠識別的ES代碼
  • 注意點;這樣寫會將nodemodule中的js也編譯,所以需要排除一下
  • 使用exclude屬性
    引用千峰教育
regeneratorRuntime插件
  • 運行上述babel-loader的項目,發現有報錯regeneratorRuntime

  • regeneratorRuntime是webpack打包生成的全局輔助函數,由babel生成,用于兼容async/await的語法
    在這里插入圖片描述

  • 最后,修改一下配置
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211978.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux_CentOS_7.9配置oracle sqlplus、rman實現上下按鍵切換歷史命令等便捷效率功能之簡易記錄

配置oracle sqlplus以及rman可以上下按鍵切換歷史命令等便捷效率功能 設置前提是已經yum安裝了rlwrap軟件具體軟件下載及配置參考文章http://t.csdnimg.cn/iXuVK su - oracleVim .bash_profile ## 文件中增加如下的別名設置 ---------------- alias sqlplusrlwrap sqlplus…

c++的算術生成算法

#include<numeric>//算術生成算法頭文件 要加的頭文件#include<numeric> accumulate 是 C 標準庫中的一個算法函數&#xff0c;用于計算給定范圍內的數值之和&#xff0c;它位于 <numeric> 頭文件中。它的函數原型如下&#xff1a; template <class In…

Matlab之帶時區的日期時間數據和不帶時區的日期時間數據相互轉換方法

使用datetime和datetimezone函數 通過使用datetime和datetimezone函數&#xff0c;可以將帶時區的日期時間數據轉換為不帶時區的數據&#xff0c;或者將不帶時區的日期時間數據轉換為帶時區的數據。這樣可以滿足坐標區的配置要求。 1、將帶時區的日期時間數據轉換為不帶時區的…

理解IoC容器初始化

問題&#xff1a;當自己面試或者背誦八股文時&#xff0c;會背到各種各樣的spring底層的東西&#xff0c;自己越看越迷糊。 OS&#xff1a;不知道兄弟們是不是也會這樣&#xff1f;如果大家沒有說明我太菜了。 原因&#xff1a;就是自己學的框架越來越多&#xff0c;很多框架…

?types --- 動態類型創建和內置類型名稱?

目錄 動態類型創建 標準解釋器類型 附加工具類和函數 協程工具函數 源代碼: Lib/types.py 此模塊定義了一些工具函數&#xff0c;用于協助動態創建新的類型。 它還為某些對象類型定義了名稱&#xff0c;這些名稱由標準 Python 解釋器所使用&#xff0c;但并不像內置的 int …

代碼規范及開發工具

代碼規范及開發工具&#xff1a; 前端&#xff08;vscode、idea&#xff09;: JavaScript規范&#xff1a; 1. 谷歌開源項目風格指南&#xff1a;JavaScript 、TypeScript篇 https://zh-google-styleguide.readthedocs.io/en/latest/google-typescript-…

P8625.生命之樹

求最大的子樹之和 維護包含當前節點的最大子樹之和就好了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e610; ll w[N]; vector<int>g[N]; ll f[N]; ll res;ll dfs(int u,int father){f[u] w[u];for(auto &t:g[u]){if(tf…

2023.12.10 homework

五年級一元一次方程

C語言作業6

1.聯合體也會完全浪費空間 2.在結構體中 注意好偏移量和實際是第幾個的區別 那個對齊數是和偏移量有關的 (就用我之前的那個就行了) 3. 字節序 才有大小端

參數占位符#{}和${}

#是預處理而$是直接替換 Mybatis在處理#{}時&#xff0c;會將SQL中的#{}替換成占位符&#xff1f;&#xff0c;再使用preparedStatement的set方法來賦值。而Mybatis在處理 時&#xff0c;是將 {}時&#xff0c;是將 時&#xff0c;是將{}直接替換成變量的值 我們分別使用#{}和…

Redis AOF源碼解析

本文取3.0版本分析&#xff08;各個版本差異很大&#xff0c;4.0以上才有aof和rdb混合模式&#xff09; 觸發時機 1、bgrewriteaofCommand函數觸發&#xff0c;即在Redis server服務上運行bgrewriteaof命令。 1-1、當前已經有 AOF 重寫的子進程正在執行&#xff0c;重復執行bg…

JavaScript-Window對象

Window對象 BOM&#xff1a;瀏覽器對象模型 定時器-延時函數 JavaScript內置的一個用來讓代碼延遲執行的函數&#xff0c;setTimeout setTimeout(回調函數&#xff0c;等待的毫秒數);setTimeout僅僅只執行依次&#xff0c;所以可以理解為就是把一段代碼延遲執行&#xff0c…

網絡協議疑點記錄

1.RIP, OSPF,BGP 首先什么是自治系統:治系統就是幾個路由器組成了一個小團體 ?,小團體內部使用專用的協議進行通信,而小團體和小團體之間也使用專用的協議進行通信。 IGP RIP 距離矢量路由算法,bellman-ford算法,每個路由節點知道全局的路由信息,通過和鄰居交換信息得…

五.單行函數

單行函數 1.函數的理解1.1什么是函數1.2不同DBMS函數的差異1.3MySQL的內置函數分類 2.數值函數2.1基本函數2.2角度與弧度互換函數2.3三角函數2.4指數與對數2.5進制間的轉換 3.字符串函數4.日期和時間函數4.1獲取日期、時間4.2日期與時間戳的轉換4.3獲取月份、星期、星期數、天數…

perl處理base64、md5、SHA-1、SHA-256的計算

使用perl可以進行base64、md5、SHA-1、SHA-256的計算&#xff0c;使用也非常方便&#xff0c;下面是示例代碼&#xff1a; #! /usr/bin/perl use v5.14; use MIME::Base64; use Digest;my $test_str hello world;# 測試base64 say encode_base64($test_str);# 測試md5 my $md…

【Copilot】Edge瀏覽器的copilot消失了怎么辦

這種原因&#xff0c;可能是因為你的ip地址的不在這個服務的允許范圍內。你需要重新使用之前出現copilot的ip地址&#xff0c;然后退出edge的賬號&#xff0c;重新登錄一遍&#xff0c;最后重啟edge&#xff0c;就能夠使得copilot側邊欄重新出現了。

【已解決】ModuleNotFoundError: No module named ‘pandas‘

問題描述 ModuleNotFoundError: No module named ‘pandas’ 解決辦法 pip install pandas 完結撒花 熟悉的人相遇&#xff0c;就像久旱等到的甘霖

計算機基礎知識66

Auth的補充 #概念&#xff1a;是django 的一個app&#xff0c;關于用戶的登錄&#xff0c;退出&#xff0c;注冊... # 配置文件中配置&#xff1a;表會被遷移 INSTALLED_APPS [django.contrib.auth,] # auth有哪些表---權限控制&#xff1a; Permission&#xff1a;auth_permi…

Java 中連接 SQL 數據庫

在 Java 中&#xff0c;連接 SQL 數據庫通常使用 JDBC&#xff08;Java Database Connectivity&#xff09;。以下是使用 IntelliJ IDEA 連接 SQL 數據庫的一般步驟&#xff1a; 1. 引入 JDBC 驅動&#xff1a;首先&#xff0c;你需要下載并引入與你所使用的數據庫相對應的 JD…

Linux 導入、導出 MySQL 數據庫命令

一、導出數據庫 1、導出完整數據&#xff1a;表結構數據 mysqldump -u用戶名 -p 數據庫名 > 數據庫名.sql 舉例&#xff1a;以下命令可以導出 abc 數據庫的數據和表結構 /usr/local/mysql/bin/mysqldump -uroot -p abc > abc.sql2、只導出表結構 mysqldump -u用戶名 -p…