output.publicPath
string
function
對於按需加載(on-demand-load)或加載外部資源(external resources)(如圖片、文件等)來說,output.publicPath 是很重要的選項。如果指定了一個錯誤的值,則在加載這些資源時會收到 404 錯誤。
此選項指定在瀏覽器中所引用的「此輸出目錄對應的公開 URL」。相對 URL(relative URL) 會被相對於 HTML 頁面(或 <base>
標簽)解析。相對於服務的 URL(Server-relative URL),相對於協議的 URL(protocol-relative URL) 或絕對 URL(absolute URL) 也可是可能用到的,或者有時必須用到,例如:當將資源托管到 CDN 時。
該選項的值是以 runtime(運行時) 或 loader(載入時) 所創建的每個 URL 為前綴。因此,在多數情況下,此選項的值都會以/
結束。
默認值是一個空字符串 ""
。
簡單規則如下:output.path
中的 URL 以 HTML 頁面為基准。
path: path.resolve(__dirname, "public/assets"), publicPath: "https://cdn.example.com/assets/"
對於這個配置:
publicPath: "/assets/", chunkFilename: "[id].chunk.js"
對於一個 chunk 請求,看起來像這樣 /assets/4.chunk.js
。
對於一個輸出 HTML 的 loader 可能會像這樣輸出:
<link href="/assets/spinner.gif" />
或者在加載 CSS 的一個圖片時:
background-image: url(/assets/spinner.gif);
webpack-dev-server 也會默認從 publicPath
為基准,使用它來決定在哪個目錄下啟用服務,來訪問 webpack 輸出的文件。
注意,參數中的 [hash]
將會被替換為編譯過程(compilation) 的 hash。詳細信息請查看指南 - 緩存。
示例:
publicPath: "https://cdn.example.com/assets/", // CDN(總是 HTTPS 協議) publicPath: "//cdn.example.com/assets/", // CDN (協議相同) publicPath: "/assets/", // 相對於服務(server-relative) publicPath: "assets/", // 相對於 HTML 頁面 publicPath: "../assets/", // 相對於 HTML 頁面 publicPath: "", // 相對於 HTML 頁面(目錄相同)
在編譯時(compile time)無法知道輸出文件的 publicPath
的情況下,可以留空,然后在入口文件(entry file)處使用自由變量(free variable) __webpack_public_path__
,以便在運行時(runtime)進行動態設置。
__webpack_public_path__ = myRuntimePublicPath // 應用程序入口的其他部分
有關 __webpack_public_path__
的更多信息,請查看此討論。