Skip to content

Commit dd43ca1

Browse files
committed
keep meta files after cleaning build directory
1 parent 44c252d commit dd43ca1

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

scripts/build.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
3333
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
3434
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
3535
const printBuildError = require('react-dev-utils/printBuildError');
36-
const { cleanBuildDirectory } = require('./utils/cleanBuildDirectory');
36+
const { cleanBuildDirectory, cleanUnusedMetaFiles } = require('./utils/cleanBuildDirectory');
3737

3838
const measureFileSizesBeforeBuild =
3939
FileSizeReporter.measureFileSizesBeforeBuild;
@@ -66,11 +66,14 @@ checkBrowsers(paths.appPath, isInteractive)
6666
return measureFileSizesBeforeBuild(paths.appBuild);
6767
})
6868
.then(previousFileSizes => {
69-
cleanBuildDirectory();
69+
const metaFiles = cleanBuildDirectory(false);
7070
// Merge with the public folder
7171
copyPublicFolder();
7272
// Start the webpack build
73-
return build(previousFileSizes);
73+
return build(previousFileSizes).then((res) => {
74+
cleanUnusedMetaFiles(metaFiles);
75+
return res;
76+
});
7477
})
7578
.then(
7679
({ stats, previousFileSizes, warnings }) => {

scripts/clean.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ const { cleanBuildDirectory } = require('./utils/cleanBuildDirectory');
3030
Promise.resolve().then(() => {
3131
const buildFolder = path.relative(process.cwd(), paths.appBuild);
3232
console.log(`Cleaning build directory at ${chalk.blue(buildFolder)}`);
33-
cleanBuildDirectory();
33+
cleanBuildDirectory(true);
3434
});

scripts/utils/cleanBuildDirectory.js

+36-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const path = require('path');
1212
const fs = require('fs-extra');
1313
const paths = require('../../config/paths');
1414

15-
function cleanBuildDirectory() {
15+
function cleanBuildDirectory(cleanMetaFiles = false) {
1616
try {
1717
if (fs.existsSync(paths.appManifest)) {
1818
// Clean only the files inside the asset-manifest so that we avoid cleaning files belonging to user
@@ -21,26 +21,55 @@ function cleanBuildDirectory() {
2121

2222
const keys = Object.keys(manifest.files);
2323

24+
const metaFiles = [];
25+
2426
for (const key of keys) {
2527
const file = manifest.files[key];
2628
const filePath = path.join(paths.appBuild, file);
2729
const metaFile = filePath + '.meta';
2830

2931
fs.removeSync(filePath);
30-
fs.removeSync(metaFile);
32+
33+
if (fs.existsSync(metaFile)) {
34+
if (cleanMetaFiles) fs.removeSync(metaFile);
35+
else metaFiles.push(metaFile);
36+
}
3137
}
3238

3339
const manifestMeta = paths.appManifest + '.meta';
3440
fs.removeSync(paths.appManifest);
35-
fs.removeSync(manifestMeta);
41+
42+
if (fs.existsSync(manifestMeta)) {
43+
if (cleanMetaFiles) fs.removeSync(manifestMeta);
44+
else metaFiles.push(manifestMeta);
45+
}
3646

3747
cleanEmptyFoldersRecursively(null, paths.appBuild, true);
3848

39-
return;
49+
return metaFiles;
4050
}
41-
} catch (err) { }
51+
} catch (err) {
52+
console.log('Skipped clearing output directory because asset manifest was not found. Please clean the output directory manually if necessary.');
53+
return [];
54+
}
55+
}
4256

43-
console.log('Skipped clearing output directory because asset manifest was not found. Please clean the output directory manually if necessary.');
57+
function cleanUnusedMetaFiles(metaFiles) {
58+
try {
59+
for (const metaFile of metaFiles) {
60+
try {
61+
if (!fs.existsSync(metaFile)) continue;
62+
63+
const nonMetaFile = metaFile.replace(/\.meta$/, '');
64+
if (fs.existsSync(nonMetaFile)) continue;
65+
66+
fs.removeSync(metaFile);
67+
} catch (err) {
68+
console.log('Error while cleaning meta file: ' + metaFile);
69+
}
70+
}
71+
} catch (err) {
72+
}
4473
}
4574

4675

@@ -74,3 +103,4 @@ function cleanEmptyFoldersRecursively(parent, folder, skipFirst) {
74103
}
75104

76105
module.exports.cleanBuildDirectory = cleanBuildDirectory;
106+
module.exports.cleanUnusedMetaFiles = cleanUnusedMetaFiles;

0 commit comments

Comments
 (0)