@Bodrosh

Как изменить путь async chunks в webpack?

Использую Laravel + Vue, изменил основную директорию на site, файлы собираются в неё:

webpack.mix.js
mix.setResourceRoot('/site')
mix.setPublicPath('public/site')

mix.js('resources/js/app.js', 'public/site/js')
 .vue()
.sass('resources/sass/app.scss','public/site/css')
.version()


Файлы успешно собираются где нужно:
http://127.0.0.1:8000/site/js/app.js
http://127.0.0.1:8000/site/js/resources_js_components_my_component_vue.js
...


Обычные компоненты vue работают, но асинхронные не хотят (объявленные через функцию vue defineAsyncComponent), app.js хочет их по адресу /js/ , а не /site/js/ где они лежат, и получается ошибка:

Uncaught (in promise) ChunkLoadError: Loading chunk resources_js_components_my_component_vue failed.
(missing: http://127.0.0.1:8000/js/resources_js_components_my_component_vue.js)


Как ему сказать, чтобы он их тоже искал в /site/js?

webpack This function allow to reference async chunks

/* webpack/runtime/get javascript chunk filename */
/******/ 	(() => {
/******/ 		// This function allow to reference async chunks
/******/ 		__webpack_require__.u = (chunkId) => {
/******/ 			// return url for filenames not based on template
/******/ 			if ({"resources_js_components_my_component_vue":1}[chunkId]) return "js/" + chunkId + ".js";
/******/ 			// return url for filenames based on template
/******/ 			return undefined;
/******/ 		};
/******/ 	})();

  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@Bodrosh Автор вопроса
На вскидку, помогло добавление publicPath в output (еще тестирую)
mix.setResourceRoot('/site')
mix.setPublicPath('public/site')

mix.webpackConfig(webpack => {
    return {
        output: {
            publicPath: '/site/'
        },
})


Это добавляет нужный путь:
/* webpack/runtime/publicPath */
/******/ 	(() => {
/******/ 		__webpack_require__.p = "/site/";
/******/ 	})();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы