启动多个本地node.js服务器的正确方法是什么?

问题描述 投票:0回答:5

我正在为开源框架创建一个示例项目。为了运行我的演示,它的一些依赖项必须在其他端口上运行本地服务器。

我宁愿只为他们提供一个运行命令,而不是告诉他们打开多个终端并在每个终端中运行多个命令。

最好/最合适/最优雅的方法是什么?

javascript node.js user-experience
5个回答
5
投票

这就是我为两个网络服务器完成此任务的方法。您应该能够玩更多

&
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 移动到前台


4
投票

如果您使用 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\""
  },

3
投票

对于那些想要这个案例的人:

如果你想运行一个脚本来打开多个终端并在每个终端上运行不同的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();

1
投票

同时使用npm包。

concurrently "node server.js" "node client.js"



这允许您一次性编写多个具有干净输出的命令。而且它们不仅仅必须是节点服务器。您可以组合任何 bash 命令。


0
投票
"commandA": "npm index.js", "commandB": "npm server.js", "comandName": "npm-run-all --parallel commandA commandB",
注意 

--parallel

 很重要,否则只有 
commandA
 会运行而不是 
commandB

    

© www.soinside.com 2019 - 2024. All rights reserved.