автоматическое назначение порта webpack-dev-server - PullRequest
1 голос
/ 06 мая 2019

Я хочу установить автоматическое назначение порта моего webpack-dev-сервера.но, кажется, не работает。 что мне делать?

webpack.config.js

const net = require('net');

module.exports = {
 devServer: {
      port: checkPort(5000).then((port) => getPort(port)),
      host:"localhost"
    }
}

function checkPort(port) {
  const server = net.createServer().listen(port, 'localhost');
  return new Promise(resolve => {
    server.on('listening', () => {
      server.close();
      resolve(port);
    });
    server.on('error', err => {
      console.log("err: ", err);
      resolve(getPort(port+1));
    })
  })
}

function getPort(port) {
  console.log("targetPort: ", port);
  return port;
}

, если порт 5000 занят, тогда используйте 5001. но я получаю ошибку:

Invalid configuration object. webpack-dev-server has been initialised using a configuration object that does not match the API schema.

Я всегда не могу добраться до нужного порта.

1 Ответ

0 голосов
/ 07 мая 2019

Я решил вопрос таким образом. введите описание изображения здесь

документ с типом конфигурации веб-пакета можно посмотреть здесь


const net = require('net');
const webpackMerge = require('webpack-merge');
const commonConfig = require('./configs/webpack.common');

let PORT = 5000;
function checkPort(port) {
  PORT = port;
  const server = net.createServer().listen(port, 'localhost');
  server.on('listening', function() {
    server.close();
  });
  server.on('error', err => {
    if (err.code === 'EADDRINUSE') {
      checkPort(port + 1);
    }
  });
}
checkPort(PORT);

module.exports = env => {
  const envConfig = require(`./configs/webpack.${env.env}.js`);
  const isDevEnv = env.env === 'dev';
  let portConfig = {};
  return new Promise(resolve => {
    setTimeout(() => {
      if (isDevEnv) {
        portConfig.devServer = {
          port: PORT
        };
      }
      resolve(webpackMerge.smart(commonConfig, envConfig, portConfig));
    }, 100);
  });
};
...