跳至主要內容

使用 Public 資料夾

注意事項:此功能使用 react-scripts@0.5.0 或更新的版本。

變更 HTML

public 資料夾包含 HTML 檔案,你可以進行調整,例如設定 網頁標題。在建置過程中,包含已編譯程式碼的 <script> 標籤會自動新增到其中。

在模組系統外新增資源

你也可以將其他資源新增到 public 資料夾中。

請注意,我們通常鼓勵你改在 JavaScript 檔案中「匯入」資源。例如,請參閱有關 新增樣式表新增圖片和字型 的部分。此機制提供了許多優點:

  • 指令碼和樣式表會經過縮小和彙整,以避免額外網路請求。
  • 遺漏的檔案會造成編譯錯誤,而非使用者端的 404 錯誤。
  • 產生的檔案名稱包含內容雜湊值,因此你不必擔心瀏覽器快取過舊版本。

不過,你可以使用 跳脫密道 來在模組系統外新增資源。

如果您將檔案放入 public 資料夾,它將會由 webpack 處理。相反,它會原封不動地複製到 build 資料夾。如需參照 public 資料夾中的資源,您需要使用名為 PUBLIC_URL 的環境變數。

index.html 內部,您可以這樣使用它

<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />

只有 public 資料夾中的檔案才可以使用 %PUBLIC_URL% 前置詞存取。如果您需要使用 srcnode_modules 中的檔案,則必須將它複製到那裡,明確表明您要將此檔案作為 build 的一部分。

當您執行 npm run build 時,Create React App 會用正確的絕對路徑取代 %PUBLIC_URL%,以便您的專案在使用用戶端路由或將其託管在非根 URL 上時也能順利運作。

在 JavaScript 程式碼中,您可以使用 process.env.PUBLIC_URL 來達到類似的目的

render() {
// Note: this is an escape hatch and should be used sparingly!
// Normally we recommend using `import` for getting asset URLs
// as described in “Adding Images and Fonts” above this section.
return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
}

請記住此方法的缺點

  • public 資料夾中的所有檔案都不會經過後處理或縮小化。
  • 遺失的檔案在編譯時不會被呼叫,並會導致使用者產生 404 錯誤。
  • 結果檔名不會包含內容雜湊,因此您需要新增查詢引數或在每次變更時重新命名它們。

何時使用 public 資料夾

通常我們建議從 JavaScript 匯入 樣式表圖片和字型。當有許多不常見的情況時,public 資料夾作為替代方案非常有用

  • 您需要一個在 build 輸出的檔案中具有特定名稱的檔案,例如 manifest.webmanifest
  • 您有成千上萬的圖片,並且需要動態參照他們的路徑。
  • 您想要在綑綁程式碼之外包含一個小型腳本,例如 pace.js
  • 某些函式庫可能與 webpack 不相容,而您別無選擇,只能將其包含為 <script> 標籤。

請注意,如果您新增一個宣告全域變數的 <script> ,則應在下一章節中閱讀主題 使用全域變數,其中說明如何參照變數。