Как выйти из выполнения webpack-dev-server после запуска набора тестов - PullRequest
0 голосов
/ 14 декабря 2018

Я создал файл конфигурации веб-пакета, который создает приложение, запускает dev-сервер с использованием webpack-dev-server и запускает набор тестов, как показано ниже.

devServer: {
  contentBase: path.join(__dirname, "dist"),
  port: 3000,
  watchOptions: {
    open: false
  },
  historyApiFallback: {
    index: "/"
  }
},

plugins: [
  new WebpackShellPlugin({
    onBuildEnd: [`./node_modules/.bin/cucumber-js ${testScope}`]
  })
]

Команда для запуска всего процессаниже

webpack-dev-server --config webpack.test.js

Все хорошо, но ... что теперь?Это никогда не останавливается!Мне нужен какой-то способ выйти с успешным статусом, когда набор тестов в порядке.В противном случае это приведет к бесконечному развертыванию (для развертывания приложения я использую конвейеры bitbucket).

Кто-нибудь знает способ выхода из выполнения devServer после запуска определенного плагина?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я решил свою проблему, создав плагин webpack и добавил его в свой конфигурационный файл.Код плагина ниже.Он запускает команду, которую я передаю ему, и завершает процесс, выдает ошибку, если команда была успешной или успешной, если все было в порядке.

const spawn = require("child_process").spawn;

module.exports = class RunScriptAndExit {
  constructor(command) {
    this.command = command;
  }

  apply(compiler) {
    compiler.plugin("after-emit", (compilation, callback) => {
      const { command, args } = this.serializeScript(this.command);
      const proc = spawn(command, args, { stdio: "inherit" });
      proc.on("close", this.exit);

      callback();
    });
  }

  serializeScript(script) {
    if (typeof script === "string") {
      const [command, ...args] = script.split(" ");
      return { command, args };
    }
    const { command, args } = script;
    return { command, args };
  }

  exit(error, stdout, stderr) {
    if (error) {
      process.exit(1);
    } else {
      process.exit(0);
    }
  }
};

Я добавил ее в свой список плагинов, как показано ниже:

plugins: [
  new RunScriptAndExit(`./node_modules/.bin/cucumber-js ${testScope}`)
]
0 голосов
/ 14 декабря 2018

Вероятно, это разница между npm run start и npm start

Когда вы используете npm start, он запускает node server.js, который не работает на вашей консоли.

Если вы используете npm run start, он выполняет сценарий start, определенный в вашем package.json, используя оболочку вашей операционной системы.Поэтому, даже если вы используете Cygwin (или аналогичный), он все равно должен запускать его с помощью cmd.exe.

Решение
Используйте npm run start вместо npm start, и он должен завершить процесс, когда вы нажмете CTRL + C

...