Skip to content

Instantly share code, notes, and snippets.

Modules. Modules everywhere.

Jan Olaf Krems jkrems

Modules. Modules everywhere.
Block or report user

Report or block jkrems

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@jkrems
jkrems / _.md
Last active Feb 27, 2020
Observe compilation cache collision
View _.md

Repro

  1. Start the server via node server.js.
  2. Open http://localhost:3000.
  3. If the compilation cache leads to bad meta data in dynamic import, the message should only be logged once. ‎‎​
@jkrems
jkrems / .gitignore
Last active Feb 13, 2020
Node globals handling in Typescript
View .gitignore
/node_modules
/input.js
View playground.json
{
"scripts": [],
"showConsole": true,
"scriptType": "module"
}
View index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<h1>RegLang</h1>
<pre id="result"></pre>
<script src="/script.mjs" type="module"></script>
</body>
View idem-potent-resolve.js
class ResolvedRef {
#href;
#signature;
static get protocol() {
return 'resolved-ref:';
}
constructor(href, signature) {
this.#href = href;
@jkrems
jkrems / index.md
Last active Feb 8, 2020
JavaScript: Classic Scripts vs. Modules vs. CommonJS
View index.md

JavaScript File Format Differences

There's the pervarsive notion that all JS is created equal and that there's only minor and easily detectable differences between the various file formats used to author JavaScript. This is correct, from a certain point of view.

A certain point of view?

For many people writing JavaScript that gets passed into build tools,

View nested-loader-order.txt
client.mjs:
import "fs";
[A]:
parentResolve()
[B]:
parentResolve()
[native]:
'fs' -> 'node:fs'
'fs' -> $BWRAP = 'data:import "node:fs";'
'fs' -> $AWRAP = 'data:import "$BWRAP";'
View error.txt
> make -j4
/Applications/Xcode-beta.app/Contents/Developer/usr/bin/make -C out BUILDTYPE=Release V=0
LD_LIBRARY_PATH=/Users/jkrems/Projects/node/node/out/Release/lib.host:/Users/jkrems/Projects/node/node/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../.; mkdir -p /Users/jkrems/Projects/node/node/out/Release/obj/gen; python tools/js2c.py lib/internal/bootstrap/environment.js lib/internal/bootstrap/loaders.js lib/internal/bootstrap/node.js lib/internal/bootstrap/pre_execution.js lib/internal/per_context/primordials.js lib/internal/per_context/setup.js lib/internal/per_context/domexception.js lib/async_hooks.js lib/assert.js lib/buffer.js lib/child_process.js lib/console.js lib/constants.js lib/crypto.js lib/cluster.js lib/dgram.js lib/dns.js lib/domain.js lib/events.js lib/fs.js lib/http.js lib/http2.js lib/_http_agent.js lib/_http_client.js lib/_http_common.js lib/_http_incoming.js lib/_http_outgoing.js lib/_http_server.js lib/https.js lib/inspector.js lib/module.js lib/net.js lib/os.j
@jkrems
jkrems / index-original.js
Last active Nov 17, 2018
TypeScript as a Linter
View index-original.js
'use strict';
function calculate(expression) {
// [...]
}
@jkrems
jkrems / pkg-import.md
Last active Nov 6, 2018
Module Resolution & Format Lookup
View pkg-import.md

Module Resolution & Format Lookup

Motivating Examples

  • A package (react-dom) has a dedicated entrypoint `react-dom/server for code that isn't compatible with a browser environment.
  • A package (angular) exposes multiple independent APIs, modeled via import paths like angular/common/http.
  • A package (lodash) allows to import individual functions, e.g. lodash/map.
  • A package is exclusively exposing an ESM interface.
  • A package is exclusively exposing a CJS interface.
  • A package is exposing both an ESM and a CJS interface.
You can’t perform that action at this time.