Our great sponsors
-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
-
awesome-tagged-templates
A list of libraries and learning resources for ES2015 tagged template literals
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
cinnamon
A Linux desktop featuring a traditional layout, built from modern technology and introducing brand new innovative features.
-
murex
A smarter shell and scripting environment with advanced features designed for usability, safety and productivity (eg smarter DevOps tooling)
Great point! According to https://github.com/oven-sh/bun/blob/b433beb016470b87850f3c01..., Bun Shell took inspiration from zx[0], dax[1] and bnx[2]
[0]: https://github.com/google/zx
[1]: https://github.com/dsherret/dax
[2]: https://github.com/wobsoriano/bnx
One thing that surprised me about Node was how slow the default way to shelling out (child_process) could be (probably https://github.com/nodejs/node/issues/14917).
Although according to the linked issue, it has been "fixed", I still ran into a problem during a batch script that was calling imagemagick through a shell for each file in a massive directory; profiling was telling me that starting (not completing) (yes, I was using the async version) the child process increasingly slows, from sub-millisecond for the first few spawns, to eventually hundreds of milliseconds or seconds... Eventually I had to resort to doing only single spawn a bash script that in turn did all the shelling out.
It seems that the linked execa still relies on child_process and therefore has the same issue. It saddens me to see the only package for node that appears to actually fix this and provide a workaround seems to be https://github.com/TritonDataCenter/node-spawn-async and unmaintained.
Great point! According to https://github.com/oven-sh/bun/blob/b433beb016470b87850f3c01..., Bun Shell took inspiration from zx[0], dax[1] and bnx[2]
[0]: https://github.com/google/zx
[1]: https://github.com/dsherret/dax
[2]: https://github.com/wobsoriano/bnx
For something which works across all JS runtimes (Deno, Node) and achieves basically the same, check out the popular JS library Execa[1]. Works like a charm!
[1]: https://github.com/sindresorhus/execa
These are called "tagged templates": https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
One thing that surprised me about Node was how slow the default way to shelling out (child_process) could be (probably https://github.com/nodejs/node/issues/14917).
Although according to the linked issue, it has been "fixed", I still ran into a problem during a batch script that was calling imagemagick through a shell for each file in a massive directory; profiling was telling me that starting (not completing) (yes, I was using the async version) the child process increasingly slows, from sub-millisecond for the first few spawns, to eventually hundreds of milliseconds or seconds... Eventually I had to resort to doing only single spawn a bash script that in turn did all the shelling out.
It seems that the linked execa still relies on child_process and therefore has the same issue. It saddens me to see the only package for node that appears to actually fix this and provide a workaround seems to be https://github.com/TritonDataCenter/node-spawn-async and unmaintained.
Great point! According to https://github.com/oven-sh/bun/blob/b433beb016470b87850f3c01..., Bun Shell took inspiration from zx[0], dax[1] and bnx[2]
[0]: https://github.com/google/zx
[1]: https://github.com/dsherret/dax
[2]: https://github.com/wobsoriano/bnx
Great point! According to https://github.com/oven-sh/bun/blob/b433beb016470b87850f3c01..., Bun Shell took inspiration from zx[0], dax[1] and bnx[2]
[0]: https://github.com/google/zx
[1]: https://github.com/dsherret/dax
[2]: https://github.com/wobsoriano/bnx
When I need shell-like utilities from my JS scripts I've previously used shelljs [0]. It's neat that Bun is adding more built-in utilities though.
[0] https://github.com/shelljs/shelljs
Many mobile apps are written in JS/TS with React Native.
Linux desktop environments like Cinnamon [1] also use JavaScript for the UI. Linux Mint with Cinnamon is invariably among the top 3 Linux desktop distributions (on distrowatch [2]).
If anything, stats probably don't accurately capture how ubiquitous JS is.
[1] https://github.com/linuxmint/cinnamon
I agree. I’ve written about this before but this is what murex (1) does. It reimplements some of coreutils where there are benefits in doing so (eg sed, grep etc -like parsing of lists that are in formats other than flat lines of text. Such as JSON arrays)
Mutex does this by having these utilities named slightly different to their POSIX counterparts. So you can use all of the existing CLI tools completely but additionally have a bunch of new stuff too.
Far too many alt shells these days try to replace coreutils and that just creates friction in my opinion.
1. https://murex.rocks
And npmjs.com will block your IP if you do too many downloads in on day.
Actually is says 86m a week here: https://www.npmjs.com/package/rimraf
Related posts
- Zx 8.0
- Dax – Cross-platform shell for Node.js
- Zx: A tool for writing better scritps
- YavaScript: Write shell scripts in JavaScript/TS instead of bash
- And forget about shell scripting in /bin/sh ... I hate to say it, but, this is the middle of 2021 we have react and svelte we need more /etc/shells, we need modern languages all over, we can't do this anymore