Заставить сервер разработчиков Webpack записывать на диск в среде разработки с помощью «create-react-app» s

#webpack #create-react-app #webpack-dev-server

#webpack #create-react-app #webpack-dev-server

Вопрос:

У меня есть проект, который был создан с create-react-app помощью и был «извлечен». Для моего варианта использования мне нужно обновить конфигурацию Webpack, чтобы выводить файлы в ./build каталог в среде разработки, как это происходит в рабочей среде.

Я добавил devServer свойство в свою конфигурацию:

 devServer: {
    writeToDisk: true,
}
  

и я обновил output свойство, чтобы иметь a path в среде разработки:

 // I changed this:
output: {
    path: isEnvProduction ? paths.appBuild : undefined,
    ...
}

// To this:
output: {
    path: paths.appBuild,
    ...
}
  

Когда я запускаю yarn start , файлы в build каталог не записываются.

Что я должен делать по-другому?

Ответ №1:

Проблема в том, что create-react-app не настраивается webpack-dev-server с использованием devServer свойства config/webpack.config.js .

Вместо этого он использует webpack-dev-server непосредственно scripts/start.js следующий код:

 const createDevServerConfig = require("../config/webpackDevServer.config");

// ...

const serverConfig = createDevServerConfig(
    proxyConfig,
    urls.lanUrlForConfig
);
const devServer = new WebpackDevServer(compiler, serverConfig);
// Launch WebpackDevServer.
devServer.listen(port, HOST, (err) => {
    // ...
}
  

Другими словами, чтобы изменить поведение сервера разработки, вы должны обновлять config/webpackDevServer.config , а не устанавливать devServer свойство config/webpack.config.js .

В этом случае мне просто нужно было добавить writeToDisk свойство:

 module.exports = function (proxy, allowedHost) {
    return {
        writeToDisk: true,
        //...
    }
}
  

Это приведет к тому, что выходные файлы будут записываться ./dist по умолчанию. Чтобы установить другой каталог, все равно необходимо также обновить output.path в config/webpack.config.js :

 output: {
    path: paths.appBuild,
    ...
}