我正在为开源框架创建一个示例项目。为了运行我的演示,它的一些依赖项必须在其他端口上运行本地服务器。
我宁愿只为他们提供一个运行命令,而不是告诉他们打开多个终端并在每个终端中运行多个命令。
最好/最合适/最优雅的方法是什么?
这就是我为两个网络服务器完成此任务的方法。您应该能够玩更多
&
和 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 移动到前台
如果您使用 npm 包调用“并发”,请按如下方式设置 package.json 文件
您可以使用以下3个命令 仅运行服务器
npm 运行服务器
仅运行客户端
npm 运行客户端
同时运行
npm 运行开发
"scripts": {
"server": "nodemon server.js --ignore client",
"client": "npm start --prefix client",
"dev": "concurrently \"npm run server\" \"npm run client\""
},
对于那些想要这个案例的人:
如果你想运行一个脚本来打开多个终端并在每个终端上运行不同的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();
同时使用npm包。
concurrently "node server.js" "node client.js"
"commandA": "npm index.js",
"commandB": "npm server.js",
"comandName": "npm-run-all --parallel commandA commandB",
注意 --parallel
很重要,否则只有
commandA
会运行而不是
commandB