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/
하지만 localhost:3000/items/1
번들 파일에 절대 경로가 삽입되지 않았기 때문에 다른 URL에서 앱을 방문하려고하면 실패 합니다. html 파일이로드되면 /items
react-router가 아직로드되지 않았기 때문에 존재하지 않는 디렉토리 에서 js 파일을 찾습니다 .
HtmlWebpackPlugin이 절대 경로로 파일을 주입하도록하려면 어떻게해야하나요? Express는 내 /dist
디렉토리가 아닌 루트에서 파일을 찾습니다 /dist/items/main-...min.js
. 아니면 문제를 해결하기 위해 Express 서버를 변경할 수 있습니까?
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>
답변
웹팩 구성에서 publicPath를 설정해보십시오.
output.publicPath = '/'
HtmlWebpackPlugin은 publicPath를 사용하여 주입의 URL을 앞에 추가합니다.
또 다른 옵션은 <head>
html 템플릿 의 기본 href를 설정 하여 문서에있는 모든 상대 URL의 기본 URL을 지정하는 것입니다.
<base href="http://localhost:3000/">
답변
사실, 나는 넣어야했다 :
output.publicPath: './';
비 ROOT 경로에서 작동하도록하기 위해. 동시에 나는 주사했다 :
baseUrl: './'
으로
<base href="<%= htmlWebpackPlugin.options.metadata.baseUrl %>">
두 매개 변수를 모두 설정하면 마치 매력처럼 작동했습니다.
답변
웹팩 구성에서
config.output.publicPath = ''
index.html에서
<base href="/someurl/" />
해야합니다.