網站首頁 編程語言 正文
RN的相對路徑地獄
我剛接觸RN時,就發現所有的demo中給出來的路徑都是相對路徑,我自己的練習項目中想改成自定義的絕對路徑,但是發現并沒有我做前端時熟悉的webpack.config.js
,所以也就不知道該怎么改了。伴隨著RN的學習和開發練習,我的代碼也變得越來越多,越來越復雜,我逐漸發現RN的相對路徑越來越麻煩,比如我把某個文件移動到另一個不同深度的文件夾中,那么就需要把所有引用這個文件的地方都改一遍。請看下面這些例子,這些小點點,晃得我眼暈。
import { deviceInfo } from '../../utilities/device' ... import { API, DEV } from '../../../config/api' ... import { Headers } from '../../widgets/nav' ... import { basic } from '../../styles/theme' ...
RN的自定義路徑需要的依賴
作為前端開發時熟悉的webpack.config.js,在RN的腳手架中并沒有看到,但是要知道,webpack.config.js里用來自定義import路徑的resolve.alias最終目的也是讓babel在翻譯代碼時,能夠找到正確的路徑。所以RN里想用自定義的引用路徑,還得靠babel的配置才行。
- 安裝依賴
babel-plugin-module-resolver
yarn add babel-plugin-module-resolver -D
- 配置babel.config.js
plugins: [ [ require.resolve('babel-plugin-module-resolver'), { extensions: ['.js', '.jsx'], root: ['.'], alias: { utilities: './src/utilities', config: './src/config', widgets: './src/widgets', styles: './src/styles' } }, ], ]
- 配置jsconfig.json
{ "compilerOptions": { "baseUrl": ".", "paths": { "utilities": ["./src/utilities/*"], "config": ["./src/config/*"], "widgets": ["./src/widgets/*"], "styles": ["./src/styles/*"], } } }
RN腳手架默認的情況下,是沒有這個文件的,需要自己新建。
- 把相對路徑都改成自定義引用
import { deviceInfo } from 'utilities/device' ... import { API, DEV } from 'config/api' ... import { Headers } from 'widgets/nav' ... import { basic } from 'styles/theme' ...
- 重啟
yarn start
此時我發現,自定義的路徑并沒有起作用,Metro報錯說找不到路徑。因為我的所有React組件的定義,都是以jsx為文件后綴的。我在項目里使用了eslint-plugin-react這個eslint插件,它的推薦規則就是要React的組件的文件后綴為jsx。當我把文件后綴改成js后,代碼就能正常運行了。
我覺得文件后綴為jsx的情況下,jsconfig.js也能通過某種方式起作用,可惜我現在還不知道。
解決自定義引用路徑導致的eslint報錯問題
如果你使用了eslint-plugin-react,那么當你用js作為React組件的文件后綴時,eslint會報錯。為了解決自定義引用路徑問題,我只能犧牲掉這條eslint的rule。在.eslintrc.js加上這一條rule,就可以解決掉它。
rules:[ 'react/jsx-filename-extension': ['error', { extensions: ['.js', '.jsx']}] ]
如果你使用了airbnb或者單獨引用了eslint-plugin-import,那么當你利用babel-plugin-module-resolver成功解析了自定義引用路徑的同時,eslint就會因為無法找到這些路徑而報錯。因為涉及到整個項目的所有文件,不可能在文件里簡單的ignore某個rule來消除錯誤,而是需要在.eslintrc.js里覆蓋eslint-plugin-import的import/no-unresolved這條rule才行。
rules:[ 'import/no-unresolved': [2, { ignore: ['^utilities', '^config', '^widgets', '^styles']}] ]
至此,解決了自定義引用路徑問題,同時避免了eslint的報錯。
原文鏈接:https://juejin.cn/post/7152855292114386951
相關推薦
- 2024-03-20 版本沖突error in ./src/styles/element-variables.scss:N
- 2022-04-22 git報錯Please make sure you have the correct access
- 2023-07-30 vscode自定義用戶代碼片段
- 2022-10-03 go?Antlr重構腳本解釋器實現示例_Golang
- 2022-07-09 python如何獲取Prometheus監控數據_python
- 2022-03-13 使用vs2022在.net6中調試帶typescript的靜態頁面_基礎應用
- 2023-01-01 C語言實現輸出各種三角形_C 語言
- 2022-03-30 Python機器學習應用之樸素貝葉斯篇_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支