The initial support for ESM entrypoint in SEA didn't support code cache. This patch implements that by following a path similar to how code cache in CJS SEA entrypoint is supported: at build time we generate the code cache from C++ and put it into the sea blob, and at runtime we consume it via a special case in compilation routines - for CJS this was CompileFunctionForCJSLoader, in the case of SourceTextModule, it's in Module::New. PR-URL: https://github.com/nodejs/node/pull/62158 Refs: https://github.com/nodejs/node/pull/61813 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
20 lines
795 B
JavaScript
20 lines
795 B
JavaScript
import assert from 'node:assert';
|
|
import { createRequire } from 'node:module';
|
|
import { pathToFileURL } from 'node:url';
|
|
import { dirname } from 'node:path';
|
|
|
|
// Test createRequire with process.execPath.
|
|
const assert2 = createRequire(process.execPath)('node:assert');
|
|
assert.strictEqual(assert2.strict, assert.strict);
|
|
|
|
// Test import.meta properties.
|
|
assert.strictEqual(import.meta.url, pathToFileURL(process.execPath).href);
|
|
assert.strictEqual(import.meta.filename, process.execPath);
|
|
assert.strictEqual(import.meta.dirname, dirname(process.execPath));
|
|
assert.strictEqual(import.meta.main, true);
|
|
|
|
// Test import() with a built-in module.
|
|
const { strict } = await import('node:assert');
|
|
assert.strictEqual(strict, assert.strict);
|
|
|
|
console.log('ESM SEA with code cache executed successfully');
|