React使用公共文件夾public問(wèn)題
React使用公共文件夾public
在剛學(xué)React/Vue的時(shí)候,配合webpack腳手架學(xué)習(xí)的過(guò)程中,碰到一個(gè)問(wèn)題會(huì)非常疑惑,比如在React中有個(gè)Public文件夾可以放靜態(tài)資源,但是在src目錄中同樣有個(gè)assets文件夾,這個(gè)同樣也是放靜態(tài)資源的,這個(gè)就很困惑了,為何放置靜態(tài)資源的地方會(huì)有兩個(gè)?
兩者區(qū)別
其實(shí)放在兩個(gè)文件夾區(qū)別就在于是否會(huì)被webpack所處理,如果您將文件放入該public文件夾,webpack 將不會(huì)處理它,在你打包的時(shí)候,會(huì)將public文件夾直接復(fù)制一份到你構(gòu)建出來(lái)的文件夾中。
而src/assets目錄的文件(前提你在js中有引入),它會(huì)被webpack編譯,比如圖片,如果你的圖片小于你在webpack中的loader下設(shè)置的limit大?。膳渲茫?,它會(huì)被編譯成base64,從而在實(shí)際項(xiàng)目中減少http請(qǐng)求
放置在src/assets目錄有以下幾點(diǎn)好處:
- 腳本和樣式表被縮小并捆綁在一起以避免額外的網(wǎng)絡(luò)請(qǐng)求。
- 缺少文件會(huì)導(dǎo)致編譯錯(cuò)誤,而不是用戶的404錯(cuò)誤。
- 結(jié)果文件名包含內(nèi)容哈希,因此您無(wú)需擔(dān)心瀏覽器緩存舊版本。
當(dāng)然,在實(shí)際項(xiàng)目中,公共文件夾public還是有它的作用的,如果你希望你的文件不被編譯,比如jquery.min.js,或者壓縮好的js插件等,你就可以把文件放在public文件夾中,這樣還可以減少文件構(gòu)建時(shí)間,可以減少構(gòu)建文件的大小。
換過(guò)來(lái)想,如果你把所有靜態(tài)資源全部放在assets文件夾中,你會(huì)發(fā)現(xiàn)最后打包出來(lái)的文件很大,導(dǎo)致首頁(yè)白屏?xí)r間過(guò)長(zhǎng),所以,你可以把一些不會(huì)改動(dòng)的靜態(tài)文件放到public中。
在React中使用公共文件夾public
如果在index.html中,你可以像這樣去使用它:
<img src="%PUBLIC_URL%/image/poster.jpeg" alt="">
只有前綴public可以訪問(wèn)文件夾中的文件%PUBLIC_URL%。如果需要使用src或中的文件node_modules,則必須將其復(fù)制到那里以明確指定將此文件作為構(gòu)建的一部分的意圖。
當(dāng)運(yùn)行npm run build,Create React App將替換%PUBLIC_URL%為正確的絕對(duì)路徑,因此即使使用客戶端路由或?qū)⑵渫泄茉诜歉鵘RL上,項(xiàng)目也會(huì)正常工作。
在JavaScript代碼中,可以process.env.PUBLIC_URL出于類似目的使用:
render() {
? ? return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
}React腳手架public文件介紹
public文件夾下index.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<!-- %PUBLIC_URL%代表public文件夾的路徑 -->
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" rel="external nofollow" />
<!-- 開(kāi)啟理想視口,用于做移動(dòng)端網(wǎng)頁(yè)的適配 -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- 用于配置瀏覽器頁(yè)簽+地址欄的顏色(僅支持安卓手機(jī)瀏覽器) -->
<meta name="theme-color" content="red" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<!-- 用于指定網(wǎng)頁(yè)添加到手機(jī)主屏幕后的圖標(biāo) -->
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" rel="external nofollow" />
<!-- 應(yīng)用加殼時(shí)的配置文件 -->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" rel="external nofollow" />
<title>React App</title>
</head>
<body>
<!-- 若瀏覽器不支持js則展示標(biāo)簽中的內(nèi)容 -->
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React中super()和super(props)的區(qū)別小結(jié)
本文主要介紹了React中super()和super(props)的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
使用Jenkins部署React項(xiàng)目的方法步驟
這篇文章主要介紹了使用Jenkins部署React項(xiàng)目的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
前端 react 實(shí)現(xiàn)圖片上傳前壓縮(縮率圖)
這篇文章主要介紹了前端 react 實(shí)現(xiàn)圖片上傳前壓縮(縮率圖),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
React實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的方法
這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
react滾動(dòng)加載useInfiniteScroll?詳解
使用useInfiniteScroll?hook可以處理檢測(cè)用戶何時(shí)滾動(dòng)到頁(yè)面底部的邏輯,并觸發(fā)回調(diào)函數(shù)以加載更多數(shù)據(jù),它還提供了一種簡(jiǎn)單的方法來(lái)管理加載和錯(cuò)誤消息的狀態(tài),今天通過(guò)實(shí)例代碼介紹下react滾動(dòng)加載useInfiniteScroll?相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2023-09-09

