Entry is a command-line tool that helps if you want to run multiple long-running processes in the same terminal session.

It takes an entry.json file containing an array of commands and runs them as sequential and/or parallel processes. It means you don't have to remember to run multiple commands in many terminal sessions when starting you app.

Installation

$ npm install -g node-entry

Usage

$ entry

Configuration

Arguments

Name Details
‑‑env (optional) The environment file to source, defaults to ./.env.
‑‑config (optional) The config entry.json file for your project. The default location is in the projects's root directory, but Entry will recursively search from the current working directory up a project tree for a file named entry.json.

An entry task

{
  "handle": "myHandle",
  "spawn": {
    "command": "sleep",
    "args": [ "2" ]
  },
  "waitOn": "anotherHandle",
  "stdinPrefix": "slp"
}
  • handle (string, required, must be unique): The identifier available for waitOn properties on other entries in the file.
  • command (string, required): The command you want Entry to run.
  • args (array, optional): Arguments passed to the command.
  • waitOn (string, optional): Allows sequential execution. waitOn takes a handle that is already defined within the file and waits for that handle's command to exit before running.
  • stdinPrefix (string, optional, must be unique): Gives the ability to pass information to a particular entry while Entry is running. For example, a stdinPrefix of nd for nodemon can be used to call nd.rs to restart node while entry is running.

Example entry.json files

Sequential

[
  {
    "handle": "bread",
    "spawn": {
      "command": "echo",
      "args": [ "toasted", "with", "butter" ]
    }
  },
  {
    "handle": "eggs",
    "spawn": {
      "command": "echo",
      "args": [ "scrambled" ]
    },
    "waitOn": "bread"
  },
  {
    "handle": "coffee",
    "spawn": {
      "command": "echo",
      "args": [ "with", "sugar", "and", "cream" ]
    },
    "waitOn": "eggs"
  },
  {
    "handle": "breakfast",
    "spawn": {
      "command": "echo",
      "args": [ "eat" ]
    },
    "waitOn": "eggs"
  }
]

Parallel

[
  {
    "handle": "clean",
    "spawn": {
      "command": "echo",
      "args": [ "sweep", "mop", "dust" ]
    }
  },
  {
    "handle": "dishes",
    "spawn": {
      "command": "echo",
      "args": [ "load dishwasher", "run dishwasher" ]
    }
  },
  {
    "handle": "laundry",
    "spawn": {
      "command": "echo",
      "args": [ "load washing machine", "run washing machine" ]
    }
  }
]

Real Example

This is an actual entryfile for one of our projects:

[
  {
    "handle": "couch",
    "spawn": {
      "command": "couchdb",
      "args": []
    }
  },
  {
    "handle": "redis",
    "spawn": {
      "command": "redis-server",
      "args": []
    }
  },
  {
    "handle": "gulp",
    "spawn": {
      "command": "./node_modules/gulp/bin/gulp.js",
      "args": [ "clean-build" ]
    }
  },
  {
    "handle": "gulpWatch",
    "spawn": {
      "command": "gulp",
      "args": [ "watch" ]
    },
    "waitOn": "gulp"
  },
  {
    "handle": "nodemon",
    "spawn": {
      "command": "nodemon",
      "args": [ "-w", "server", "-e",  "html,json,js", "server/server.js" ]
    },
    "stdinPrefix": "nd",
    "waitOn": "gulp"
  },
  {
    "handle": "nodemon-worker",
    "spawn": {
      "command": "nodemon",
      "args": [ "-w", "server", "worker/worker.js" ]
    },
    "stdinPrefix": "ndw"
  }
]