react + typescript + webpack 如何設定 webpack alias

閱讀時間約 7 分鐘
raw-image

前言

create react app 是一個可以快速設定 react 專案的一個工具,在建立專案時已經把 babel,webpack 都已經預先封裝設置好,如果我們要修改 webpack alias 設定該如何設定呢

什麼是 alias

alias 在 webpack 設定意義叫做,檔案路徑別名系統,意思就是可以使用一種別稱,讓 webpack 抓取這個別稱找到這個檔案路徑,這篇章節教大家如何設定 webpack alias 可以不需要那麼辛苦的一直點點斜

例子

// 平常引入檔案方式
import Menu from '../../components/Menu.jsx'
// 使用 alias 之後
import Menu from '@/components/Menu.jsx'

建置步驟

建置步驟有四部,我會一步一步教大家

建立 react 專案

建立新的 react 專案並開啟專案,crate-react-app 為建立專案工具,react-demo 專案名稱,建立好之後將專案打開

create-react-app react-demo

執行 npm run eject 指令

在此專案可打開 package.json 裡面有個 scripts 部分,裡面提供了一些指令

"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test"
"eject": "react-scripts eject"
}

在這裡面可以看到 eject 這個 script,使用 npm 執行以下使令,會將 webpack 設定建置好

npm run eject

安裝 tsconfig-paths-webpack-plugin 套件

使用 npm 安裝 tsconfig-paths-webpack-plugin 套件,這個套件可以設置那些副檔可以執行 alias

npm install tsconfig-paths-webpack-plugin

接著打開 config/webpack.config.js 檔案,先將 tsconfig-paths-webpack-plugin 套件引入

const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');

再往下滑到 alias 物件設定自定義檔案別名

alias: {

// Support React Native Web

// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/

'react-native': 'react-native-web',

// Allows for better profiling with ReactDevTools

...( isEnvProductionProfile && {

'react-dom$': 'react-dom/profiling',

'scheduler/tracing':'scheduler/tracing-profiling',
}),

...(modules. webpackAliases || {}),

// 自定義絕對路徑

'@': paths.appSrc
}

在滑到 plugins 設定 tsconfig-paths-webpack-plugin 套件,設定可支援 alias 之副檔

plugins: [

// Prevents users from importing files from outside of src/ (or node_modules/).

// This often causes confusion because we only process files within src/ with babel.

// To fix this, we prevent you from importing files out of src/ -- if you'd like to,

// please link the files into your node_modules/ and let module-resolution kick in.

// Make sure your source files are compiled, as they will not be processed in any way.

new ModuleScopePlugin(paths.appSrc, [

paths.appPackageJson,

reactRefreshRuntimeEntry,

reactRefreshWebpackPluginRuntimeEntry,

babelRuntimeEntry,

babelRuntimeEntryHelpers,

babelRuntimeRegenerator,

]),

// 自定義副檔存取快取路徑
new TsconfigPathsPlugin({
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx', '.sass', '.scss', '.css']
})
]

最後設定 tsconfig.json 檔案

我們須加上 baseUrl 和 paths 這兩個物件,baseUrl 為這個專案初始路徑,paths 則是設定檔案路近別名,設定好以下就可以使用啦

"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}



avatar-img
10會員
49內容數
d3.js 圖形
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
本篇參與的主題活動
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
此筆記僅以個人理解方式記錄 環境準備 我們這邊以 Bootstrap 5 的卡片元件來展示,要準備的有: Bootstrap 5 CDN Card(卡片) template React CDN React React 起手式,引用 CDN、綁定 root、指定渲染 dom。 <
React Hooks 是 React 16.8 中引入的一組新的 API,允許你在函數組件中使用狀態和其他 React 特性,而不需要寫類組件。 狀態管理: useState 鉤子允許在函數組件中添加狀態。 副作用管理: useEffect 鉤子允許處理副作用,如數據獲取、訂閱和手動 DO
06. React Forms: Dynamically Add New Input Fields On Click || Learn React Through Mini Projects
07. React useContext Hook (User Context Example) || Learn React Through Mini Projects
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
本文將引導您使用簡單的 Header 組件,學習如何使用 render 和 screen 來渲染和查詢元素。我們將探索如何測試文字和字元計數功能,並使用 userEvent 模擬使用者操作。了解如何使用斷言來確保測試結果正確。同時,我們將處理包含 fetch 的異步測試,並介紹 waitFor 函數
Thumbnail
React 表單驗證是一種技術與使用者體驗的設計,讓使用者能夠即時檢查輸入的資料並修正,提升使用者的使用體驗,並確保資料的正確性。
Thumbnail
useContext 是一種 React hook,讓我們能夠直接取用其他元件的 Context,而無須層層傳遞 props,進而使程式碼簡潔易讀。
Thumbnail
Todo App是一個很好學習程式語言的專案開始,JayLin來帶大家手把手用TypeScript | React | TailwildCSS 來做一個小專案
Thumbnail
想要知道如何用最新技術來製作一個App嗎? 跟著JayLin用React | Redux Tool Kit | TypeScript | TailwildCSS 來製作一個Drawing App
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
此筆記僅以個人理解方式記錄 環境準備 我們這邊以 Bootstrap 5 的卡片元件來展示,要準備的有: Bootstrap 5 CDN Card(卡片) template React CDN React React 起手式,引用 CDN、綁定 root、指定渲染 dom。 <
React Hooks 是 React 16.8 中引入的一組新的 API,允許你在函數組件中使用狀態和其他 React 特性,而不需要寫類組件。 狀態管理: useState 鉤子允許在函數組件中添加狀態。 副作用管理: useEffect 鉤子允許處理副作用,如數據獲取、訂閱和手動 DO
06. React Forms: Dynamically Add New Input Fields On Click || Learn React Through Mini Projects
07. React useContext Hook (User Context Example) || Learn React Through Mini Projects
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
本文將引導您使用簡單的 Header 組件,學習如何使用 render 和 screen 來渲染和查詢元素。我們將探索如何測試文字和字元計數功能,並使用 userEvent 模擬使用者操作。了解如何使用斷言來確保測試結果正確。同時,我們將處理包含 fetch 的異步測試,並介紹 waitFor 函數
Thumbnail
React 表單驗證是一種技術與使用者體驗的設計,讓使用者能夠即時檢查輸入的資料並修正,提升使用者的使用體驗,並確保資料的正確性。
Thumbnail
useContext 是一種 React hook,讓我們能夠直接取用其他元件的 Context,而無須層層傳遞 props,進而使程式碼簡潔易讀。
Thumbnail
Todo App是一個很好學習程式語言的專案開始,JayLin來帶大家手把手用TypeScript | React | TailwildCSS 來做一個小專案
Thumbnail
想要知道如何用最新技術來製作一個App嗎? 跟著JayLin用React | Redux Tool Kit | TypeScript | TailwildCSS 來製作一個Drawing App