javascript - 运行测试套件后如何退出 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 执行的方法吗?
解决方案
我通过创建一个 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}`)
]
推荐阅读
- ios - 视觉 - 文字识别
- python - 在 Windows 上使用 Azure Speech SDK 时,如何获取用于创建 AudioConfig 类的设备名称
- javascript - Angular - 服务工作者:如何从路由获取动态 ID 到“Notificationclick”事件?
- jenkins - 用于“部署到容器”插件的 Jenkins Job DSL
- csv - 如何将批处理命令输出放在 csv 文件的所需列中
- c# - 如何覆盖(不组合)每个方法的授权属性
- hangfire - 每次使用 hangfire/stats ajax 调用都会调用 Hangfire 授权
- vba - 有没有办法在不手动交叉检查的情况下删除过时的代码?
- android - 我在哪里可以获得 Xamarin.Android 调试符号?
- java - 为什么泛型数组中的setter方法起作用(JAVA)?