[英]HtmlWebpackPlugin injects relative path files which breaks when loading non-root website paths
我使用webpack和HtmlWebpackPlugin將捆綁的js和css注入到html模板文件中。
new HtmlWebpackPlugin({
template: 'client/index.tpl.html',
inject: 'body',
filename: 'index.html'
}),
它會生成以下html文件。
<!doctype html>
<html lang="en">
<head>
...
<link href="main-295c5189923694ec44ac.min.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
<script src="main-295c5189923694ec44ac.min.js"></script>
</body>
</html>
這在訪問應用程序localhost:3000/
的根目錄時工作正常,但在我嘗試從另一個URL訪問應用程序時失敗,例如localhost:3000/items/1
因為捆綁的文件未注入絕對路徑。 加載html文件時,它將在non-exist /items
目錄中查找js文件,因為react-router尚未加載。
如何讓HtmlWebpackPlugin注入具有絕對路徑的文件,所以express會在my /dist
目錄的根目錄而不是/dist/items/main-...min.js
? 或者也許我可以更改我的快速服務器來解決這個問題?
app.use(express.static(__dirname + '/../dist'));
app.get('*', function response(req, res) {
res.sendFile(path.join(__dirname, '../dist/index.html'));
});
基本上,我只需要得到這條線:
<script src="main...js"></script>
在源的開頭有一個斜杠。
<script src="/main...js></script>
嘗試在webpack配置中設置publicPath:
output.publicPath = '/'
HtmlWebpackPlugin使用publicPath來預先注入注入的url。
另一個選項是在html模板的<head>
中設置基本href,以指定文檔中所有相對URL的基本URL。
<base href="http://localhost:3000/">
事實上,我不得不說:
output.publicPath: './';
為了讓它在非ROOT路徑下工作。 同時我注射:
baseUrl: './'
成
<base href="<%= htmlWebpackPlugin.options.metadata.baseUrl %>">
有了這兩個參數設置,它就像一個魅力。
在webpack配置中
config.output.publicPath = ''
在index.html中
<base href="/someurl/" />
這應該做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.