Skip to content

Commit 651e3f8

Browse files
committed
move duplicated functions to react-dev-utils
1 parent 629e0c8 commit 651e3f8

File tree

8 files changed

+467
-241
lines changed

8 files changed

+467
-241
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var fs = require('fs-extra');
2+
module.exports = paths => function copyPublicFolder() {
3+
fs.copySync(paths.appPublic, paths.appBuild, {
4+
dereference: true,
5+
filter: file => file !== paths.appHtml
6+
});
7+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var chalk = require('chalk');
2+
var filesize = require('filesize');
3+
4+
// Input: 1024, 2048
5+
// Output: "(+1 KB)"
6+
module.exports = function getDifferenceLabel(currentSize, previousSize) {
7+
var FIFTY_KILOBYTES = 1024 * 50;
8+
var difference = currentSize - previousSize;
9+
var fileSize = !Number.isNaN(difference) ? filesize(difference) : 0;
10+
if (difference >= FIFTY_KILOBYTES) {
11+
return chalk.red('+' + fileSize);
12+
} else if (difference < FIFTY_KILOBYTES && difference > 0) {
13+
return chalk.yellow('+' + fileSize);
14+
} else if (difference < 0) {
15+
return chalk.green(fileSize);
16+
} else {
17+
return '';
18+
}
19+
};

packages/react-dev-utils/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
"ansi-html": "0.0.5",
2727
"chalk": "1.1.3",
2828
"escape-string-regexp": "1.0.5",
29+
"filesize": "3.3.0",
30+
"gzip-size": "^3.0.0",
2931
"html-entities": "1.2.0",
3032
"opn": "4.0.2",
3133
"sockjs-client": "1.0.1",
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
var chalk = require('chalk');
4+
var filesize = require('filesize');
5+
var stripAnsi = require('strip-ansi');
6+
var gzipSize = require('gzip-size').sync;
7+
8+
// Print a detailed summary of build files.
9+
module.exports = paths => function printFileSizes(stats, previousSizeMap) {
10+
var removeFileNameHash = require('./removeFileNameHash')(paths);
11+
var getDifferenceLabel = require('./getDifferenceLabel');
12+
var assets = stats
13+
.toJson()
14+
.assets.filter(asset => /\.(js|css)$/.test(asset.name))
15+
.map(asset => {
16+
var fileContents = fs.readFileSync(paths.appBuild + '/' + asset.name);
17+
var size = gzipSize(fileContents);
18+
var previousSize = previousSizeMap[removeFileNameHash(asset.name)];
19+
var difference = getDifferenceLabel(size, previousSize);
20+
return {
21+
folder: path.join('build', path.dirname(asset.name)),
22+
name: path.basename(asset.name),
23+
size: size,
24+
sizeLabel: filesize(size) + (difference ? ' (' + difference + ')' : '')
25+
};
26+
});
27+
assets.sort((a, b) => b.size - a.size);
28+
var longestSizeLabelLength = Math.max.apply(
29+
null,
30+
assets.map(a => stripAnsi(a.sizeLabel).length)
31+
);
32+
assets.forEach(asset => {
33+
var sizeLabel = asset.sizeLabel;
34+
var sizeLength = stripAnsi(sizeLabel).length;
35+
if (sizeLength < longestSizeLabelLength) {
36+
var rightPadding = ' '.repeat(longestSizeLabelLength - sizeLength);
37+
sizeLabel += rightPadding;
38+
}
39+
console.log(
40+
' ' +
41+
sizeLabel +
42+
' ' +
43+
chalk.dim(asset.folder + path.sep) +
44+
chalk.cyan(asset.name)
45+
);
46+
});
47+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Input: /User/dan/app/build/static/js/main.82be8.js
2+
// Output: /static/js/main.js
3+
module.exports = paths => function removeFileNameHash(fileName) {
4+
return fileName
5+
.replace(paths.appBuild, '')
6+
.replace(/\/?(.*)(\.\w+)(\.js|\.css)/, (match, p1, p2, p3) => p1 + p3);
7+
};

packages/react-dev-utils/yarn.lock

+163
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1
3+
4+
5+
6+
version "0.0.5"
7+
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.5.tgz#0dcaa5a081206866bc240a3b773a184ea3b88b64"
8+
9+
ansi-regex@^2.0.0:
10+
version "2.1.1"
11+
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
12+
13+
ansi-styles@^2.2.1:
14+
version "2.2.1"
15+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
16+
17+
18+
version "1.1.3"
19+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
20+
dependencies:
21+
ansi-styles "^2.2.1"
22+
escape-string-regexp "^1.0.2"
23+
has-ansi "^2.0.0"
24+
strip-ansi "^3.0.0"
25+
supports-color "^2.0.0"
26+
27+
debug@^2.1.0:
28+
version "2.6.1"
29+
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
30+
dependencies:
31+
ms "0.7.2"
32+
33+
duplexer@^0.1.1:
34+
version "0.1.1"
35+
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
36+
37+
[email protected], escape-string-regexp@^1.0.2:
38+
version "1.0.5"
39+
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
40+
41+
eventsource@^0.1.3:
42+
version "0.1.6"
43+
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
44+
dependencies:
45+
original ">=0.0.5"
46+
47+
faye-websocket@~0.7.3:
48+
version "0.7.3"
49+
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz#cc4074c7f4a4dfd03af54dd65c354b135132ce11"
50+
dependencies:
51+
websocket-driver ">=0.3.6"
52+
53+
54+
version "3.3.0"
55+
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122"
56+
57+
gzip-size@^3.0.0:
58+
version "3.0.0"
59+
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
60+
dependencies:
61+
duplexer "^0.1.1"
62+
63+
has-ansi@^2.0.0:
64+
version "2.0.0"
65+
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
66+
dependencies:
67+
ansi-regex "^2.0.0"
68+
69+
70+
version "1.2.0"
71+
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2"
72+
73+
inherits@^2.0.1:
74+
version "2.0.3"
75+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
76+
77+
json3@^3.3.2:
78+
version "3.3.2"
79+
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
80+
81+
82+
version "0.7.2"
83+
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
84+
85+
object-assign@^4.0.1:
86+
version "4.1.1"
87+
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
88+
89+
90+
version "4.0.2"
91+
resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
92+
dependencies:
93+
object-assign "^4.0.1"
94+
pinkie-promise "^2.0.0"
95+
96+
original@>=0.0.5:
97+
version "1.0.0"
98+
resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
99+
dependencies:
100+
url-parse "1.0.x"
101+
102+
pinkie-promise@^2.0.0:
103+
version "2.0.1"
104+
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
105+
dependencies:
106+
pinkie "^2.0.0"
107+
108+
pinkie@^2.0.0:
109+
version "2.0.4"
110+
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
111+
112+
113+
version "0.0.4"
114+
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c"
115+
116+
117+
version "1.0.0"
118+
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
119+
120+
121+
version "1.0.1"
122+
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.0.1.tgz#8943ae05b46547bc2054816c409002cf5e2fe026"
123+
dependencies:
124+
debug "^2.1.0"
125+
eventsource "^0.1.3"
126+
faye-websocket "~0.7.3"
127+
inherits "^2.0.1"
128+
json3 "^3.3.2"
129+
url-parse "^1.0.1"
130+
131+
[email protected], strip-ansi@^3.0.0:
132+
version "3.0.1"
133+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
134+
dependencies:
135+
ansi-regex "^2.0.0"
136+
137+
supports-color@^2.0.0:
138+
version "2.0.0"
139+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
140+
141+
142+
version "1.0.5"
143+
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b"
144+
dependencies:
145+
querystringify "0.0.x"
146+
requires-port "1.0.x"
147+
148+
url-parse@^1.0.1:
149+
version "1.1.8"
150+
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156"
151+
dependencies:
152+
querystringify "0.0.x"
153+
requires-port "1.0.x"
154+
155+
websocket-driver@>=0.3.6:
156+
version "0.6.5"
157+
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
158+
dependencies:
159+
websocket-extensions ">=0.1.1"
160+
161+
websocket-extensions@>=0.1.1:
162+
version "0.1.1"
163+
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"

0 commit comments

Comments
 (0)