アプリケーションのパスが変更された時にwebpackのfile-loaderがファイルパスの先頭にスラッシュを付けないので下部のディレクトリを見に行って404になってしまう問題の解決法がわからない
環境
- electron
- webpack
- babel-loader
- url-loader
- file-loader
- react-router
問題
import
やrequire
でurl-loaderのfallbackであるfile-loaderが出力するパスの先頭にはデフォルトではスラッシュが付いていません.
よってReact Routerなどを使って下部のディレクトリ/foo/
に移動した際.
ルートに置いてあるbar.png
ファイルを読みに行く時.
本来/bar.png
にアクセスして欲しいところ,
/foo/bar.png
を読みに行ってしまい404エラーになります.
私が休日の内に取られていた対策法
/${require('bar.png')}
のように全てのrequireに/
を追加していました.
つらい.
設定を変更して解決
調べた結果webpack.config.js
のloaders
にpublicPath: '/'
を書けば自動的にルートにスラッシュが追加されることがわかりました.
{
test: /\.png$/,
loader: 'url-loader',
options: {
limit: 8192,
publicPath: '/',
},
},
これにて一見落着なのですが,
何故最初からこうなっていないのかわかりません.
普通絶対パスで参照する時(useRelativePath
がfalse
になっている時)は先頭にスラッシュを付けて欲しいと思うのですが.
issueを見ると何か理由がありそうですが,
英語弱者のためあまりわからず…
解決してなかった
Electronのdevelopmentモードだとこれで問題ないのですが,
productionビルドでpublicPathを/
にしていると正常に読み込まれないことが分かりました.
解決しました
原因がわかって解決しました.
Electronのproduction環境でasarにある画像などのリソースがnet::ERR_FILE_NOT_FOUNDで読み込めないのはBrowserRouterが原因でした - ncaq