Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit21d21f3

Browse files
committed
chore: address changes to CJS/ESM loading
* module: make CJS load from ESM loader (nodejs/node#47999)* lib: improve esm resolve performance (nodejs/node#46652)
1 parent214d4d9 commit21d21f3

File tree

1 file changed

+44
-46
lines changed

1 file changed

+44
-46
lines changed

‎patches/node/fix_lazyload_fs_in_esm_loaders_to_apply_asar_patches.patch

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,62 +6,51 @@ Subject: fix: lazyload fs in esm loaders to apply asar patches
66
Changes { foo } from fs to just "fs.foo" so that our patching of fs is applied to esm loaders
77

88
diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js
9-
indexd8a072cf6af3b0d3a47ee69be04b26875683d261..7991703df940634c62d798210b5e7b94412f9bde 100644
9+
index9be4495726597bb48c544b362e3cf0e79e0291e1..8c800d8790d59465b0d8b807735953ea1b5692bc 100644
1010
--- a/lib/internal/modules/esm/load.js
1111
+++ b/lib/internal/modules/esm/load.js
12-
@@ -20,7 +20,7 @@ constexperimentalNetworkImports =
13-
14-
const {Buffer: { from: BufferFrom } }= require('buffer');
15-
16-
-const {readFile: readFileAsync} = require('internal/fs/promises').exports;
12+
@@ -10,7 +10,7 @@ const{ kEmptyObject } = require('internal/util');
13+
const { defaultGetFormat } = require('internal/modules/esm/get_format');
14+
const {validateAssertions }= require('internal/modules/esm/assert');
15+
const { getOptionValue } = require('internal/options');
16+
-const {readFileSync} = require('fs');
1717
+const fs = require('fs');
18-
const { URL } = require('internal/url');
19-
const {
20-
ERR_INVALID_URL,
21-
@@ -39,7 +39,7 @@ async function getSource(url, context) {
18+
19+
// Do not eagerly grab .manifest, it may be in TDZ
20+
const policy = getOptionValue('--experimental-policy') ?
21+
@@ -40,8 +40,7 @@ async function getSource(url, context) {
2222
let responseURL = href;
2323
let source;
2424
if (protocol === 'file:') {
25+
- const { readFile: readFileAsync } = require('internal/fs/promises').exports;
2526
- source = await readFileAsync(url);
2627
+ source = await fs.promises.readFile(url);
2728
} else if (protocol === 'data:') {
2829
const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname);
2930
if (!match) {
31+
@@ -80,7 +79,7 @@ function getSourceSync(url, context) {
32+
const responseURL = href;
33+
let source;
34+
if (protocol === 'file:') {
35+
- source = readFileSync(url);
36+
+ source = fs.readFileSync(url);
37+
} else if (protocol === 'data:') {
38+
const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname);
39+
if (!match) {
3040
diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js
31-
indexa93d93b3c2aae3ef790ffa4f417d50b884451549..4072321e6bc3c9f0c8428d8159670950886c3404 100644
41+
index6a5d92d932df4f0b34840283821cf18839fbe1a5..fb47a40e04a9851db5287c7f61300feb85511ea3 100644
3242
--- a/lib/internal/modules/esm/resolve.js
3343
+++ b/lib/internal/modules/esm/resolve.js
34-
@@ -26,11 +26,7 @@ const {
44+
@@ -24,7 +24,7 @@ const {
3545
} = primordials;
3646
const internalFS = require('internal/fs/utils');
37-
const { BuiltinModule } = require('internal/bootstrap/loaders');
38-
-const {
39-
- realpathSync,
40-
- statSync,
41-
- Stats,
42-
-} = require('fs');
47+
const { BuiltinModule } = require('internal/bootstrap/realm');
48+
-const { realpathSync } = require('fs');
4349
+const fs = require('fs');
4450
const { getOptionValue } = require('internal/options');
45-
const pendingDeprecation = getOptionValue('--pending-deprecation');
4651
// Do not eagerly grab .manifest, it may be in TDZ
47-
@@ -172,14 +168,14 @@ const realpathCache = new SafeMap();
48-
* @returns {import('fs').Stats}
49-
*/
50-
const tryStatSync =
51-
- (path) => statSync(path, { throwIfNoEntry: false }) ?? new Stats();
52-
+ (path) => fs.statSync(path, { throwIfNoEntry: false }) ?? new fs.Stats();
53-
54-
/**
55-
* @param {string | URL} url
56-
* @returns {boolean}
57-
*/
58-
function fileExists(url) {
59-
- return statSync(url, { throwIfNoEntry: false })?.isFile() ?? false;
60-
+ return fs.statSync(url, { throwIfNoEntry: false })?.isFile() ?? false;
61-
}
62-
63-
/**
64-
@@ -329,7 +325,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
52+
const policy = getOptionValue('--experimental-policy') ?
53+
@@ -235,7 +235,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
6554
}
6655

6756
if (!preserveSymlinks) {
@@ -71,19 +60,19 @@ index a93d93b3c2aae3ef790ffa4f417d50b884451549..4072321e6bc3c9f0c8428d8159670950
7160
});
7261
const { search, hash } = resolved;
7362
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
74-
index1ceb89da21610c703f4a18be5888373c7feaa370..347558c805c8ecd3f7ff4f6324ef7df68badc52f 100644
63+
index4020813f061d85ee27d50b938825319ab455c311..0ab3100a6fdb729f977888332d6765a9c6e8953c 100644
7564
--- a/lib/internal/modules/esm/translators.js
7665
+++ b/lib/internal/modules/esm/translators.js
77-
@@ -24,7 +24,7 @@ function lazyTypes() {
78-
return _TYPES = require('internal/util/types');
66+
@@ -25,7 +25,7 @@ function lazyTypes() {
7967
}
8068

69+
const assert = require('internal/assert');
8170
-const { readFileSync } = require('fs');
8271
+const fs = require('fs');
83-
const { extname, isAbsolute } = require('path');
72+
const {dirname,extname, isAbsolute } = require('path');
8473
const {
8574
hasEsmSyntax,
86-
@@ -131,7 +131,7 @@ translators.set('module', async function moduleStrategy(url, source, isMain) {
75+
@@ -132,7 +132,7 @@ translators.set('module', async function moduleStrategy(url, source, isMain) {
8776
*/
8877
function enrichCJSError(err, content, filename) {
8978
if (err != null && ObjectGetPrototypeOf(err) === SyntaxErrorPrototype &&
@@ -92,12 +81,21 @@ index 1ceb89da21610c703f4a18be5888373c7feaa370..347558c805c8ecd3f7ff4f6324ef7df6
9281
// Emit the warning synchronously because we are in the middle of handling
9382
// a SyntaxError that will throw and likely terminate the process before an
9483
// asynchronous warning would be emitted.
95-
@@ -207,7 +207,7 @@ functioncjsPreparseModuleExports(filename) {
84+
@@ -290,7 +290,7 @@translators.set('commonjs', asyncfunctioncommonjsStrategy(url, source,
9685

97-
let source;
9886
try {
99-
- source = readFileSync(filename, 'utf8');
100-
+ source = fs.readFileSync(filename, 'utf8');
87+
// We still need to read the FS to detect the exports.
88+
- source ??= readFileSync(new URL(url), 'utf8');
89+
+ source ??= fs.readFileSync(new URL(url), 'utf8');
10190
} catch {
10291
// Continue regardless of error.
10392
}
93+
@@ -353,7 +353,7 @@ function cjsPreparseModuleExports(filename, source) {
94+
isAbsolute(resolved)) {
95+
// TODO: this should be calling the `load` hook chain to get the source
96+
// (and fallback to reading the FS only if the source is nullish).
97+
- const source = readFileSync(resolved, 'utf-8');
98+
+ const source = fs.readFileSync(resolved, 'utf-8');
99+
const { exportNames: reexportNames } = cjsPreparseModuleExports(resolved, source);
100+
for (const name of reexportNames)
101+
exportNames.add(name);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp