我正在为开源框架创建一个示例项目。为了运行我的演示,它的一些依赖项必须在其他端口上运行本地服务器。
我只是提供一个单独的命令来运行,而不是告诉他们打开多个终端并在每个终端中运行多个命令。
最好/最恰当/最优雅的方式是什么?
答案 0 :(得分:0)
这就是我为两个Web服务器实现此目的的方法。您应该可以使用更多&
和fg
来获取更多服务器。
package.json :
{
"scripts": {
"start": "node node_modules/something/server.js & node server.js && fg
}
}
因此,用户只需运行npm install
然后npm start
即可在一个终端中运行两台服务器,而ctrl-c
会同时运行这两台服务器。
<强>故障:强>
node node_modules/something/server.js &
在后台运行此服务器
node server.js &&
在前台运行我的服务器
fg
将最近的背景shell移动到前景
答案 1 :(得分:0)
如果您使用npm软件包调用,“同时”按如下所示设置package.json文件
您可以使用以下3个命令 只运行服务器
npm运行服务器
仅运行客户端
npm运行客户端
同时运行
npm run dev
"scripts": {
"server": "nodemon server.js --ignore client",
"client": "npm start --prefix client",
"dev": "concurrently \"npm run server\" \"npm run client\""
},
答案 2 :(得分:0)
对于那些想要这种情况的人:
如果您要运行一个脚本来打开多个终端并在每个脚本上运行不同的nodejs服务器,则可以执行的操作(对于Windows,对于其他操作系统,您可以更改命令) :
您可以编写一个nodejs文件,该文件将在不同的终端窗口中启动所有其他服务器
startAllServers.js:
const child_process = require('child_process');
// commands list
const commands = [
{
name: 'Ap1-1',
command: 'cd ./api1 && start nodemon api1.js'
},
{
name: 'Ap1-2',
command: 'cd ./api2 && start nodemon api2.js'
}
];
// run command
function runCommand(command, name, callback) {
child_process.exec(command, function (error, stdout, stderr) {
if (stderr) {
callback(stderr, null);
} else {
callback(null, `Successfully executed ${name} ...`);
}
});
}
// main calling function
function main() {
commands.forEach(element => {
runCommand(element.command, element.name, (err, res) => {
if (err) {
console.error(err);
} else {
console.log(res);
}
});
});
}
// call main
main();
答案 3 :(得分:-2)
使用concurrently npm包。
concurrently "node server.js" "node client.js"
这允许您一次编写具有干净输出的多个命令。而且他们不必只是节点服务器。您可以组合任何bash命令。