我已经创建了一个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执行的方法吗?
答案 0 :(得分:1)
可能是npm run start
和npm start
之间的区别
使用npm start
时,它会运行node server.js
,但不会与控制台内联运行。
如果使用npm run start
,它将使用操作系统的外壳程序执行package.json中定义的start
脚本。因此,即使您使用的是Cygwin(或类似产品),它仍应使用cmd.exe运行它。
解决方案
使用npm run start
代替npm start
,当您按下CTRL + C
答案 1 :(得分:1)
我通过创建一个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}`)
]