如何在运行测试套件后退出 webpack-dev-server 执行



我创建了一个 webpack 配置文件来构建应用程序,使用 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执行的方法吗?

很可能是npm run startnpm start之间的区别

当您使用npm start时,它会运行node server.js不会与您的控制台内联运行。

如果使用npm run start,它会使用操作系统的 shell 执行 package.json 中定义的start脚本。因此,即使您使用的是Cygwin(或类似产品),它仍然应该使用cmd.exe运行它。

解决方案
使用npm run start而不是npm start当您 CTRL + C 时,它应该会杀死进程

我通过创建一个 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}`)
]

最新更新