Skip to content

Commit 17553c5

Browse files
authored
chore: reduce fs-extra usage in scripts/ (#56917)
The PR follows #56536 and #56491, replacing `fs-extra` usages inside the `scripts/` folder. Note that the `copy` and `move` haven't been replaced yet. Currently, there is no better recursive copy (lightweight, promise-based, Node.js built-in `copyFile` API-based, support the `filter` option) library alternative available on npm, and Node.js built-in `fs.rename` doesn't support `overwrite`. The PR also replaces many async fs API usage with their sync versions. cc @wbinnssmith
1 parent 255cc9b commit 17553c5

File tree

6 files changed

+74
-57
lines changed

6 files changed

+74
-57
lines changed

run-tests.js

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const os = require('os')
22
const path = require('path')
33
const _glob = require('glob')
4-
const fs = require('fs-extra')
4+
const { existsSync } = require('fs')
5+
const fsp = require('fs/promises')
56
const nodeFetch = require('node-fetch')
67
const vercelFetch = require('@vercel/fetch')
78
const fetch = vercelFetch(nodeFetch)
@@ -116,10 +117,16 @@ ${output}
116117

117118
const cleanUpAndExit = async (code) => {
118119
if (process.env.NEXT_TEST_STARTER) {
119-
await fs.remove(process.env.NEXT_TEST_STARTER)
120+
await fsp.rm(process.env.NEXT_TEST_STARTER, {
121+
recursive: true,
122+
force: true,
123+
})
120124
}
121125
if (process.env.NEXT_TEST_TEMP_REPO) {
122-
await fs.remove(process.env.NEXT_TEST_TEMP_REPO)
126+
await fsp.rm(process.env.NEXT_TEST_TEMP_REPO, {
127+
recursive: true,
128+
force: true,
129+
})
123130
}
124131
if (process.env.CI) {
125132
await maybeLogSummary()
@@ -250,7 +257,7 @@ async function main() {
250257
try {
251258
const timingsFile = path.join(process.cwd(), 'test-timings.json')
252259
try {
253-
prevTimings = JSON.parse(await fs.readFile(timingsFile, 'utf8'))
260+
prevTimings = JSON.parse(await fsp.readFile(timingsFile, 'utf8'))
254261
console.log('Loaded test timings from disk successfully')
255262
} catch (_) {
256263
console.error('failed to load from disk', _)
@@ -261,7 +268,7 @@ async function main() {
261268
console.log('Fetched previous timings data successfully')
262269

263270
if (writeTimings) {
264-
await fs.writeFile(timingsFile, JSON.stringify(prevTimings))
271+
await fsp.writeFile(timingsFile, JSON.stringify(prevTimings))
265272
console.log('Wrote previous timings data to', timingsFile)
266273
await cleanUpAndExit(0)
267274
}
@@ -544,15 +551,16 @@ ${ENDGROUP}`)
544551

545552
return reject(err)
546553
}
547-
await fs
548-
.remove(
554+
await fsp
555+
.rm(
549556
path.join(
550557
__dirname,
551558
'test/traces',
552559
path
553560
.relative(path.join(__dirname, 'test'), test.file)
554561
.replace(/\//g, '-')
555-
)
562+
),
563+
{ recursive: true, force: true }
556564
)
557565
.catch(() => {})
558566
resolve(new Date().getTime() - start)
@@ -645,7 +653,7 @@ ${ENDGROUP}`)
645653
// Emit test output if test failed or if we're continuing tests on error
646654
if ((!passed || shouldContinueTestsOnError) && isTestJob) {
647655
try {
648-
const testsOutput = await fs.readFile(
656+
const testsOutput = await fsp.readFile(
649657
`${test.file}${RESULTS_EXT}`,
650658
'utf8'
651659
)
@@ -708,7 +716,7 @@ ${ENDGROUP}`)
708716
}
709717

710718
for (const test of Object.keys(newTimings)) {
711-
if (!(await fs.pathExists(path.join(__dirname, test)))) {
719+
if (!existsSync(path.join(__dirname, test))) {
712720
console.log('removing stale timing', test)
713721
delete newTimings[test]
714722
}

scripts/install-native.mjs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import os from 'os'
22
import path from 'path'
33
import execa from 'execa'
4-
import fs from 'fs-extra'
4+
import fs from 'fs'
5+
import fsp from 'fs/promises'
56
;(async function () {
67
if (process.env.NEXT_SKIP_NATIVE_POSTINSTALL) {
78
console.log(
@@ -10,34 +11,34 @@ import fs from 'fs-extra'
1011
return
1112
}
1213
let cwd = process.cwd()
13-
const { version: nextVersion } = await fs.readJSON(
14-
path.join(cwd, 'packages', 'next', 'package.json')
14+
const { version: nextVersion } = JSON.parse(
15+
fs.readFileSync(path.join(cwd, 'packages', 'next', 'package.json'))
16+
)
17+
const { packageManager } = JSON.parse(
18+
fs.readFileSync(path.join(cwd, 'package.json'))
1519
)
16-
const { packageManager } = await fs.readJSON(path.join(cwd, 'package.json'))
1720

1821
try {
1922
// if installed swc package version matches monorepo version
2023
// we can skip re-installing
21-
for (const pkg of await fs.readdir(
22-
path.join(cwd, 'node_modules', '@next')
23-
)) {
24+
for (const pkg of fs.readdirSync(path.join(cwd, 'node_modules', '@next'))) {
2425
if (
2526
pkg.startsWith('swc-') &&
26-
(
27-
await fs.readJSON(
27+
JSON.parse(
28+
fs.readFileSync(
2829
path.join(cwd, 'node_modules', '@next', pkg, 'package.json')
2930
)
3031
).version === nextVersion
3132
) {
32-
console.log(`@next/${pkg}@${nextVersion} already installed skipping`)
33+
console.log(`@next/${pkg}@${nextVersion} already installed, skipping`)
3334
return
3435
}
3536
}
36-
} catch (_) {}
37+
} catch {}
3738

3839
try {
3940
let tmpdir = path.join(os.tmpdir(), `next-swc-${Date.now()}`)
40-
await fs.ensureDir(tmpdir)
41+
fs.mkdirSync(tmpdir, { recursive: true })
4142
let pkgJson = {
4243
name: 'dummy-package',
4344
version: '1.0.0',
@@ -54,28 +55,27 @@ import fs from 'fs-extra'
5455
},
5556
packageManager,
5657
}
57-
await fs.writeFile(
58-
path.join(tmpdir, 'package.json'),
59-
JSON.stringify(pkgJson)
60-
)
61-
await fs.writeFile(path.join(tmpdir, '.npmrc'), 'node-linker=hoisted')
58+
fs.writeFileSync(path.join(tmpdir, 'package.json'), JSON.stringify(pkgJson))
59+
fs.writeFileSync(path.join(tmpdir, '.npmrc'), 'node-linker=hoisted')
60+
6261
let { stdout } = await execa('pnpm', ['add', 'next@canary'], {
6362
cwd: tmpdir,
6463
})
6564
console.log(stdout)
66-
let pkgs = await fs.readdir(path.join(tmpdir, 'node_modules/@next'))
67-
await fs.ensureDir(path.join(cwd, 'node_modules/@next'))
65+
66+
let pkgs = fs.readdirSync(path.join(tmpdir, 'node_modules/@next'))
67+
fs.mkdirSync(path.join(cwd, 'node_modules/@next'), { recursive: true })
6868

6969
await Promise.all(
70-
pkgs.map((pkg) =>
71-
fs.move(
72-
path.join(tmpdir, 'node_modules/@next', pkg),
73-
path.join(cwd, 'node_modules/@next', pkg),
74-
{ overwrite: true }
75-
)
76-
)
70+
pkgs.map(async (pkg) => {
71+
const from = path.join(tmpdir, 'node_modules/@next', pkg)
72+
const to = path.join(cwd, 'node_modules/@next', pkg)
73+
// overwriting by removing the target first
74+
await fsp.rm(to, { recursive: true, force: true })
75+
return fsp.rename(from, to)
76+
})
7777
)
78-
await fs.remove(tmpdir)
78+
fs.rmSync(tmpdir, { recursive: true, force: true })
7979
console.log('Installed the following binary packages:', pkgs)
8080
} catch (e) {
8181
console.error(e)

scripts/publish-release.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const path = require('path')
55
const execa = require('execa')
66
const { Sema } = require('async-sema')
77
const { execSync } = require('child_process')
8-
const { readJson, readdir } = require('fs-extra')
8+
const fs = require('fs')
99

1010
const cwd = process.cwd()
1111

@@ -38,7 +38,7 @@ const cwd = process.cwd()
3838
}
3939

4040
const packagesDir = path.join(cwd, 'packages')
41-
const packageDirs = await readdir(packagesDir)
41+
const packageDirs = fs.readdirSync(packagesDir)
4242
const publishSema = new Sema(2)
4343

4444
const publish = async (pkg, retry = 0) => {
@@ -88,8 +88,11 @@ const cwd = process.cwd()
8888

8989
await Promise.allSettled(
9090
packageDirs.map(async (packageDir) => {
91-
const pkgJson = await readJson(
92-
path.join(packagesDir, packageDir, 'package.json')
91+
const pkgJson = JSON.parse(
92+
await fs.promises.readFile(
93+
path.join(packagesDir, packageDir, 'package.json'),
94+
'utf-8'
95+
)
9396
)
9497

9598
if (pkgJson.private) {

scripts/setup-wasm.mjs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import path from 'path'
2-
import { readFile, writeFile } from 'fs/promises'
3-
import { copy, pathExists } from 'fs-extra'
2+
import fs from 'fs'
3+
import { copy } from 'fs-extra'
44
;(async function () {
55
try {
66
let wasmDir = path.join(process.cwd(), 'packages/next-swc/crates/wasm')
77
let wasmTarget = 'nodejs'
88

99
// CI restores artifact at pkg-${wasmTarget}
1010
// This only runs locally
11-
let folderName = (await pathExists(path.join(wasmDir, 'pkg')))
11+
let folderName = fs.existsSync(path.join(wasmDir, 'pkg'))
1212
? 'pkg'
1313
: `pkg-${wasmTarget}`
1414

1515
let wasmPkg = JSON.parse(
16-
await readFile(path.join(wasmDir, `${folderName}/package.json`))
16+
fs.readFileSync(path.join(wasmDir, `${folderName}/package.json`))
1717
)
1818
wasmPkg.name = `@next/swc-wasm-${wasmTarget}`
1919

20-
await writeFile(
20+
fs.writeFileSync(
2121
path.join(wasmDir, `${folderName}/package.json`),
2222
JSON.stringify(wasmPkg, null, 2)
2323
)

scripts/sync-react.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// @ts-check
22

33
const path = require('path')
4-
const { readJson, writeJson } = require('fs-extra')
4+
const fsp = require('fs/promises')
55
const execa = require('execa')
66

77
/** @type {any} */
@@ -52,7 +52,9 @@ Or, run this command with no arguments to use the most recently published versio
5252
}
5353

5454
const cwd = process.cwd()
55-
const pkgJson = await readJson(path.join(cwd, 'package.json'))
55+
const pkgJson = JSON.parse(
56+
await fsp.readFile(path.join(cwd, 'package.json'), 'utf-8')
57+
)
5658
const devDependencies = pkgJson.devDependencies
5759
const baseVersionStr = devDependencies[
5860
useExperimental ? 'react-experimental-builtin' : 'react-builtin'
@@ -90,7 +92,10 @@ Or, run this command with no arguments to use the most recently published versio
9092
)
9193
}
9294
}
93-
await writeJson(path.join(cwd, 'package.json'), pkgJson, { spaces: 2 })
95+
await fsp.writeFile(
96+
path.join(cwd, 'package.json'),
97+
JSON.stringify(pkgJson, null, 2)
98+
)
9499
console.log('Successfully updated React dependencies in package.json.\n')
95100

96101
// Install the updated dependencies and build the vendored React files.

scripts/trace-next-server.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const os = require('os')
22
const path = require('path')
33
const execa = require('execa')
4-
const fs = require('fs-extra')
4+
const fsp = require('fs/promises')
5+
const { copy } = require('fs-extra')
56
const prettyBytes = require('pretty-bytes')
67
const gzipSize = require('next/dist/compiled/gzip-size')
78
const { nodeFileTrace } = require('next/dist/compiled/@vercel/nft')
@@ -24,7 +25,7 @@ async function main() {
2425
const origTestDir = path.join(origRepoDir, 'test')
2526
const dotDir = path.join(origRepoDir, './') + '.'
2627

27-
await fs.copy(origRepoDir, repoDir, {
28+
await copy(origRepoDir, repoDir, {
2829
filter: (item) => {
2930
return (
3031
!item.startsWith(origTestDir) &&
@@ -36,11 +37,11 @@ async function main() {
3637

3738
console.log('using workdir', workDir)
3839
console.log('using repodir', repoDir)
39-
await fs.ensureDir(workDir)
40+
await fsp.mkdir(workDir, { recursive: true })
4041

4142
const pkgPaths = await linkPackages({ repoDir: origRepoDir })
4243

43-
await fs.writeFile(
44+
await fsp.writeFile(
4445
path.join(workDir, 'package.json'),
4546
JSON.stringify(
4647
{
@@ -95,7 +96,7 @@ async function main() {
9596
continue
9697
}
9798
tracedDeps.add(file.replace(/\\/g, '/'))
98-
const stat = await fs.stat(path.join(workDir, file))
99+
const stat = await fsp.stat(path.join(workDir, file))
99100

100101
if (stat.isFile()) {
101102
const compressedSize = await gzipSize(path.join(workDir, file))
@@ -112,7 +113,7 @@ async function main() {
112113
totalUncompressedSize: prettyBytes(totalUncompressedSize),
113114
})
114115

115-
await fs.writeFile(
116+
await fsp.writeFile(
116117
path.join(
117118
__dirname,
118119
'../packages/next/dist/server/next-server.js.nft.json'
@@ -122,8 +123,8 @@ async function main() {
122123
version: 1,
123124
})
124125
)
125-
await fs.remove(workDir)
126-
await fs.remove(repoDir)
126+
await fsp.rm(workDir, { recursive: true, force: true })
127+
await fsp.rm(repoDir, { recursive: true, force: true })
127128

128129
console.timeEnd(traceLabel)
129130

0 commit comments

Comments
 (0)