#reactjs #webpack #webpack-dev-server #webpack-4
#reactjs #webpack #webpack-dev-server #webpack-4
Вопрос:
Я пытаюсь использовать динамический импорт с помощью React.lazy. Код довольно прост
import React, { Component, Suspense, lazy, } from 'react';
const BlazyComponent = lazy(() => {
return import('./blazy');
});
class Main extends Component {
render () {
return (<Suspense fallback={<div>Loading...</div>}>
<BlazyComponent/>
</Suspense>);
}
}
export default Main;
Итак, когда я запускаю Webpack devServer, консоль браузера выдает ошибку
index.js:114 Uncaught (in promise) Error: Loading chunk 0 failed.
(missing: http://domain/build/0.js)
at HTMLScriptElement.onScriptComplete (index.js:114)
Как я вижу, пакеты index.css
и index.js
успешно загружены из http://domain:8080/build/test/index.css
и http://domain:8080/build/test/index.js
.
Но фрагмент загружается с http://domain/build/0.js
(webpack devServer игнорирует порт). Как я могу принудительно загрузить фрагмент из http://domain:8080/build/0.js
.
Конфигурация Webpack
entry: {
'test/index': [ 'babel-polyfill', './resources/assets/modules/test/index', ],
},
output: {
path: path.resolve(__dirname, './public/build/'),
publicPath: '/build/',
filename: '[name].js',
chunkFilename: '[name].js',
},
...
devServer: {
host: 'domain',
port: 8080,
},
PS. Я знаю, что могу использовать переменные окружения, но ищу более элегантное решение
Ответ №1:
Попробуйте изменить свой publicPath
на http://domain:8080/build/
?
Смотрите https://webpack.js.org/guides/public-path/#environment-based
Комментарии:
1. Хорошо, это работает нормально, но требует управления
publicPath
переменными среды для разработки и производства. Итак, я думаю, что есть более элегантное решение 😉2. Я обновил свой ответ. Вы можете использовать базовую среду env
ASSET_PATH
или через__webpack_public_path__
.