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

时间:2017-09-29 20:51:16

标签: javascript node.js user-experience

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

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

最好/最恰当/最优雅的方式是什么?

4 个答案:

答案 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命令。