Мы работаем над приложением Vue.js, которое построено с помощью веб-пакета.Требование заключается в том, что наше приложение должно быть доступно не только по базовому пути /
, но и по специальному пути, чтобы приложение могло быть доступно рядом с другими службами.С помощью веб-пакетов \__webpack_public_path__
я смог на лету установить базовый путь относительно указанного базового пути, например, если текущий путь содержит /foo/
, базовый путь должен начинаться с .../foo/
.
* 1006.* При навигации по приложению все выглядит хорошо, пока я открываю приложение по базовому пути.Проблема в том, что после перехода к любому дополнительному пути и перезагрузки страницы, файлы не могут быть найдены.Сервер сначала предоставит
index.html
, и там мне нужно использовать относительные пути, поскольку базовый путь должен определяться динамически.Но если откроется любой другой путь, кроме базового, относительные пути в index.html не будут указывать на правильный bundle.js, и
\__webpack_public_path__
не будет установлен ...
В настоящее время мы имеемполучил две точки входа в наш конфиг веб-пакета.Первый - это JS-файл, в котором глобальная переменная \__webpack_public_path__
будет установлена относительно текущего посещенного URL-адреса.Допустим, базовый путь должен начинаться с /foo/
, а посещенный URL-адрес - https://www.host.com/some/path/foo/sub/sub1
.Таким образом, относительно базовый путь будет /some/path/foo/
, а активы будут найдены по адресу /some/path/foo/assets
.Все остальные пути, используемые в конфигурации веб-пакета, как в загрузчике файлов или любом другом плагине, являются относительными.
// webpack.config.js
...
module.exports = (env, argv) => ({
...
entry: ['@babel/polyfill', './src/main/js/constants/webpack-public-path.js', './src/main/js/index.js'],
output: {
filename: 'assets/js/bundle.js',
path: path.resolve(__dirname, relativeOutputPath),
publicPath: '/'
},
module: {
...
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'file-loader',
options: {
name: 'assets/fonts/[name].[ext]'
}
}
...
},
...
});
// webpack-public-path.js
__webpack_public_path__ = (() => {
const BASE_PATH = '/foo/';
let path = window.location.pathname;
return path.includes(BASE_PATH) ? path.substring(0, path.indexOf(BASE_PATH) + BASE_PATH.length) : '/';
})();
Кто-нибудь когда-либо сталкивался с подобной проблемой?Возможно ли, что относительные пути в index.html
могут быть определены позже или могут быть определены во время сборки с помощью веб-пакета?