Shebang or hashbang ( #! ) is the first line of the file which tells the OS which interpreter to use. It typically looks like this: #!/absolute/path/to/the/interpreter [optional params]
js receives a CPU bound task: Whenever a heavy request comes to the event loop, Node. js would set all the CPU available to process it first, and then answer other requests queued. That results in slow processing and overall delay in the event loop, which is why Node. js is not recommended for heavy computation.
If your script is intended for use by Node developers, you should absolutely just use
#!/usr/bin/env node
and not bother trying for compatibility with people who only have Node installed as nodejs
.
Rationale:
#!/usr/bin/env node
as the shebang for their executable scripts./usr/bin/node
as a symlink to nodejs
. There are highly-viewed instructions on doing this here on Stack Overflow, and all over the web. There was even the nodejs-legacy
package whose entire purpose was to create this symlink for you. People who use Node know how to fix this problem on Ubuntu, and they have to if they want to use pretty much any software ever written in Node.apt-get install nodejs
and it created /usr/bin/node
as a symlink to /etc/alternatives/node
. People afflicted by this issue are, I suspect, a shrinking minority.Even if you're targeting Node-illiterate people, you may still want to use #!/usr/bin/env node
, perhaps adding the possible need for manual symlink creation or installation of the nodejs-legacy
package to your installation documentation if you deem it necessary. Note that if somebody with nodejs
but not node
available tries to run your program with the above shebang, they'll see:
/usr/bin/env: node: No such file or directory
and Googling that will give them the fix in the first result and many times on the first page.
If you truly, desperately want to make sure that the user can run your software on a system where nodejs
is available but node
is not (or where node
is actually the Amateur Packet Radio Node program), then you can use this "two-line shebang" taken from Unix & Linux Stack Exchange:
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
but do you really need to do this when almost nobody else in the Node world is?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With