beeline-nodejs
kloi
beeline-nodejs | kloi | |
---|---|---|
2 | 1 | |
53 | 2 | |
- | - | |
6.5 | 0.0 | |
5 days ago | about 3 years ago | |
JavaScript | JavaScript | |
Apache License 2.0 | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
beeline-nodejs
-
Using ES Modules (ESM) in Node.js: A Practical Guide (Part 1)
I find using ES Modules in Node.js to be full of gotchas and anti-patterns - sticking with CommonJS seems more functional in most cases.
1: With ES Modules, imports are asynchronous.
Synchronous imports are incredibly powerful. You can ensure that your application doesn't block on first requests, but instead on load. Initializing connection pools, setting up caches, etc.
You'll also find quite a few packages in NPM that explicitly depend on require over import just so that they can perform the bindings they have to before things get going (see https://www.npmjs.com/package/honeycomb-beeline as an example).
2: With ES Modules imports are commonly destructured.
I know it makes your code feel lighter to have const { add } = import("whatever"); - but as your files grow larger, and those imports start to become complicated bits for middleware or other features, you're just making it more difficult for future maintainers to figure out what those functions mean. A bit of context never hurt anybody, and for my money I'll be that this:
app.use(check);
is not nearly as useful as
app.use(Validator.check);
The example may be contrived - but 9/10 times I find this makes code better than the alternative.
All of these arguments go out the door for Frontend work - that's a totally different terrain. I think one of the big arguments is that developers want to use the exact same JavaScript on frontend and Node applications - but that's an argument unwilling to admit the fact that they're two very different tasks. :)
-
A shallow dive into auto-instrumenting Node.js applications with Elastic APM
An even better option is auto-instrumentation, where the APM library automatically identifies the libraries you use and track the operations you do with them. This is how Elastic APM works. Honeycomb's Beeline, DataDog's dd-trace and the OpenTelemetry Node.js client also provide automatic instrumentation. Of course, "operations" don't only happen when you interact with other libraries, so these libraries still let you manually add spans.
kloi
-
Using ES Modules (ESM) in Node.js: A Practical Guide (Part 1)
I've started using ESM in a static website builder too [1]. It works, kinda.
Problems that I encountered:
To get `__dirname`, you have to do an awkward workaround using path and url [3].
For npm modules that implement a path e.g. `@lib/method`, the import of this currently isn't allowed in node without a flag.
For ESM incompatible modules, a createRequire [2] function is available to get the old `require` syntax.
For import statements, the cache cannot be deleted yet [4].
Overall, I'm please to see that nodejs will soon be ESM compatible. All changes that have been made look reasonable and useful to me.
1: https://github.com/TimDaub/kloi
2: https://nodejs.org/api/module.html#module_module_createrequi...
3: https://stackoverflow.com/questions/46745014/alternative-for...
4: https://github.com/nodejs/modules/issues/307
What are some alternatives?
TypeScript - TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
qubyte-codes - My personal site.
apm-agent-nodejs - Elastic APM Node.js Agent
zipkin-js - Zipkin instrumentation for Node.js and browsers
require-in-the-middle - Module to hook into the Node.js require function