This repository was archived by the owner on Jul 28, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcleanBuildDirectory.js
More file actions
105 lines (85 loc) · 2.92 KB
/
Copy pathcleanBuildDirectory.js
File metadata and controls
105 lines (85 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// @remove-on-eject-begin
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// @remove-on-eject-end
const path = require('node:path');
const fs = require('fs-extra');
const paths = require('../../config/paths');
function cleanBuildDirectory(cleanMetaFiles = false) {
try {
if (fs.existsSync(paths.appManifest)) {
// Clean only the files inside the asset-manifest so that we avoid cleaning files belonging to user
const manifestContent = fs.readFileSync(paths.appManifest, 'utf8');
const manifest = JSON.parse(manifestContent);
const keys = Object.keys(manifest.files);
const metaFiles = [];
for (const key of keys) {
const file = manifest.files[key];
const filePath = path.join(paths.appBuild, file);
const metaFile = `${filePath}.meta`;
fs.removeSync(filePath);
if (fs.existsSync(metaFile)) {
if (cleanMetaFiles) fs.removeSync(metaFile);
else metaFiles.push(metaFile);
}
}
const manifestMeta = `${paths.appManifest}.meta`;
fs.removeSync(paths.appManifest);
if (fs.existsSync(manifestMeta)) {
if (cleanMetaFiles) fs.removeSync(manifestMeta);
else metaFiles.push(manifestMeta);
}
cleanEmptyFoldersRecursively(null, paths.appBuild, true);
return metaFiles;
}
} catch (err) {
console.log(
'Skipped clearing output directory because asset manifest was not found. Please clean the output directory manually if necessary.',
);
return [];
}
}
function cleanUnusedMetaFiles(metaFiles) {
try {
for (const metaFile of metaFiles) {
try {
if (!fs.existsSync(metaFile)) continue;
const nonMetaFile = metaFile.replace(/\.meta$/, '');
if (fs.existsSync(nonMetaFile)) continue;
fs.removeSync(metaFile);
} catch (err) {
console.log(`Error while cleaning meta file: ${metaFile}`);
}
}
} catch (err) {}
}
function cleanEmptyFoldersRecursively(parent, folder, skipFirst) {
if (!fs.existsSync(folder)) return;
const isDir = fs.statSync(folder).isDirectory();
if (!isDir) return;
let files = fs.readdirSync(folder);
if (files.length > 0) {
files.forEach((file) => {
const fullPath = path.join(folder, file);
cleanEmptyFoldersRecursively(folder, fullPath, false);
});
// re-evaluate files; after deleting subfolder
// we may have parent folder empty now
files = fs.readdirSync(folder);
}
if (!skipFirst && !files.length) {
fs.rmdirSync(folder);
if (parent) {
const folderName = path.basename(folder);
const dirMeta = path.join(parent, `${folderName}.meta`);
fs.removeSync(dirMeta);
}
return;
}
}
module.exports.cleanBuildDirectory = cleanBuildDirectory;
module.exports.cleanUnusedMetaFiles = cleanUnusedMetaFiles;