Skip to content

Commit 34a63c7

Browse files
perf: improve performance
1 parent bfc712d commit 34a63c7

File tree

6 files changed

+34
-74
lines changed

6 files changed

+34
-74
lines changed

src/index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ class CopyPlugin {
5656
}
5757

5858
return Promise.all(
59-
files.filter(Boolean).map((file) =>
60-
limit(() => {
61-
return postProcessPattern(
59+
files
60+
.filter(Boolean)
61+
.map((file) =>
62+
postProcessPattern(
6263
globalRef,
6364
patternAfterPreProcess,
6465
file
65-
);
66-
})
67-
)
66+
)
67+
)
6868
);
6969
})
7070
)

src/postProcessPattern.js

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,13 @@ import { RawSource } from 'webpack-sources';
1111

1212
import { version } from '../package.json';
1313

14-
import { stat, readFile } from './utils/promisify';
14+
import { readFile } from './utils/promisify';
1515

1616
/* eslint-disable no-param-reassign */
1717

1818
export default async function postProcessPattern(globalRef, pattern, file) {
1919
const { logger, compilation, inputFileSystem } = globalRef;
2020

21-
logger.debug(`getting stats for '${file.absoluteFrom}' to write to assets`);
22-
23-
const getStats = pattern.stats
24-
? pattern.stats
25-
: stat(inputFileSystem, file.absoluteFrom);
26-
27-
let stats;
28-
29-
try {
30-
stats = await getStats;
31-
} catch (error) {
32-
compilation.errors.push(error);
33-
34-
return;
35-
}
36-
37-
if (stats.isDirectory()) {
38-
logger.debug(
39-
`skipping '${file.absoluteFrom}' because it is empty directory`
40-
);
41-
42-
return;
43-
}
44-
4521
// If this came from a glob, add it to the file watchlist
4622
if (pattern.fromType === 'glob') {
4723
logger.debug(`add ${file.absoluteFrom} as fileDependencies`);

src/preProcessPattern.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ export default async function preProcessPattern(globalRef, pattern) {
6363
pattern.fromType = 'dir';
6464
} else if (stats.isFile()) {
6565
pattern.fromType = 'file';
66-
pattern.stats = stats;
6766
}
6867

6968
return pattern;

src/processPattern.js

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,38 @@ export default async function processPattern(globalRef, pattern) {
3131
return Promise.resolve();
3232
}
3333

34-
return paths.map((filepath) => {
35-
let from;
34+
return (
35+
paths
36+
// Exclude directories
37+
.filter((item) => item.dirent.isFile())
38+
.map((item) => {
39+
const from = item.path;
3640

37-
if (typeof filepath === 'string') {
38-
from = filepath;
39-
} else {
40-
from = filepath.path;
41-
}
41+
const file = { absoluteFrom: path.resolve(pattern.context, from) };
4242

43-
const file = { absoluteFrom: path.resolve(pattern.context, from) };
43+
file.relativeFrom = path.relative(pattern.context, file.absoluteFrom);
4444

45-
file.relativeFrom = path.relative(pattern.context, file.absoluteFrom);
45+
if (pattern.flatten) {
46+
file.relativeFrom = path.basename(file.relativeFrom);
47+
}
4648

47-
if (pattern.flatten) {
48-
file.relativeFrom = path.basename(file.relativeFrom);
49-
}
49+
logger.debug(`found ${from}`);
5050

51-
logger.debug(`found ${from}`);
51+
// Change the to path to be relative for webpack
52+
file.webpackTo =
53+
pattern.toType === 'dir'
54+
? path.join(pattern.to, file.relativeFrom)
55+
: pattern.to;
5256

53-
// Change the to path to be relative for webpack
54-
file.webpackTo =
55-
pattern.toType === 'dir'
56-
? path.join(pattern.to, file.relativeFrom)
57-
: pattern.to;
57+
if (path.isAbsolute(file.webpackTo)) {
58+
file.webpackTo = path.relative(output, file.webpackTo);
59+
}
5860

59-
if (path.isAbsolute(file.webpackTo)) {
60-
file.webpackTo = path.relative(output, file.webpackTo);
61-
}
61+
logger.log(
62+
`determined that '${from}' should write to '${file.webpackTo}'`
63+
);
6264

63-
logger.log(`determined that '${from}' should write to '${file.webpackTo}'`);
64-
65-
return file;
66-
});
65+
return file;
66+
})
67+
);
6768
}

src/utils/createPatternGlob.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function createPatternGlob(pattern, globalRef) {
1515
pattern.globOptions = {
1616
...{ followSymbolicLinks: true },
1717
...(pattern.globOptions || {}),
18-
...{ cwd: pattern.context },
18+
...{ cwd: pattern.context, objectMode: true },
1919
};
2020

2121
switch (pattern.fromType) {

test/__snapshots__/CopyPlugin.test.js.snap

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ Object {
1616
"found ./fixtures/directory/nested/deep-nested/deepnested.txt",
1717
"found ./fixtures/directory/nested/nestedfile.txt",
1818
"getting stats for './fixtures/directory' to determinate 'fromType'",
19-
"getting stats for './fixtures/directory/.dottedfile' to write to assets",
20-
"getting stats for './fixtures/directory/directoryfile.txt' to write to assets",
21-
"getting stats for './fixtures/directory/nested/deep-nested/deepnested.txt' to write to assets",
22-
"getting stats for './fixtures/directory/nested/nestedfile.txt' to write to assets",
2319
"processing from: 'directory' to: '.'",
2420
"reading './fixtures/directory/.dottedfile' to write to assets",
2521
"reading './fixtures/directory/directoryfile.txt' to write to assets",
@@ -44,7 +40,6 @@ Object {
4440
"end to adding additional assets",
4541
"found ./fixtures/file.txt",
4642
"getting stats for './fixtures/file.txt' to determinate 'fromType'",
47-
"getting stats for './fixtures/file.txt' to write to assets",
4843
"processing from: 'file.txt' to: '.'",
4944
"reading './fixtures/file.txt' to write to assets",
5045
"start to adding additional assets",
@@ -63,28 +58,17 @@ Object {
6358
"begin globbing './fixtures/directory/**' with a context of './fixtures'",
6459
"determined './fixtures/directory/**' is a glob",
6560
"determined that './fixtures/directory/directoryfile.txt' should write to 'directory/directoryfile.txt'",
66-
"determined that './fixtures/directory/nested' should write to 'directory/nested'",
67-
"determined that './fixtures/directory/nested/deep-nested' should write to 'directory/nested/deep-nested'",
6861
"determined that './fixtures/directory/nested/deep-nested/deepnested.txt' should write to 'directory/nested/deep-nested/deepnested.txt'",
6962
"determined that './fixtures/directory/nested/nestedfile.txt' should write to 'directory/nested/nestedfile.txt'",
7063
"end to adding additional assets",
7164
"found ./fixtures/directory/directoryfile.txt",
72-
"found ./fixtures/directory/nested",
73-
"found ./fixtures/directory/nested/deep-nested",
7465
"found ./fixtures/directory/nested/deep-nested/deepnested.txt",
7566
"found ./fixtures/directory/nested/nestedfile.txt",
7667
"getting stats for './fixtures/directory/**' to determinate 'fromType'",
77-
"getting stats for './fixtures/directory/directoryfile.txt' to write to assets",
78-
"getting stats for './fixtures/directory/nested' to write to assets",
79-
"getting stats for './fixtures/directory/nested/deep-nested' to write to assets",
80-
"getting stats for './fixtures/directory/nested/deep-nested/deepnested.txt' to write to assets",
81-
"getting stats for './fixtures/directory/nested/nestedfile.txt' to write to assets",
8268
"processing from: 'directory/**' to: '.'",
8369
"reading './fixtures/directory/directoryfile.txt' to write to assets",
8470
"reading './fixtures/directory/nested/deep-nested/deepnested.txt' to write to assets",
8571
"reading './fixtures/directory/nested/nestedfile.txt' to write to assets",
86-
"skipping './fixtures/directory/nested' because it is empty directory",
87-
"skipping './fixtures/directory/nested/deep-nested' because it is empty directory",
8872
"start to adding additional assets",
8973
"writing 'directory/directoryfile.txt' to compilation assets from './fixtures/directory/directoryfile.txt'",
9074
"writing 'directory/nested/deep-nested/deepnested.txt' to compilation assets from './fixtures/directory/nested/deep-nested/deepnested.txt'",

0 commit comments

Comments
 (0)