exit_on_eof

Run a command as a child process and exit process upon EOF (^D)

Usage no npm install needed!

<script type="module">
  import exitOnEof from 'https://cdn.skypack.dev/exit_on_eof';
</script>

README

exit_on_eof

Helper script for Elixir/Phoenix projects using npm scripts as a watcher instead of Brunch

npm install -g exit_on_eof

Description

Elixir/Phoenix projects use Brunch by default for front-end workflows, but this can be modified to use a simpler approach like npm scripts as described here. A problem arises though when killing/exiting the server. Phoenix sends an EOF signal through stdin to the watch process to indicate it should terminate. npm scripts, like many commands, does not respond to EOF like SIGINT so the node processes remain running.

This script helps deal with this issue by wrapping a user-given command in a parent process that is sensitive to both SIGINT and EOF.

To read more about this sensitivity to EOF as per Chris McCord, view this

(Both Webpack and Brunch were actively PR'd to allow for this behavior. This is a stop-gap until a more elegant solution presents.)

Usage

In Phoenix project update config/dev.exs:

config :{YOUR_PROJECT_NAME_ATOM}, {YOUR_PROJECT_NAME}.Endpoint
  ...
  watchers: [exit_on_eof: ["npm run watch"]]

In your package.json:

{
  ...
  "scripts": {
    ...
    "watch": some set of commands
    ...
  },
  ...
}

When you start the server your command should run and when you stop the server the node processes that were spun up to manage the front-end build will also be killed.