Compare commits
1102 Commits
Author | SHA1 | Date |
---|---|---|
|
c7ebdbda63 | |
|
b7530c2510 | |
|
f3ef1428b3 | |
|
d32f1711ac | |
|
436fc7d9da | |
|
c7dd066327 | |
|
85bacbdc6e | |
|
7634cd28bf | |
|
9f98d803c0 | |
|
8804459884 | |
|
bc91301142 | |
|
e1afcd4cc2 | |
|
d45073a2b3 | |
|
568bb1d789 | |
|
11144e4eec | |
|
b6c781a0f1 | |
|
3c08fd105c | |
|
f508e8b705 | |
|
5c11f27b6b | |
|
14c813a0b3 | |
|
761b153060 | |
|
8c0fa9e9dc | |
|
0a58530ef4 | |
|
042bf86cf8 | |
|
d9121b39a1 | |
|
3f00777e67 | |
|
3cf0d95e86 | |
|
84e5c129d1 | |
|
44cf16f2eb | |
|
a9c6c3d203 | |
|
45d47c608a | |
|
f6c3c24da3 | |
|
c647cf193c | |
|
73cecf5e78 | |
|
ae52500e95 | |
|
19f5693ebc | |
|
cf17a41259 | |
|
898c48042d | |
|
ab9f78b8f6 | |
|
a796d25769 | |
|
8e94386ee4 | |
|
3ac31e24e3 | |
|
7fc28f1e53 | |
|
6e6d0442ae | |
|
3799e931af | |
|
480bb3b91d | |
|
c90f405abd | |
|
4fabb754de | |
|
2a76ea2192 | |
|
ffcbedddd4 | |
|
36b322ad23 | |
|
1f5e8e55c7 | |
|
ce2f41e312 | |
|
16c6966b14 | |
|
6b70c4ac52 | |
|
06f4cb2a08 | |
|
a4c722ed95 | |
|
99c36fab8e | |
|
95ce962897 | |
|
930785fb00 | |
|
df204b5f71 | |
|
cc8e6a195a | |
|
c52d8b3b75 | |
|
e4ae6e83ce | |
|
e5fd6a18fe | |
|
6529f8c789 | |
|
407de36dfb | |
|
20abdce9b0 | |
|
c45737f0c4 | |
|
b865bf3468 | |
|
4888e41087 | |
|
57a8ebd761 | |
|
50119bb9b0 | |
|
d2d939cd7c | |
|
7ddc38a376 | |
|
deac8ba5e1 | |
|
2d25a95d8c | |
|
1ffd83f416 | |
|
a61dbf4a64 | |
|
62924911ad | |
|
df563e9b50 | |
|
21988d7ab4 | |
|
092b3fe533 | |
|
851abce98b | |
|
47e80b56a7 | |
|
47f9786b81 | |
|
6ae1330fb2 | |
|
740f0f629b | |
|
fd2f76d845 | |
|
76ce24f414 | |
|
8092e42124 | |
|
8ea693e6a0 | |
|
b843ea827b | |
|
6b313c950d | |
|
488ba2ef1d | |
|
79304704b5 | |
|
5b0f260913 | |
|
64ce283d76 | |
|
bb98bb1470 | |
|
d224b7b334 | |
|
076863133b | |
|
08599420db | |
|
914db1f7ca | |
|
a0f19f7c50 | |
|
e2ded49ee6 | |
|
e570c1b5d1 | |
|
c1803e4b37 | |
|
500b22c42d | |
|
d624db8491 | |
|
70cecf35dd | |
|
f5edf251a9 | |
|
13f6eab4f4 | |
|
64985ecad6 | |
|
ba552aabfc | |
|
82966a31a7 | |
|
bcde724fec | |
|
153afb3cf1 | |
|
31f983ec38 | |
|
160395c94b | |
|
4d670a28a9 | |
|
04398dd9b4 | |
|
71569824c3 | |
|
5b7dee29ff | |
|
a61ea77727 | |
|
6c26f74e88 | |
|
8c287addee | |
|
3f9a75fadf | |
|
feaa933996 | |
|
72b7d0c298 | |
|
3da52936e0 | |
|
7cdb4b92fe | |
|
07b1ac0213 | |
|
8d7efb8b04 | |
|
935cbd8552 | |
|
dc79e95022 | |
|
90ae8af3d1 | |
|
8db97f863f | |
|
c92deaf02c | |
|
c50930b3be | |
|
613a5ada7e | |
|
1d9cc240a2 | |
|
f0da8c6c2e | |
|
0d7aaae4ca | |
|
c21b4e2475 | |
|
0617b7d787 | |
|
cbfba9a150 | |
|
61a15a672e | |
|
ad23854a27 | |
|
1a3c3a33bf | |
|
4a0aa5d204 | |
|
8b373fe013 | |
|
1887f2c1bd | |
|
de39337fa8 | |
|
cbacdf11bf | |
|
e3c48f5df4 | |
|
59a645cdf8 | |
|
a87f569b92 | |
|
4fdb0e16eb | |
|
4267518491 | |
|
60e0589d5f | |
|
12308d5841 | |
|
5a72fb9bec | |
|
67379fe33d | |
|
af76497542 | |
|
f2228eaa09 | |
|
a0189019cc | |
|
9a3c4f9f8b | |
|
07a9d20a4c | |
|
e8e9f15b82 | |
|
105fa13888 | |
|
55b57e5b64 | |
|
de79ee457e | |
|
d2d34e6267 | |
|
5a1834dcbb | |
|
5b87bedaf4 | |
|
fbb7a8dd08 | |
|
36a976b084 | |
|
92304dfe07 | |
|
f6b7a8eef1 | |
|
1eb5bb1677 | |
|
42daf55d3b | |
|
22596936cf | |
|
3d2dfd25fe | |
|
1f19f950e6 | |
|
1d6d841e99 | |
|
262aab7fdb | |
|
aeab4c5ac1 | |
|
4065bddc9d | |
|
d5074201cf | |
|
2278878f65 | |
|
ff7534a07a | |
|
2532bcfed5 | |
|
745d8c8af4 | |
|
36476f788b | |
|
c3230114bc | |
|
239aacc0a3 | |
|
8138c7980b | |
|
fcaeed82b1 | |
|
f07eba4bc4 | |
|
c1f2249eea | |
|
cd650a1bbf | |
|
fbe43932ec | |
|
3e5edf08f1 | |
|
703d9acfe7 | |
|
d8690f3d4b | |
|
b82be9bc29 | |
|
4c9c5394e9 | |
|
21fcdbb8f2 | |
|
2c8d1f14e5 | |
|
89eb6a3c81 | |
|
fdb0c4efe3 | |
|
d76af00142 | |
|
503ed53208 | |
|
e25189162a | |
|
9eb964224c | |
|
0a984462ab | |
|
6de2dfddcd | |
|
1fdb6d0ad1 | |
|
5afcc19db5 | |
|
ad1e3b46f4 | |
|
5cba3c45f8 | |
|
fa54eac68b | |
|
34df7eec7e | |
|
24b1ec7611 | |
|
09a7a97ab4 | |
|
8ca8b7d034 | |
|
83c534ca3a | |
|
0ed4a64d33 | |
|
6801022b7b | |
|
5a204dc8cd | |
|
260f85e466 | |
|
68ce2a7240 | |
|
8ccc7da94d | |
|
1c82f9889e | |
|
a1f619a468 | |
|
b4dfee432d | |
|
a11302288d | |
|
eaeea9c512 | |
|
cdf7ef54ea | |
|
4fa1daa2c2 | |
|
58aded3461 | |
|
3b3d4c5528 | |
|
0b51fad980 | |
|
87f648ebf0 | |
|
02a1d22db8 | |
|
cf1dc2f131 | |
|
d4f275dcc2 | |
|
4d844bea90 | |
|
5bcd259a09 | |
|
2ee5078941 | |
|
0e4a7ce73f | |
|
22c0d02e66 | |
|
43b0aafc91 | |
|
fab6c686fa | |
|
10fb5566e7 | |
|
21b28a82f7 | |
|
24c0ededd2 | |
|
c109f97b1b | |
|
09fda8730d | |
|
605897418a | |
|
a55ac0ed6d | |
|
0af28df145 | |
|
574a88736d | |
|
93eb096c84 | |
|
4df83e7c54 | |
|
d7987b9904 | |
|
19ca74127f | |
|
f3001e0ce8 | |
|
a4bd378b74 | |
|
47866c450d | |
|
79b3000fda | |
|
fc969037ca | |
|
e805dc1b09 | |
|
1b34181550 | |
|
4be8fcc3dd | |
|
af1c86da6f | |
|
c9e25e5d06 | |
|
d681b87747 | |
|
9bc07c6c19 | |
|
e4c21e2766 | |
|
eff3e26b11 | |
|
4b309eda4e | |
|
6c9f912af2 | |
|
bca3d4097c | |
|
356c5d1a5f | |
|
2c4f967fa6 | |
|
6b3e1c5845 | |
|
dc19f82df0 | |
|
598767ed85 | |
|
34ec1d87d1 | |
|
12b8458d6a | |
|
c1e7ba2742 | |
|
3a527e6804 | |
|
b4b35413f0 | |
|
7bbeda19bb | |
|
1c0158c4de | |
|
843f788205 | |
|
6c75830e9f | |
|
67aa02a2c0 | |
|
9cf04be110 | |
|
a66acdc81e | |
|
c6ae84152e | |
|
2b124f07c1 | |
|
f0e8744d51 | |
|
cca6919176 | |
|
873b1e42aa | |
|
dec18718be | |
|
bda9bfd46c | |
|
a9cbd85abf | |
|
5cc661550d | |
|
0f42dc5b8b | |
|
ebeace3361 | |
|
3f36f91e51 | |
|
bc258291f6 | |
|
ea3ba3dfcc | |
|
45f0e495e7 | |
|
56dd6caa03 | |
|
5d8f2c99b6 | |
|
875e53f448 | |
|
88e1c83b97 | |
|
7d7d7033fc | |
|
9e0339de0f | |
|
9a0e0ea4ee | |
|
9066ab0e12 | |
|
972997c5c5 | |
|
ad77deb6ed | |
|
1e9cb420b8 | |
|
3b18244c0a | |
|
246d8ba30f | |
|
c58592810f | |
|
1304500b53 | |
|
ec9e9ef117 | |
|
dc33a1e662 | |
|
648e026c1e | |
|
519187b47c | |
|
52dc1936a9 | |
|
d988515292 | |
|
087abd7908 | |
|
0778b0408b | |
|
af2acc56e8 | |
|
f59a6f371e | |
|
1092f7ab97 | |
|
4fd71222c9 | |
|
cc4389ef28 | |
|
52e710737c | |
|
207f198913 | |
|
e6ed2acecf | |
|
f8d7638eea | |
|
52db187532 | |
|
0414fd4f1c | |
|
ada3453dbc | |
|
7dc24f9b79 | |
|
ab50a631f3 | |
|
9e6984056b | |
|
e333fe9adf | |
|
593b2362e6 | |
|
351fe5fdde | |
|
1ca02da83a | |
|
2b64da7342 | |
|
dc6309fb54 | |
|
f378471064 | |
|
f8eee102c2 | |
|
e207e614e6 | |
|
00a888a804 | |
|
4211c97f9b | |
|
b1bc97a303 | |
|
bd1ff8c317 | |
|
747cf9db58 | |
|
df3da4826a | |
|
fe2ce398a3 | |
|
4d6d3800b4 | |
|
8bfb7b2fdd | |
|
eda2e284ac | |
|
70e3d9d5db | |
|
6a853ef533 | |
|
04e00736b0 | |
|
b92cb0cf72 | |
|
2470d8e74c | |
|
278fcb6da9 | |
|
44da94f433 | |
|
de8a04fbda | |
|
2b2b705cc5 | |
|
6545dd44ce | |
|
cf8c1cf9e4 | |
|
1bd06e3333 | |
|
17b9d03f27 | |
|
bba9874f0d | |
|
e0891eeea0 | |
|
e5c3f95b84 | |
|
880cf0804d | |
|
6d37e76297 | |
|
b8b90d6ee9 | |
|
05b39c2c60 | |
|
38f9de5084 | |
|
e911f5296d | |
|
d3809aee24 | |
|
90604fe855 | |
|
84342804dc | |
|
97d4961cd1 | |
|
471488e316 | |
|
79c5575cfc | |
|
cd805fb3ae | |
|
7e5752d7fe | |
|
cd8b2aa236 | |
|
74370a9c2a | |
|
031a76df03 | |
|
d2e73d7c0d | |
|
7ca5f068d3 | |
|
4af44a78bb | |
|
fc47ea72be | |
|
23e9ba32e1 | |
|
3aa6b6bc3a | |
|
87b203b27e | |
|
14b46d25a4 | |
|
0032a052b4 | |
|
e273d260c4 | |
|
115f41ee8d | |
|
b91099b38e | |
|
370bacc6c8 | |
|
cb93228ce5 | |
|
5c51d83932 | |
|
70bdb248e4 | |
|
48ffd14e2a | |
|
394c4c32e9 | |
|
8ab85e29bb | |
|
cb25853b58 | |
|
75314afd4e | |
|
a1df00d339 | |
|
1178013c99 | |
|
c1c085d74a | |
|
3c753354bf | |
|
1b7f0e1e95 | |
|
c282c96ca1 | |
|
8089525014 | |
|
0992137f40 | |
|
5a94c06c67 | |
|
4ea7d5a834 | |
|
7df403ed5d | |
|
9abab772ea | |
|
8e9ff66838 | |
|
7b4641f5ee | |
|
59ede3c64a | |
|
98221f239b | |
|
05f2862b32 | |
|
916f049fba | |
|
ebd45ca5ee | |
|
af7d788437 | |
|
0377fb1643 | |
|
564a0e52a0 | |
|
4fde180e9a | |
|
fdfb92ae3e | |
|
3ee8d5fa82 | |
|
6bda8a3549 | |
|
896ed385c9 | |
|
3755a3ec8a | |
|
d6679b3333 | |
|
7168389ac6 | |
|
e3092e5d7e | |
|
3f5c3a84fa | |
|
9af1983231 | |
|
de2199c753 | |
|
11449f0217 | |
|
491d7e0d73 | |
|
9579f223fc | |
|
a1edb20b10 | |
|
e55b08b9eb | |
|
6e14dbabd7 | |
|
f123ce5090 | |
|
af20c7be24 | |
|
80826c5cf2 | |
|
ac6ffca02d | |
|
8ac130a2c8 | |
|
ddc3782298 | |
|
e83fb236ee | |
|
4815712a1d | |
|
40c2a5f419 | |
|
131d02f8c4 | |
|
fab79c1b5d | |
|
a5ad13c092 | |
|
6ab67fa73b | |
|
e401c64833 | |
|
4ab682db5f | |
|
2d5447ef43 | |
|
87310da049 | |
|
3919c844ec | |
|
a86bff2874 | |
|
7701ae4320 | |
|
0f5e896679 | |
|
83ff2426bc | |
|
3de7b0d330 | |
|
964c0315df | |
|
3d510f05b7 | |
|
c257b612b3 | |
|
d8719cd023 | |
|
d72ccc1d3b | |
|
38df65df32 | |
|
3612d36e44 | |
|
eb7ac6f39a | |
|
554be24d3b | |
|
5e0e780853 | |
|
58fb03552c | |
|
af1fd12efe | |
|
34f19cbcd9 | |
|
0ec7f5db97 | |
|
5e7b8a23aa | |
|
644f1d1271 | |
|
a2ad76cd50 | |
|
8edbc7ce2a | |
|
9519265998 | |
|
5e2abae79e | |
|
d5f19bf9a4 | |
|
b475c53b81 | |
|
aa1d44e29e | |
|
38f21c0da8 | |
|
193b712734 | |
|
a1f53a9f29 | |
|
aec2ccbc61 | |
|
ba11c5476f | |
|
ebfe722e41 | |
|
f4092a6059 | |
|
fbd7d85548 | |
|
977ee08c3d | |
|
8e80c60aa5 | |
|
f290b16879 | |
|
6fe040f036 | |
|
89dfc9a5c5 | |
|
45d41b0349 | |
|
e47a3a3d02 | |
|
b4f853309f | |
|
7f8802a8da | |
|
b041f7a2e9 | |
|
8a04c64e5e | |
|
1a5e531ccb | |
|
f2521e043a | |
|
cd4ab09da8 | |
|
7aef2e359c | |
|
5e3e1572a0 | |
|
8aee37976b | |
|
3c0c08838b | |
|
f0f9ce9cf3 | |
|
eac3edd45d | |
|
05bea153bc | |
|
4fa44051f1 | |
|
2a8bb8bcf7 | |
|
f12de16d2f | |
|
d19ad4a46a | |
|
cd34814eb7 | |
|
affadffeec | |
|
9c5cd6216d | |
|
ca4acef212 | |
|
2c00999301 | |
|
71ea450287 | |
|
627773bb69 | |
|
4d95b0df1d | |
|
96c543c0a9 | |
|
2f7a34f4a1 | |
|
db494c73a1 | |
|
c5a15abbd0 | |
|
cb8bdfa522 | |
|
26a3c92fc0 | |
|
d5dc65eedd | |
|
780333108a | |
|
3d37ec5a76 | |
|
2fa1a23fed | |
|
5821a9b8ea | |
|
c7e898f007 | |
|
0016a1a075 | |
|
a24e4fdd6e | |
|
8031c700a1 | |
|
3b2db9ba50 | |
|
1c18ffdfe9 | |
|
8841a824f5 | |
|
41e85847f9 | |
|
644e5630fe | |
|
e172c44374 | |
|
67543070b2 | |
|
9f9d6a4388 | |
|
16719ec475 | |
|
6148cf2f7c | |
|
6f5c6b9778 | |
|
038e51c4b5 | |
|
1ce3c42b90 | |
|
026f453b98 | |
|
da41ad1845 | |
|
54b687d8a1 | |
|
2bb1402469 | |
|
9a56300bae | |
|
0ab5b9e00c | |
|
cc5a568337 | |
|
d7514b4fce | |
|
f01f82b2d8 | |
|
5e21745e98 | |
|
9c2d53365c | |
|
5e2d5068b9 | |
|
55af197bdf | |
|
31bd6a2d26 | |
|
fe74c240ec | |
|
bfe0407246 | |
|
2cd4a25570 | |
|
640be2f1fe | |
|
c8cc6143c8 | |
|
6476f0de02 | |
|
bc6ef39a9e | |
|
a373c5a4e0 | |
|
e1c5544c86 | |
|
171bae7912 | |
|
e203fb3270 | |
|
90bf8dd833 | |
|
12daecc826 | |
|
23228c8c50 | |
|
156e94585f | |
|
12b95b8987 | |
|
47adff9e94 | |
|
4c35dc5d33 | |
|
72bf754d5e | |
|
0ddd74df05 | |
|
99db8a114b | |
|
9b3d2a992b | |
|
3ea481fb9e | |
|
31062ff7b1 | |
|
1f14082a14 | |
|
09d17d4bad | |
|
abd35ef962 | |
|
61f94046cd | |
|
753f051509 | |
|
c0389a2726 | |
|
917fe99cd9 | |
|
5e09d0e05f | |
|
5e8317b881 | |
|
897d6d865f | |
|
9e190d738a | |
|
6a6d94c6d9 | |
|
866d559bfe | |
|
d4ced73222 | |
|
7d6dbea53c | |
|
5c556e32c5 | |
|
2420eaebe2 | |
|
ec45d2d8d4 | |
|
aff0c3ed2b | |
|
6f11ec1731 | |
|
b07142f672 | |
|
7d98b3c534 | |
|
6d0976951f | |
|
cb3cf61975 | |
|
69dd27e3a6 | |
|
6a6f14fc04 | |
|
db323536f2 | |
|
79b8f00ea5 | |
|
b520904482 | |
|
e5391de40b | |
|
dd83eea98d | |
|
5cbb321d6a | |
|
2e174de663 | |
|
d7292f45d2 | |
|
bea6384038 | |
|
c8522dcecb | |
|
03f8bf71bf | |
|
6589de0b63 | |
|
0d5476df4f | |
|
e237b580e2 | |
|
e10dcf597e | |
|
5ac0434184 | |
|
e11f2eaab4 | |
|
8b864dbe81 | |
|
abe931a19b | |
|
bb39c021af | |
|
152cb00181 | |
|
97c3e87540 | |
|
319576720c | |
|
7ffa4eb81a | |
|
b0b8515bd6 | |
|
4e02797e0a | |
|
8a8587fe0a | |
|
dacf3dcdc3 | |
|
93fc22de6a | |
|
420d0d0eed | |
|
9903856854 | |
|
e4890d4f31 | |
|
3484b0b82c | |
|
ecd9c58f92 | |
|
9820e0b3d6 | |
|
d46dee8f83 | |
|
afcf3bb8b1 | |
|
60c32d895e | |
|
5832888320 | |
|
09650f5446 | |
|
d763634b9d | |
|
9c47bdb919 | |
|
6d7b769f2f | |
|
1ff9185ad3 | |
|
b81de39316 | |
|
01a135c231 | |
|
7f47cad728 | |
|
5956daa300 | |
|
6b01646daf | |
|
ee026f1b27 | |
|
1178093c24 | |
|
f668d68af8 | |
|
eab8815c05 | |
|
aae2519634 | |
|
c801ebb253 | |
|
18d6cb5afe | |
|
8faa51b640 | |
|
e1c91ce9cb | |
|
eba41c692c | |
|
291ebf8287 | |
|
72dcb6be2f | |
|
5775d1fdf8 | |
|
909739b890 | |
|
5759a4af5a | |
|
c0df4fc9fe | |
|
e66f14fa1f | |
|
644d8170a0 | |
|
e7121fe997 | |
|
8c43febb2f | |
|
0ba37443e6 | |
|
a7e5e6a02b | |
|
5ad5c12ffe | |
|
d942ec64d3 | |
|
fc260543ae | |
|
7d888ffe1d | |
|
6313616448 | |
|
050f6f542c | |
|
737c16cb11 | |
|
f8690def6a | |
|
1e95fcb80f | |
|
bb10e4b5f0 | |
|
df669cacca | |
|
3bc531bf52 | |
|
485f3d6758 | |
|
fd75e12ff2 | |
|
5a3ce4e0d7 | |
|
1e364fabe2 | |
|
8403d3025c | |
|
4da89eddfd | |
|
21de2efdf3 | |
|
bdb95abd9b | |
|
5b6e2e3097 | |
|
dbefa9829b | |
|
49a9968813 | |
|
6c79d27748 | |
|
28ae7718ca | |
|
db4a23ee9e | |
|
ddd92aba5d | |
|
755bf161bc | |
|
af922431d2 | |
|
d0bfad35ae | |
|
07670cf9e8 | |
|
80a6b339c9 | |
|
11f5b59ab2 | |
|
f7b4db8f9b | |
|
65bce6826b | |
|
7e74b65cbc | |
|
56e525bc15 | |
|
0a8f47da07 | |
|
30ccd1baa9 | |
|
94fa19ad68 | |
|
7fd36f908e | |
|
be05f2a6bb | |
|
8dc4fabb69 | |
|
b4924e0b37 | |
|
91fe52958c | |
|
94feb93752 | |
|
53fb6c9e8a | |
|
f34c54d137 | |
|
675a6c02e6 | |
|
2651305b88 | |
|
9192eefa6c | |
|
d01ed0002a | |
|
4d75e44838 | |
|
9ad073028e | |
|
fcd41d21be | |
|
eed7f1931b | |
|
d7a308a172 | |
|
3459d77a50 | |
|
7dc05c16fb | |
|
1a63020998 | |
|
8fb481d9db | |
|
d095d62e24 | |
|
c5edbaa399 | |
|
fd1d1f87c1 | |
|
e9b92650cd | |
|
6451e845b5 | |
|
8dfe6043f8 | |
|
4a3974da3f | |
|
1b3518ca59 | |
|
e60cff554a | |
|
636b5c5dba | |
|
b3f89a33c8 | |
|
5ac66f4080 | |
|
3078268e43 | |
|
b05a325dd1 | |
|
13dc07e996 | |
|
73f67fb132 | |
|
c5eccb21ca | |
|
ce179d77c5 | |
|
3316bf7e8e | |
|
44456d095e | |
|
a8dde9aa49 | |
|
90ea8b8789 | |
|
ca154c534b | |
|
1765663353 | |
|
c59a232de5 | |
|
e20fd634fd | |
|
4866b0daf1 | |
|
d90f6920f0 | |
|
90dec30ff4 | |
|
c1a0a4666e | |
|
14d8fa8dd5 | |
|
dae16ad11e | |
|
75d185d27e | |
|
46e0b9cc05 | |
|
8e62f9f36b | |
|
7fa2d12eb3 | |
|
0011ec130a | |
|
1ac8df446d | |
|
cf142bd07c | |
|
9414c40a17 | |
|
96fe32bdb2 | |
|
fe169983cb | |
|
8354f16073 | |
|
7bc06a3295 | |
|
981943db89 | |
|
6c04e5fdf9 | |
|
2d09e35058 | |
|
8e0e8ad4a2 | |
|
4e01c0406b | |
|
dd078e9b57 | |
|
899f069343 | |
|
0a9079e213 | |
|
85644e807e | |
|
d8343edbac | |
|
813058f3d8 | |
|
64e8e33151 | |
|
3579c088ba | |
|
fdac11fde8 | |
|
5a795fc9aa | |
|
bbc2ea7516 | |
|
e1afc9a7df | |
|
1b217a6d94 | |
|
6c4fd198d1 | |
|
d5cfb1d011 | |
|
039e8c9633 | |
|
80156db07e | |
|
9c522a96f6 | |
|
a011973577 | |
|
c2b9407c14 | |
|
b71ba80518 | |
|
860eb4aa0b | |
|
27cf3e59f5 | |
|
c86ab4713f | |
|
456c70432a | |
|
59e13795e6 | |
|
2e994c848b | |
|
05c98fd49a | |
|
c5e197aa67 | |
|
d2c7a708d7 | |
|
fa00953090 | |
|
4c35aa7eeb | |
|
94aba382ec | |
|
362935e340 | |
|
09543e7d8e | |
|
6ded9d223d | |
|
ade5e4313f | |
|
eabf85d858 | |
|
955e057abc | |
|
eec736969d | |
|
9822387362 | |
|
cbb86ede32 | |
|
5ac3d7f2cd | |
|
2411661bd1 | |
|
b8c03d4772 | |
|
f46a03ccbc | |
|
60f189871a | |
|
66306aa456 | |
|
83c205745c | |
|
af8e8a8aba | |
|
8bf907b239 | |
|
420cb39bdd | |
|
844fe4b2fa | |
|
e8384b2090 | |
|
78f784265f | |
|
a2b0f9bac0 | |
|
46cee28719 | |
|
71ce863569 | |
|
ddbea27133 | |
|
04d70cd29e | |
|
ebd3050243 | |
|
5cdd031fb6 | |
|
0d856a3553 | |
|
cb6ffaf38f | |
|
62f4c687a6 | |
|
d28b92c80c | |
|
8a12d37d32 | |
|
16cc98b47d | |
|
a4adf9ff4e | |
|
3c675c5510 | |
|
21621cc49f | |
|
f7fd4ae43a | |
|
a5a06140e2 | |
|
c951c982e3 | |
|
026f82d57b | |
|
856f3a4bfb | |
|
d8b869fa92 | |
|
7298d19d4a | |
|
1012ed8546 | |
|
815f6723f5 | |
|
29025155e8 | |
|
3c5cd4ac85 | |
|
cc4d671855 | |
|
936548211c | |
|
fe51e3e48b | |
|
001cab1469 | |
|
0a76fa02d3 | |
|
86272e4849 | |
|
7fd8ffb271 | |
|
1805436d3b | |
|
ff9e19809a | |
|
ffec059d0b | |
|
519f6367f9 | |
|
13560eac2e | |
|
c6d1d15c83 | |
|
98b3febf5e | |
|
740ec9e462 | |
|
ebc61a1341 | |
|
adf2a6b7c6 | |
|
93aff0ca62 | |
|
e52c3c4096 | |
|
c783012d91 | |
|
f22a965abd | |
|
1d07f1fa95 | |
|
406ec4f7a8 | |
|
ce24bb03c2 | |
|
70378efe3c | |
|
4047985205 | |
|
eaab7e742c | |
|
1ff2ba9a3d | |
|
0009d689b5 | |
|
e409d06b9a | |
|
c6c45f3313 | |
|
93743d233a | |
|
b84d7956b5 | |
|
c2b38a6bd6 | |
|
40151be78e | |
|
1fe55ac7b5 | |
|
c802a98f58 | |
|
65388673b9 | |
|
312f7ae662 | |
|
9943f3506a | |
|
9e2ead389c | |
|
0b745968a2 | |
|
b9d9a5d9ff | |
|
0a68cb16a4 | |
|
c914fe202a | |
|
ac0bd21801 | |
|
500ee96dcb | |
|
5725254415 | |
|
a592b62686 | |
|
423e89b2c7 | |
|
7dc4d18848 | |
|
98dddab691 | |
|
48b0c14a7e | |
|
e9fe800cb4 | |
|
d19b8945ef | |
|
b0107dca67 | |
|
d3c2839ef6 | |
|
0323ecb133 | |
|
08ab5f0c0d | |
|
a6e1363b67 | |
|
c255e9f402 | |
|
e8c844afcb | |
|
fa6e2466d2 | |
|
ad7ff2a98d | |
|
3da62b0ea7 | |
|
675402ee74 | |
|
0ff987a652 | |
|
f67ed6570a | |
|
7e94c03d2f | |
|
e920cf23d1 | |
|
abd0a35614 | |
|
05b05a09b1 | |
|
2323ba65e1 | |
|
31fe817797 | |
|
15d1b8234e | |
|
5b9016c263 | |
|
aca8a26e5f | |
|
a260df0fff | |
|
4ee703f647 | |
|
93b3008fc0 | |
|
8529800ed1 | |
|
2223997a39 | |
|
00e6102793 | |
|
af4a93b574 | |
|
75864ae503 | |
|
be4a283318 | |
|
a08d9d590e | |
|
aa7174671e | |
|
00cf6cd89e | |
|
80df1fd928 | |
|
d8a8ab07a7 | |
|
b233a4cc77 | |
|
5b7445e4b8 | |
|
f13c1d52fb | |
|
eac3fab4a4 | |
|
b60562f831 | |
|
ffb8f0b493 | |
|
c1a95d273a | |
|
2762cdee40 | |
|
e5f1015b79 | |
|
716128e109 | |
|
9c9f815c4f | |
|
272a7f6e0a | |
|
30560c54d9 | |
|
62ab5fd261 | |
|
d6763e7b68 | |
|
e1f3ad97a1 | |
|
c79139fe32 | |
|
a6bf367be8 | |
|
c4a2df5b7e | |
|
38a5cbf1c6 | |
|
7b80b2b18d | |
|
277a00c9db | |
|
deae4f6687 | |
|
0427336999 | |
|
24ba2ba5e3 | |
|
836f6f63f7 | |
|
a642809846 | |
|
eb7ac62fb0 | |
|
f3825fa64b | |
|
83f04b6069 | |
|
e0909ff565 | |
|
61fee7c9d7 | |
|
277460b33b | |
|
76ab754099 | |
|
40b1a77183 | |
|
080e54fcf1 | |
|
7764e38974 | |
|
22738f3b29 | |
|
1a27b9edca | |
|
e716d44c8e | |
|
7a34330ebc | |
|
974752f3fe | |
|
d4e99e90e3 | |
|
c749b0ebdd | |
|
81402353de | |
|
bf9ab2ba21 | |
|
157aea892d | |
|
a01668c786 | |
|
a9c699bb74 | |
|
ae0393f230 | |
|
05c0d8270c | |
|
7cacdb5685 | |
|
3a360a05bb | |
|
902ade0734 | |
|
b6f64dc5ca | |
|
515c0d3cd0 | |
|
31d72a8812 | |
|
2c84c46aca | |
|
9c9cb0bcdd | |
|
1aa62aa249 | |
|
a735741c0b | |
|
97335e1c79 | |
|
f5888379f6 | |
|
a12ee1e946 | |
|
bc7c6fda60 | |
|
dd44b206a9 | |
|
f36ae6c702 | |
|
e38e2bc31b | |
|
6011f18b13 | |
|
cfd6049ff6 | |
|
f36f3fd084 | |
|
232d00d6ae | |
|
34333ef33d | |
|
7f1e6c8bec | |
|
41e783fb86 | |
|
7c6033afb6 | |
|
6860a0007f | |
|
4224c7c39d | |
|
e8f987423d | |
|
a656ccc86f | |
|
c70d0fcf90 | |
|
abb0fb30c0 | |
|
1c855e8ae1 | |
|
8187e48982 | |
|
ee81edc6a2 | |
|
1e2e0ac44f | |
|
03aab9478a | |
|
86336d9894 | |
|
475684c908 | |
|
5cff7bd0e7 | |
|
c54d4a4b1f | |
|
f6b9af6ed0 | |
|
11263242bc | |
|
e3763db6a7 | |
|
d5fec82dd8 | |
|
a65d329381 | |
|
b6f164b2a9 | |
|
964b9aa0fb | |
|
a8866644d7 | |
|
ffaad7132f | |
|
2c04b9b285 | |
|
2816ef4b53 |
|
@ -12,11 +12,20 @@ max_line_length = 80
|
|||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[test/cases/parsing/bom/bomfile.{css,js}]
|
||||
charset = utf-8-bom
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.snap]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[test/cases/parsing/bom/bomfile.{css,js}]
|
||||
charset = utf-8-bom
|
||||
|
||||
[test/configCases/asset-modules/bytes/file.text]
|
||||
insert_final_newline = false
|
||||
|
||||
[test/configCases/asset-modules/bytes/file.svg]
|
||||
insert_final_newline = false
|
||||
|
||||
[test/configCases/css/no-extra-runtime-in-js/source.text]
|
||||
insert_final_newline = false
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
* text=auto
|
||||
test/statsCases/** eol=lf
|
||||
test/hotCases/** eol=lf
|
||||
examples/* eol=lf
|
||||
bin/* eol=lf
|
||||
*.svg eol=lf
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
open_collective: webpack
|
|
@ -1,24 +0,0 @@
|
|||
<!-- Please don't delete this template or we'll close your issue -->
|
||||
<!-- Before creating an issue please make sure you are using the latest version of webpack. -->
|
||||
<!-- Also consider trying the webpack@beta version, maybe it's already fixed. -->
|
||||
|
||||
**Do you want to request a _feature_ or report a _bug_?**
|
||||
|
||||
<!-- Please ask questions on StackOverflow or the GitHub Discussions. -->
|
||||
<!-- https://github.com/webpack/webpack/discussions -->
|
||||
<!-- https://stackoverflow.com/questions/ask?tags=webpack -->
|
||||
<!-- Issues which contain questions or support requests will be closed. -->
|
||||
|
||||
**What is the current behavior?**
|
||||
|
||||
**If the current behavior is a bug, please provide the steps to reproduce.**
|
||||
|
||||
<!-- A great way to do this is to provide your configuration via a GitHub gist. -->
|
||||
<!-- Best provide a minimal reproducible repo -->
|
||||
<!-- If your issue is caused by a plugin or loader file the issue on the plugin/loader repo -->
|
||||
|
||||
**What is the expected behavior?**
|
||||
|
||||
**If this is a feature request, what is motivation or use case for changing the behavior?**
|
||||
|
||||
**Please mention other relevant information such as the browser version, Node.js version, webpack version, and Operating System.**
|
|
@ -1,36 +0,0 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
---
|
||||
|
||||
<!-- Please don't delete this template because we'll close your issue -->
|
||||
<!-- Before creating an issue please make sure you are using the latest version of webpack. -->
|
||||
|
||||
# Bug report
|
||||
|
||||
<!-- Please ask questions on StackOverflow or the GitHub Discussions. -->
|
||||
<!-- https://github.com/webpack/webpack/discussions -->
|
||||
<!-- https://stackoverflow.com/questions/ask?tags=webpack -->
|
||||
<!-- Issues which contain questions or support requests will be closed. -->
|
||||
|
||||
**What is the current behavior?**
|
||||
|
||||
**If the current behavior is a bug, please provide the steps to reproduce.**
|
||||
|
||||
<!-- A great way to do this is to provide your configuration via a GitHub repository -->
|
||||
<!-- The most helpful is a minimal reproduction with instructions on how to reproduce -->
|
||||
<!-- Repositories with too many files or large `webpack.config.js` files are not suitable -->
|
||||
<!-- Please only add small code snippets directly into this issue -->
|
||||
<!-- https://gist.github.com is a good place for longer code snippets -->
|
||||
<!-- If your issue is caused by a plugin or loader, please create an issue on the loader/plugin repository instead -->
|
||||
|
||||
**What is the expected behavior?**
|
||||
|
||||
<!-- "It should work" is not a helpful explanation -->
|
||||
<!-- Explain exactly how it should behave -->
|
||||
|
||||
**Other relevant information:**
|
||||
webpack version:
|
||||
Node.js version:
|
||||
Operating System:
|
||||
Additional tools:
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
---
|
||||
|
||||
<!-- Please don't delete this template or we'll close your issue -->
|
||||
|
||||
## Feature request
|
||||
|
||||
<!-- Issues that contain questions or support requests will be closed. -->
|
||||
<!-- Before creating an issue please make sure you are using the latest version of webpack. -->
|
||||
<!-- Check if this feature needs to be implemented in a plugin or loader instead -->
|
||||
<!-- If yes: file the issue on the plugin/loader repo -->
|
||||
<!-- Features related to the development server should be filed on this repo instead -->
|
||||
|
||||
**What is the expected behavior?**
|
||||
|
||||
**What is motivation or use case for adding/changing the behavior?**
|
||||
|
||||
**How should this be implemented in your opinion?**
|
||||
|
||||
**Are you willing to work on this yourself?**
|
||||
yes
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
name: Other
|
||||
about: Something else
|
||||
---
|
||||
|
||||
<!-- Bug reports and Feature requests must use other templates, or will be closed -->
|
||||
<!-- Please ask questions on StackOverflow or the GitHub Discussions. -->
|
||||
<!-- https://github.com/webpack/webpack/discussions -->
|
||||
<!-- https://stackoverflow.com/questions/ask?tags=webpack -->
|
||||
<!-- Issues which contain questions or support requests will be closed. -->
|
|
@ -1,22 +0,0 @@
|
|||
<!-- Thanks for submitting a pull request! Please provide enough information so that others can review your pull request. -->
|
||||
<!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? -->
|
||||
<!-- Try to link to an open issue for more information. -->
|
||||
|
||||
<!-- In addition to that please answer these questions: -->
|
||||
|
||||
**What kind of change does this PR introduce?**
|
||||
|
||||
<!-- E.g. a bugfix, feature, refactoring, build related change, etc… -->
|
||||
|
||||
**Did you add tests for your changes?**
|
||||
|
||||
<!-- Note that we won't merge your changes if you don't add tests -->
|
||||
|
||||
**Does this PR introduce a breaking change?**
|
||||
|
||||
<!-- If this PR introduces a breaking change, please describe the impact and a migration path for existing applications. -->
|
||||
|
||||
**What needs to be documented once your changes are merged?**
|
||||
|
||||
<!-- List all the information that needs to be added to the documentation after merge -->
|
||||
<!-- When your changes are merged you will be asked to contribute this to the documentation -->
|
|
@ -10,6 +10,16 @@ updates:
|
|||
labels:
|
||||
- dependencies
|
||||
versioning-strategy: widen
|
||||
groups:
|
||||
dependencies:
|
||||
patterns:
|
||||
- "*"
|
||||
exclude-patterns:
|
||||
- "eslint-scope"
|
||||
- "json-parse-even-better-errors"
|
||||
- "strip-ansi"
|
||||
- "rimraf"
|
||||
- "mime-types"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
name: Dependency Review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
|
||||
- name: Dependency Review
|
||||
uses: actions/dependency-review-action@56339e523c0409420f6c2c9a2f4292bbb3c07dd3 # v4.8.0
|
||||
with:
|
||||
allow-dependencies-licenses: |
|
||||
pkg:npm/@cspell/dict-en-common-misspellings,
|
||||
pkg:npm/flatted,
|
||||
pkg:npm/parse-imports,
|
||||
pkg:npm/prettier,
|
||||
pkg:npm/type-fest,
|
||||
pkg:npm/abbrev,
|
||||
pkg:npm/@pkgjs/parseargs,
|
||||
pkg:npm/cookie-signature
|
||||
allow-licenses: |
|
||||
0BSD,
|
||||
AFL-1.1,
|
||||
AFL-1.2,
|
||||
AFL-2.0,
|
||||
AFL-2.1,
|
||||
AFL-3.0,
|
||||
AGPL-3.0-only,
|
||||
AGPL-3.0-or-later,
|
||||
Apache-1.1,
|
||||
Apache-2.0,
|
||||
APSL-2.0,
|
||||
Artistic-2.0,
|
||||
BlueOak-1.0.0,
|
||||
BSD-2-Clause,
|
||||
BSD-3-Clause-Clear,
|
||||
BSD-3-Clause,
|
||||
BSL-1.0,
|
||||
CAL-1.0,
|
||||
CC-BY-3.0,
|
||||
CC-BY-4.0,
|
||||
CC-BY-SA-4.0,
|
||||
CDDL-1.0,
|
||||
CC0-1.0,
|
||||
EPL-2.0,
|
||||
GPL-2.0-only,
|
||||
GPL-2.0-or-later,
|
||||
GPL-2.0,
|
||||
GPL-3.0-or-later,
|
||||
ISC,
|
||||
LGPL-2.0-only,
|
||||
LGPL-2.1-only,
|
||||
LGPL-2.1-or-later,
|
||||
LGPL-2.1,
|
||||
LGPL-3.0-only,
|
||||
LGPL-3.0,
|
||||
MIT,
|
||||
MPL-2.0,
|
||||
OFL-1.1,
|
||||
PSF-2.0,
|
||||
Python-2.0,
|
||||
Python-2.0.1,
|
||||
Unicode-DFS-2016,
|
||||
Unlicense
|
|
@ -0,0 +1,48 @@
|
|||
name: Update examples
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * 0"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
examples:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: yarn
|
||||
|
||||
- run: yarn --frozen-lockfile
|
||||
|
||||
- run: yarn link --frozen-lockfile || true
|
||||
|
||||
- run: yarn link webpack --frozen-lockfile
|
||||
|
||||
- run: yarn build:examples
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
token: ${{ secrets.PAT }}
|
||||
delete-branch: true
|
||||
commit-message: |
|
||||
docs: update examples
|
||||
title: |
|
||||
docs: update examples
|
||||
body: |
|
||||
Update examples.
|
||||
|
||||
This PR was autogenerated.
|
||||
branch: update-examples
|
|
@ -1,14 +1,11 @@
|
|||
name: Test
|
||||
name: Github Actions
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev-1
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- dev-1
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
@ -17,90 +14,158 @@ jobs:
|
|||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: "yarn"
|
||||
cache: yarn
|
||||
|
||||
- run: yarn --frozen-lockfile
|
||||
|
||||
- name: Cache prettier result
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: ./node_modules/.cache/prettier/.prettier-cache
|
||||
key: lint-prettier-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/.prettierrc.js') }}
|
||||
restore-keys: lint-prettier-
|
||||
|
||||
- name: Cache eslint result
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: .eslintcache
|
||||
key: lint-eslint-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/eslint.config.js') }}
|
||||
key: lint-eslint-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/eslint.config.mjs') }}
|
||||
restore-keys: lint-eslint-
|
||||
|
||||
- name: Cache cspell result
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: .cspellcache
|
||||
key: lint-cspell-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/cspell.json') }}
|
||||
restore-keys: lint-cspell-
|
||||
|
||||
- run: yarn lint
|
||||
basic:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: "yarn"
|
||||
- run: yarn --frozen-lockfile
|
||||
- run: yarn link --frozen-lockfile || true
|
||||
- run: yarn link webpack --frozen-lockfile
|
||||
- run: yarn test:basic --ci
|
||||
- uses: codecov/codecov-action@v4
|
||||
with:
|
||||
flags: basic
|
||||
functionalities: gcov
|
||||
|
||||
- name: Validate types using old typescript version
|
||||
run: |
|
||||
yarn upgrade typescript@5.0 @types/node@20
|
||||
yarn --frozen-lockfile
|
||||
yarn validate:types
|
||||
|
||||
validate-legacy-node:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
|
||||
- name: Use Node.js 10.x
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: 10.x
|
||||
cache: "yarn"
|
||||
cache: yarn
|
||||
|
||||
# Remove `devDependencies` from `package.json` to avoid `yarn install` compatibility error
|
||||
- run: node -e "const content = require('./package.json');delete content.devDependencies;require('fs').writeFileSync('package.json', JSON.stringify(content, null, 2));"
|
||||
|
||||
- run: yarn install --production --frozen-lockfile
|
||||
|
||||
benchmark:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
shard: [1/4, 2/4, 3/4, 4/4]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
fetch-tags: true
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: yarn
|
||||
|
||||
- run: yarn --frozen-lockfile
|
||||
|
||||
- run: yarn link --frozen-lockfile || true
|
||||
|
||||
- run: yarn link webpack --frozen-lockfile
|
||||
|
||||
- name: Run benchmarks
|
||||
uses: CodSpeedHQ/action@6b43a0cd438f6ca5ad26f9ed03ed159ed2df7da9 # v4.1.1
|
||||
with:
|
||||
run: yarn benchmark --ci
|
||||
mode: "instrumentation"
|
||||
token: ${{ secrets.CODSPEED_TOKEN }}
|
||||
env:
|
||||
LAST_COMMIT: 1
|
||||
NEGATIVE_FILTER: on-schedule
|
||||
SHARD: ${{ matrix.shard }}
|
||||
|
||||
basic:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: yarn
|
||||
|
||||
- run: yarn --frozen-lockfile
|
||||
|
||||
- run: yarn link --frozen-lockfile || true
|
||||
|
||||
- run: yarn link webpack --frozen-lockfile
|
||||
|
||||
- run: yarn test:basic --ci
|
||||
|
||||
unit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: "yarn"
|
||||
cache: yarn
|
||||
|
||||
- run: yarn --frozen-lockfile
|
||||
|
||||
- run: yarn link --frozen-lockfile || true
|
||||
|
||||
- run: yarn link webpack --frozen-lockfile
|
||||
- uses: actions/cache@v4
|
||||
|
||||
- name: Cache jest result
|
||||
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: .jest-cache
|
||||
key: jest-unit-${{ env.GITHUB_SHA }}
|
||||
restore-keys: jest-unit-${{ hashFiles('**/yarn.lock', '**/jest.config.js') }}
|
||||
|
||||
- run: yarn cover:unit --ci --cacheDirectory .jest-cache
|
||||
- uses: codecov/codecov-action@v4
|
||||
|
||||
- name: Codecov
|
||||
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
|
||||
with:
|
||||
flags: unit
|
||||
functionalities: gcov
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
integration:
|
||||
needs: basic
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
node-version: [10.x, 20.x]
|
||||
node-version: [10.x, 20.x, 22.x, 24.x]
|
||||
part: [a, b]
|
||||
include:
|
||||
# Test with main branches of webpack dependencies
|
||||
|
@ -112,21 +177,10 @@ jobs:
|
|||
node-version: lts/*
|
||||
part: b
|
||||
use_main_branches: 1
|
||||
# Test on the latest version of Node.js
|
||||
- os: ubuntu-latest
|
||||
node-version: 22.x
|
||||
part: a
|
||||
- os: ubuntu-latest
|
||||
node-version: 22.x
|
||||
part: b
|
||||
# Test on the old LTS version of Node.js
|
||||
- os: ubuntu-latest
|
||||
node-version: 18.x
|
||||
part: a
|
||||
- os: ubuntu-latest
|
||||
node-version: 18.x
|
||||
part: b
|
||||
# Test on old Node.js versions
|
||||
- os: ubuntu-latest
|
||||
node-version: 18.x
|
||||
part: a
|
||||
- os: ubuntu-latest
|
||||
node-version: 16.x
|
||||
part: a
|
||||
|
@ -138,8 +192,9 @@ jobs:
|
|||
part: a
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/github-script@v7
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
|
||||
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
id: calculate_architecture
|
||||
with:
|
||||
result-encoding: string
|
||||
|
@ -149,37 +204,56 @@ jobs:
|
|||
} else {
|
||||
return ''
|
||||
}
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
architecture: ${{ steps.calculate_architecture.outputs.result }}
|
||||
cache: "yarn"
|
||||
cache: yarn
|
||||
|
||||
# Install old `jest` version and deps for legacy node versions
|
||||
- run: |
|
||||
yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 cspell@^6.31.1 open-cli@^7.2.0 --ignore-engines
|
||||
yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 cspell@^6.31.1 open-cli@^7.2.0 coffee-loader@^1.0.0 babel-loader@^8.1.0 style-loader@^2.0.0 css-loader@^5.0.1 less-loader@^8.1.1 mini-css-extract-plugin@^1.6.1 nyc@^15.1.0 memfs@4.14.0 --ignore-engines
|
||||
yarn --frozen-lockfile --ignore-engines
|
||||
if: matrix.node-version == '10.x' || matrix.node-version == '12.x' || matrix.node-version == '14.x'
|
||||
|
||||
- run: |
|
||||
yarn upgrade husky@^8.0.3 lint-staged@^13.2.1 nyc@^15.1.0 --ignore-engines
|
||||
yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 nyc@^15.1.0 coffee-loader@1.0.0 babel-loader@^8.1.0 style-loader@^2.0.0 css-loader@^5.0.1 less-loader@^8.1.1 mini-css-extract-plugin@^1.6.1 --ignore-engines
|
||||
yarn --frozen-lockfile
|
||||
if: matrix.node-version == '16.x'
|
||||
|
||||
- run: |
|
||||
yarn upgrade cspell@^8.8.4 lint-staged@^15.2.5 --ignore-engines
|
||||
yarn --frozen-lockfile
|
||||
if: matrix.node-version == '18.x'
|
||||
|
||||
# Install main version of our deps
|
||||
- run: yarn upgrade enhanced-resolve@webpack/enhanced-resolve#main loader-runner@webpack/loader-runner#main webpack-sources@webpack/webpack-sources#main watchpack@webpack/watchpack#main tapable@webpack/tapable#master
|
||||
- run: yarn upgrade enhanced-resolve@webpack/enhanced-resolve#main loader-runner@webpack/loader-runner#main webpack-sources@webpack/webpack-sources#main watchpack@webpack/watchpack#main tapable@webpack/tapable#main
|
||||
if: matrix.use_main_branches == '1'
|
||||
|
||||
# Install dependencies for LTS node versions
|
||||
- run: yarn --frozen-lockfile
|
||||
if: matrix.node-version != '10.x' && matrix.node-version != '12.x' && matrix.node-version != '14.x' && matrix.node-version != '16.x'
|
||||
|
||||
- run: yarn link --frozen-lockfile || true
|
||||
|
||||
- run: yarn link webpack --frozen-lockfile
|
||||
- uses: actions/cache@v4
|
||||
|
||||
- name: Cache jest result
|
||||
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: .jest-cache
|
||||
key: jest-integration-${{ env.GITHUB_SHA }}
|
||||
restore-keys: jest-integration-${{ hashFiles('**/yarn.lock', '**/jest.config.js') }}
|
||||
|
||||
- run: yarn cover:integration:${{ matrix.part }} --ci --cacheDirectory .jest-cache || yarn cover:integration:${{ matrix.part }} --ci --cacheDirectory .jest-cache -f
|
||||
|
||||
- run: yarn cover:merge
|
||||
- uses: codecov/codecov-action@v4
|
||||
|
||||
- name: Codecov
|
||||
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
|
||||
with:
|
||||
flags: integration
|
||||
functionalities: gcov
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
|
|
@ -4,10 +4,11 @@
|
|||
/test/fixtures/temp-*
|
||||
/test/temp
|
||||
/test/ChangesAndRemovals
|
||||
/test/ChangesAndRemovalsTemp
|
||||
/test/**/dev-defaults.webpack.lock
|
||||
/benchmark/js
|
||||
/benchmark/fixtures
|
||||
/test/**/generated/**
|
||||
/examples/**/dist
|
||||
/examples/nodejs-addons/build/**
|
||||
/assembly/**/*.wat
|
||||
/assembly/**/*.wasm
|
||||
/coverage
|
||||
|
|
|
@ -3,14 +3,22 @@ package.json
|
|||
# Ignore some test files
|
||||
test/**/*.*
|
||||
!test/*.js
|
||||
!test/*.cjs
|
||||
!test/*.mjs
|
||||
!test/**/webpack.config.js
|
||||
!test/**/webpack.config.cjs
|
||||
!test/**/webpack.config.mjs
|
||||
!test/**/test.config.js
|
||||
!test/**/test.filter.js
|
||||
!test/**/errors.js
|
||||
!test/**/warnings.js
|
||||
!test/**/deprecations.js
|
||||
!test/**/infrastructure-log.js
|
||||
!test/*.md
|
||||
!test/helpers/*.*
|
||||
!test/runner/**/*.*
|
||||
!test/benchmarkCases/**/*.mjs
|
||||
test/js/**/*.*
|
||||
|
||||
# Ignore some folders
|
||||
benchmark/
|
||||
|
@ -18,10 +26,9 @@ coverage/
|
|||
|
||||
# Ignore generated files
|
||||
*.check.js
|
||||
|
||||
# Ignore not supported files
|
||||
*.d.ts
|
||||
!module.d.ts
|
||||
*.check.d.ts
|
||||
types.d.ts
|
||||
declarations/WebpackOptions.d.ts
|
||||
|
||||
# Ignore precompiled schemas
|
||||
schemas/**/*.check.js
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
printWidth: 80,
|
||||
useTabs: true,
|
||||
tabWidth: 2,
|
||||
trailingComma: "none",
|
||||
arrowParens: "avoid",
|
||||
arrowParens: "always",
|
||||
overrides: [
|
||||
{
|
||||
files: "*.json",
|
||||
|
@ -13,7 +15,7 @@ module.exports = {
|
|||
}
|
||||
},
|
||||
{
|
||||
files: "*.ts",
|
||||
files: "*.{cts,mts,ts}",
|
||||
options: {
|
||||
parser: "typescript"
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
[Code of Conduct](https://github.com/openjs-foundation/code-and-learn/blob/master/CODE_OF_CONDUCT.md)
|
|
@ -15,12 +15,14 @@ that include your webpack.config.js, relevant files, and the full error message
|
|||
|
||||
**If you have discovered a bug or have a feature suggestion, please [create an issue on GitHub](https://github.com/webpack/webpack/issues/new).**
|
||||
|
||||
Do you want to fix an issue? Look at the issues with a tag of [X5: work required (PR / Help Wanted)](https://github.com/webpack/webpack/labels/X5%3A%20work%20required%20%28PR%20%2F%20Help%20Wanted%29). Each issue should be tagged with a difficulty tag -
|
||||
Do you want to fix an issue? Look at the issues with a tag of [X5: work required (PR / Help Wanted)](https://github.com/webpack/webpack/labels/X5%3A%20work%20required%20%28PR%20%2F%20Help%20Wanted%29). Here are some of the key labels you may encounter:
|
||||
|
||||
- D0: My First Commit (Contribution Difficulty)
|
||||
- D1: Easy (Contribution Difficulty)
|
||||
- D2: Medium (Contribution Difficulty)
|
||||
- D3: Hard (Contribution Difficulty)
|
||||
- **bug**: An unexpected problem or unintended behavior.
|
||||
- **enhancement**: A suggestion for a new feature or improvement.
|
||||
- **question**: Requests for clarification or more information.
|
||||
- **documentation**: Issues related to improving or adding documentation.
|
||||
|
||||
> **Note:** Previous references to labels such as `D0: My First Commit`, `D1: Easy`, `D2: Medium`, and `D3: Hard` have been removed as these are not currently in use. If you would like to see difficulty labels added, please open a suggestion or discuss with maintainers.
|
||||
|
||||
## Contributing to the webpack ecosystem
|
||||
|
||||
|
@ -47,6 +49,7 @@ Something that will increase the chance that your pull request is accepted:
|
|||
- For a major fix/feature make sure your PR has an issue and if it doesn't, please create one. This would help discussion with the community, and polishing ideas in case of a new feature.
|
||||
- Make sure your PR's description contains GitHub's special keyword references that automatically close the related issue when the PR is merged. ([More info](https://github.com/blog/1506-closing-issues-via-pull-requests))
|
||||
- When you have a lot of commits in your PR, it's good practice to squash all your commits in one single commit. ([Learn how to squash here](https://davidwalsh.name/squash-commits-git))
|
||||
- For a better understanding of the folder structure and testing procedures, refer to the [Testing Documentation](./TESTING_DOCS.md).
|
||||
|
||||
## Documentation
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# webpack Project Governance
|
||||
|
||||
The webpack project (and organization) follows the webpack's governance model defined within [the webpack governance repository](https://github.com/webpack/governance/blob/main/README.md).
|
762
README.md
|
@ -8,39 +8,20 @@
|
|||
[![npm][npm]][npm-url]
|
||||
|
||||
[![node][node]][node-url]
|
||||
[![builds2][builds2]][builds2-url]
|
||||
[![builds1][builds1]][builds1-url]
|
||||
[![dependency-review][dependency-review]][dependency-review-url]
|
||||
[![coverage][cover]][cover-url]
|
||||
[![licenses][licenses]][licenses-url]
|
||||
[![PR's welcome][prs]][prs-url]
|
||||
[](https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates#about-compatibility-scores)
|
||||
[](https://npmcharts.com/compare/webpack?minimal=true)
|
||||
[](https://packagephobia.com/result?p=webpack)
|
||||
[](https://opencollective.com/webpack#backer)
|
||||
[](https://opencollective.com/webpack#sponsors)
|
||||
[](https://github.com/webpack/webpack/graphs/contributors)
|
||||
[](https://github.com/webpack/webpack/discussions)
|
||||
[](https://discord.gg/5sxFZPdx2k)
|
||||
[](https://insights.linuxfoundation.org/project/webpack)
|
||||
|
||||
<br>
|
||||
<a href="https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates#about-compatibility-scores">
|
||||
<img src="https://api.dependabot.com/badges/compatibility_score?dependency-name=webpack&package-manager=npm_and_yarn&previous-version=5.72.1&new-version=5.73.0">
|
||||
</a>
|
||||
<a href="https://npmcharts.com/compare/webpack?minimal=true">
|
||||
<img src="https://img.shields.io/npm/dm/webpack.svg">
|
||||
</a>
|
||||
<a href="https://packagephobia.com/result?p=webpack">
|
||||
<img src="https://packagephobia.com/badge?p=webpack" alt="install size">
|
||||
</a>
|
||||
<a href="https://opencollective.com/webpack#backer">
|
||||
<img src="https://opencollective.com/webpack/backers/badge.svg">
|
||||
</a>
|
||||
<a href="https://opencollective.com/webpack#sponsors">
|
||||
<img src="https://opencollective.com/webpack/sponsors/badge.svg">
|
||||
</a>
|
||||
<a href="https://github.com/webpack/webpack/graphs/contributors">
|
||||
<img src="https://img.shields.io/github/contributors/webpack/webpack.svg">
|
||||
</a>
|
||||
<a href="https://github.com/webpack/webpack/discussions">
|
||||
<img src="https://img.shields.io/github/discussions/webpack/webpack">
|
||||
</a>
|
||||
<a href="https://twitter.com/Webpack">
|
||||
<img src="https://img.shields.io/twitter/follow/Webpack?style=social">
|
||||
</a>
|
||||
<a href="https://discord.gg/Tt5cKVwx">
|
||||
<img src="https://img.shields.io/discord/1180618526436888586?label=discord&logo=discord&logoColor=white&style=flat">
|
||||
</a>
|
||||
<h1>webpack</h1>
|
||||
<p>
|
||||
Webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.
|
||||
|
@ -49,22 +30,23 @@
|
|||
|
||||
## Table of Contents
|
||||
|
||||
1. [Install](#install)
|
||||
2. [Introduction](#introduction)
|
||||
3. [Concepts](#concepts)
|
||||
4. [Contributing](#contributing)
|
||||
5. [Support](#support)
|
||||
6. [Core Team](#core-team)
|
||||
7. [Sponsoring](#sponsoring)
|
||||
8. [Premium Partners](#premium-partners)
|
||||
9. [Other Backers and Sponsors](#other-backers-and-sponsors)
|
||||
10. [Gold Sponsors](#gold-sponsors)
|
||||
11. [Silver Sponsors](#silver-sponsors)
|
||||
12. [Bronze Sponsors](#bronze-sponsors)
|
||||
13. [Backers](#backers)
|
||||
14. [Special Thanks](#special-thanks-to)
|
||||
- [Install](#install)
|
||||
- [Introduction](#introduction)
|
||||
- [Concepts](#concepts)
|
||||
- [Contributing](#contributing)
|
||||
- [Support](#support)
|
||||
- [Current project members](#current-project-members)
|
||||
- [TSC (Technical Steering Committee)](#tsc-technical-steering-committee)
|
||||
- [Core Collaborators](#core-collaborators)
|
||||
- [Sponsoring](#sponsoring)
|
||||
- [Premium Partners](#premium-partners)
|
||||
- [Gold Sponsors](#gold-sponsors)
|
||||
- [Silver Sponsors](#silver-sponsors)
|
||||
- [Bronze Sponsors](#bronze-sponsors)
|
||||
- [Backers](#backers)
|
||||
- [Special Thanks](#special-thanks-to)
|
||||
|
||||
<h2 align="center">Install</h2>
|
||||
## Install
|
||||
|
||||
Install with npm:
|
||||
|
||||
|
@ -78,7 +60,7 @@ Install with yarn:
|
|||
yarn add webpack --dev
|
||||
```
|
||||
|
||||
<h2 align="center">Introduction</h2>
|
||||
## Introduction
|
||||
|
||||
Webpack is a bundler for modules. The main purpose is to bundle JavaScript
|
||||
files for usage in a browser, yet it is also capable of transforming, bundling,
|
||||
|
@ -92,6 +74,11 @@ or packaging just about any resource or asset.
|
|||
- Loaders can preprocess files while compiling, e.g. TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc.
|
||||
- Highly modular plugin system to do whatever else your application requires.
|
||||
|
||||
#### Learn about webpack through videos!
|
||||
|
||||
- [Understanding Webpack - Video 1](https://www.youtube.com/watch?v=xj93pvQIsRo)
|
||||
- [Understanding Webpack - Video 2](https://www.youtube.com/watch?v=4tQiJaFzuJ8)
|
||||
|
||||
### Get Started
|
||||
|
||||
Check out webpack's quick [**Get Started**](https://webpack.js.org/guides/getting-started) guide and the [other guides](https://webpack.js.org/guides/).
|
||||
|
@ -101,7 +88,7 @@ Check out webpack's quick [**Get Started**](https://webpack.js.org/guides/gettin
|
|||
Webpack supports all browsers that are [ES5-compliant](https://kangax.github.io/compat-table/es5/) (IE8 and below are not supported).
|
||||
Webpack also needs `Promise` for `import()` and `require.ensure()`. If you want to support older browsers, you will need to [load a polyfill](https://webpack.js.org/guides/shimming/) before using these expressions.
|
||||
|
||||
<h2 align="center">Concepts</h2>
|
||||
## Concepts
|
||||
|
||||
### [Plugins](https://webpack.js.org/plugins/)
|
||||
|
||||
|
@ -114,6 +101,7 @@ within webpack itself use this plugin interface. This makes webpack very
|
|||
| :---------------------------------------: | :----------------: | :-----------------: | :-------------------------------------------------------------------------------------- |
|
||||
| [mini-css-extract-plugin][mini-css] | ![mini-css-npm] | ![mini-css-size] | Extracts CSS into separate files. It creates a CSS file per JS file which contains CSS. |
|
||||
| [compression-webpack-plugin][compression] | ![compression-npm] | ![compression-size] | Prepares compressed versions of assets to serve them with Content-Encoding |
|
||||
| [html-bundler-webpack-plugin][bundler] | ![bundler-npm] | ![bundler-size] | Renders a template (EJS, Handlebars, Pug) with referenced source asset files into HTML. |
|
||||
| [html-webpack-plugin][html-plugin] | ![html-plugin-npm] | ![html-plugin-size] | Simplifies creation of HTML files (`index.html`) to serve your bundles |
|
||||
| [pug-plugin][pug-plugin] | ![pug-plugin-npm] | ![pug-plugin-size] | Renders Pug files to HTML, extracts JS and CSS from sources specified directly in Pug. |
|
||||
|
||||
|
@ -127,6 +115,9 @@ within webpack itself use this plugin interface. This makes webpack very
|
|||
[compression]: https://github.com/webpack-contrib/compression-webpack-plugin
|
||||
[compression-npm]: https://img.shields.io/npm/v/compression-webpack-plugin.svg
|
||||
[compression-size]: https://packagephobia.com/badge?p=compression-webpack-plugin
|
||||
[bundler]: https://github.com/webdiscus/html-bundler-webpack-plugin
|
||||
[bundler-npm]: https://img.shields.io/npm/v/html-bundler-webpack-plugin.svg
|
||||
[bundler-size]: https://packagephobia.com/badge?p=html-bundler-webpack-plugin
|
||||
[html-plugin]: https://github.com/jantimon/html-webpack-plugin
|
||||
[html-plugin-npm]: https://img.shields.io/npm/v/html-webpack-plugin.svg
|
||||
[html-plugin-size]: https://packagephobia.com/badge?p=html-webpack-plugin
|
||||
|
@ -143,16 +134,6 @@ loaders](https://webpack.js.org/api/loaders/) using Node.js.
|
|||
Loaders are activated by using `loadername!` prefixes in `require()` statements,
|
||||
or are automatically applied via regex from your webpack configuration.
|
||||
|
||||
#### Files
|
||||
|
||||
| Name | Status | Install Size | Description |
|
||||
| :---------------: | :--------: | :----------: | :------------------------------------------------------- |
|
||||
| [val-loader][val] | ![val-npm] | ![val-size] | Executes code as module and considers exports as JS code |
|
||||
|
||||
[val]: https://github.com/webpack-contrib/val-loader
|
||||
[val-npm]: https://img.shields.io/npm/v/val-loader.svg
|
||||
[val-size]: https://packagephobia.com/badge?p=val-loader
|
||||
|
||||
#### JSON
|
||||
|
||||
| Name | Status | Install Size | Description |
|
||||
|
@ -272,7 +253,19 @@ you full control of what is loaded initially and what is loaded at runtime
|
|||
through code splitting. It can also make your code chunks **cache
|
||||
friendly** by using hashes.
|
||||
|
||||
<h2 align="center">Contributing</h2>
|
||||
### Developer Tools
|
||||
|
||||
If you're working on webpack itself, or building advanced plugins or integrations, the tools below can help you explore internal mechanics, debug plugin life-cycles, and build custom tooling.
|
||||
|
||||
#### Instrumentation
|
||||
|
||||
| Name | Status | Description |
|
||||
| --------------------------------------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [tapable-tracer](https://github.com/ertgl/tapable-tracer) | ![tapable-tracer-npm] | Traces tapable hook execution in real-time and collects structured stack frames. Can export to UML for generating visualizations. |
|
||||
|
||||
[tapable-tracer-npm]: https://img.shields.io/npm/v/tapable-tracer.svg
|
||||
|
||||
## Contributing
|
||||
|
||||
**We want contributing to webpack to be fun, enjoyable, and educational for anyone, and everyone.** We have a [vibrant ecosystem](https://medium.com/webpack/contributors-guide/home) that spans beyond this single repo. We welcome you to check out any of the repositories in [our organization](https://github.com/webpack) or [webpack-contrib organization](https://github.com/webpack-contrib) which houses all of our loaders and plugins.
|
||||
|
||||
|
@ -287,86 +280,44 @@ Contributions go far beyond pull requests and commits. Although we love giving y
|
|||
- Teaching others how to contribute to one of the many webpack's repos!
|
||||
- [Blogging, speaking about, or creating tutorials](https://github.com/webpack-contrib/awesome-webpack) about one of webpack's many features.
|
||||
- Helping others in our webpack [gitter channel](https://gitter.im/webpack/webpack).
|
||||
- [The Contributor's Guide to webpack](https://medium.com/webpack/contributors-guide/home)
|
||||
|
||||
To get started have a look at our [documentation on contributing](https://github.com/webpack/webpack/blob/main/CONTRIBUTING.md).
|
||||
|
||||
If you are worried or don't know where to start, you can **always** reach out to [Sean Larkin (@TheLarkInn) on Twitter](https://twitter.com/thelarkinn) or simply submit an issue and a maintainer can help give you guidance!
|
||||
|
||||
We have also started a series on our [Medium Publication](https://medium.com/webpack) called [The Contributor's Guide to webpack](https://medium.com/webpack/contributors-guide/home). We welcome you to read it and post any questions or responses if you still need help.
|
||||
|
||||
_Looking to speak about webpack?_ We'd **love** to review your talk abstract/CFP! You can email it to webpack [at] opencollective [dot] com and we can give pointers or tips!!!
|
||||
|
||||
<h3 align="center">Creating your own plugins and loaders</h3>
|
||||
### Creating your own plugins and loaders
|
||||
|
||||
If you create a loader or plugin, we would <3 for you to open source it, and put it on npm. We follow the `x-loader`, `x-webpack-plugin` naming convention.
|
||||
|
||||
<h2 align="center">Support</h2>
|
||||
## Support
|
||||
|
||||
We consider webpack to be a low-level tool used not only individually but also layered beneath other awesome tools. Because of its flexibility, webpack isn't always the _easiest_ entry-level solution, however we do believe it is the most powerful. That said, we're always looking for ways to improve and simplify the tool without compromising functionality. If you have any ideas on ways to accomplish this, we're all ears!
|
||||
|
||||
If you're just getting started, take a look at [our new docs and concepts page](https://webpack.js.org/concepts/). This has a high level overview that is great for beginners!!
|
||||
|
||||
Looking for webpack 1 docs? Please check out the old [wiki](https://github.com/webpack/docs/wiki/contents), but note that this deprecated version is no longer supported.
|
||||
|
||||
If you want to discuss something or just need help, [here is our Gitter room](https://gitter.im/webpack/webpack) where there are always individuals looking to help out!
|
||||
|
||||
If you are still having difficulty, we would love for you to post
|
||||
a question to [StackOverflow with the webpack tag](https://stackoverflow.com/tags/webpack). It is much easier to answer questions that include your webpack.config.js and relevant files! So if you can provide them, we'd be extremely grateful (and more likely to help you find the answer!)
|
||||
|
||||
If you are twitter savvy you can tweet #webpack with your question and someone should be able to reach out and help also.
|
||||
|
||||
If you have discovered a 🐜 or have a feature suggestion, feel free to create an issue on GitHub.
|
||||
|
||||
### License
|
||||
## Current project members
|
||||
|
||||
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack?ref=badge_large)
|
||||
For information about the governance of the webpack project, see [GOVERNANCE.md](./GOVERNANCE.md).
|
||||
|
||||
<h2 align="center">Core Team</h2>
|
||||
### TSC (Technical Steering Committee)
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<img width="150" height="150" src="https://github.com/sokra.png?s=150">
|
||||
<br>
|
||||
<a href="https://github.com/sokra">Tobias Koppers</a>
|
||||
<p>Core</p>
|
||||
<br>
|
||||
<p>Founder of webpack</p>
|
||||
</td>
|
||||
<td align="center" valign="top">
|
||||
<img width="150" height="150" src="https://github.com/jhnns.png?s=150">
|
||||
<br>
|
||||
<a href="https://github.com/jhnns">Johannes Ewald</a>
|
||||
<p>Loaders & Plugins</p>
|
||||
<br>
|
||||
<p>Early adopter of webpack</p>
|
||||
</td>
|
||||
<td align="center" width="20%" valign="top">
|
||||
<img width="150" height="150" src="https://github.com/TheLarkInn.png?s=150">
|
||||
<br>
|
||||
<a href="https://github.com/TheLarkInn">Sean T. Larkin</a>
|
||||
<p>Public Relations</p>
|
||||
<br>
|
||||
<p>Founder of the core team</p>
|
||||
</td>
|
||||
<td align="center" valign="top">
|
||||
<img width="150" height="150" src="https://github.com/spacek33z.png?s=150">
|
||||
<br>
|
||||
<a href="https://github.com/spacek33z">Kees Kluskens</a>
|
||||
<p>Development</p>
|
||||
<br>
|
||||
<p>Sponsor</p>
|
||||
<a href="https://codeyellow.nl/">
|
||||
<img height="15px" src="https://cloud.githubusercontent.com/assets/1365881/20286583/ad62eb04-aac7-11e6-9c14-a0fef35b9b56.png">
|
||||
</a>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
- [alexander-akait](https://github.com/alexander-akait) -
|
||||
**Alexander Akait** <<sheo13666q@gmail.com>> (he/him)
|
||||
- [evenstensberg](https://github.com/evenstensberg) -
|
||||
**Even Stensberg** <<evenstensberg@gmail.com>> (he/him)
|
||||
- [ovflowd](https://github.com/ovflowd) -
|
||||
**Claudio Wunder** <<cwunder@gnome.org>> (he/they)
|
||||
- [snitin315](https://github.com/snitin315) -
|
||||
**Nitin Kumar** <<snitin315@gmail.com>> (he/him)
|
||||
- [thelarkinn](https://github.com/thelarkinn) -
|
||||
**Sean Larkin** <<selarkin@microsoft.com>> (he/him)
|
||||
|
||||
<h2 align="center">Sponsoring</h2>
|
||||
### Maintenance
|
||||
|
||||
This webpack repository is maintained by the [`Core Working Group`](./WORKING_GROUP.md).
|
||||
|
||||
## Sponsoring
|
||||
|
||||
Most of the core team members, webpack contributors and contributors in the ecosystem do this open source work in their free time. If you use webpack for a serious task, and you'd like us to invest more time on it, please donate. This project increases your income/productivity too. It makes development and applications faster and it reduces the required bandwidth.
|
||||
|
||||
|
@ -379,7 +330,7 @@ This is how we use the donations:
|
|||
- Infrastructure cost
|
||||
- Fees for money handling
|
||||
|
||||
<h2 align="center">Premium Partners</h2>
|
||||
### Premium Partners
|
||||
|
||||
<div align="center">
|
||||
|
||||
|
@ -388,327 +339,326 @@ This is how we use the donations:
|
|||
|
||||
</div>
|
||||
|
||||
<h2 align="center">Other Backers and Sponsors</h2>
|
||||
### Other Backers and Sponsors
|
||||
|
||||
Before we started using OpenCollective, donations were made anonymously. Now that we have made the switch, we would like to acknowledge these sponsors (and the ones who continue to donate using OpenCollective). If we've missed someone, please send us a PR, and we'll add you to this list.
|
||||
|
||||
<div align="center">
|
||||
|
||||
<a href="https://angular.io/" target="_blank" title="JS framework"><img
|
||||
src="https://cdn.worldvectorlogo.com/logos/angular-icon-1.svg" height="30" alt="Angular"></a>
|
||||
<a href="https://moonmail.io" target="_blank" title="Email Marketing Software"><img
|
||||
src="https://static.moonmail.io/moonmail-logo.svg" height="30" alt="MoonMail"></a>
|
||||
<a href="https://monei.net" target="_blank" title="Best payment gateway rates"><img
|
||||
src="https://static.monei.net/monei-logo.svg" height="30" alt="MONEI"></a>
|
||||
<a href="https://angular.io/" target="_blank" title="JS framework">Angular</a>
|
||||
<a href="https://moonmail.io" target="_blank" title="Email Marketing Software">MoonMail</a>
|
||||
<a href="https://monei.net" target="_blank" title="Best payment gateway rates">MONEI</a>
|
||||
|
||||
</div>
|
||||
|
||||
<h2 align="center">Gold Sponsors</h2>
|
||||
### Gold Sponsors
|
||||
|
||||
[Become a gold sponsor](https://opencollective.com/webpack#sponsor) and get your logo on our README on GitHub with a link to your site.
|
||||
|
||||
<div align="center">
|
||||
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/7/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/8/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/9/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/10/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/11/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/12/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/13/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/14/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/15/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/16/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/17/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/18/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/19/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/20/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/21/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/22/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/23/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/24/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/25/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/26/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/27/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/28/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/29/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/goldsponsor/29/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/0/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/1/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/2/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/3/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/4/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/5/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/6/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/7/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/8/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/9/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/10/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/11/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/12/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/13/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/14/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/15/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/16/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/17/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/18/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/19/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/20/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/21/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/22/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/23/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/24/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/25/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/26/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/27/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/28/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/goldsponsor/29/website?requireActive=false" target="_blank"><img width="150" src="https://opencollective.com/webpack/goldsponsor/29/avatar.svg?requireActive=false"></a>
|
||||
|
||||
</div>
|
||||
|
||||
<h2 align="center">Silver Sponsors</h2>
|
||||
### Silver Sponsors
|
||||
|
||||
[Become a silver sponsor](https://opencollective.com/webpack#sponsor) and get your logo on our README on GitHub with a link to your site.
|
||||
|
||||
<div align="center">
|
||||
|
||||
<a href="https://opencollective.com/webpack/silversponsor/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/7/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/8/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/9/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/10/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/11/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/12/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/13/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/14/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/15/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/16/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/17/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/18/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/19/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/20/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/21/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/22/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/23/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/24/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/25/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/26/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/27/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/28/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/29/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/silversponsor/29/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/0/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/1/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/2/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/3/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/4/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/5/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/6/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/7/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/8/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/9/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/10/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/11/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/12/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/13/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/14/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/15/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/16/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/17/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/18/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/19/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/20/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/21/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/22/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/23/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/24/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/25/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/26/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/27/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/28/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/silversponsor/29/website?requireActive=false" target="_blank"><img width="120" src="https://opencollective.com/webpack/silversponsor/29/avatar.svg?requireActive=false"></a>
|
||||
|
||||
</div>
|
||||
|
||||
<h2 align="center">Bronze Sponsors</h2>
|
||||
### Bronze Sponsors
|
||||
|
||||
[Become a bronze sponsor](https://opencollective.com/webpack#sponsor) and get your logo on our README on GitHub with a link to your site.
|
||||
|
||||
<div align="center">
|
||||
|
||||
<a href="https://opencollective.com/webpack/sponsor/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/7/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/8/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/9/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/10/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/11/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/12/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/13/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/14/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/15/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/16/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/17/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/18/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/19/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/20/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/21/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/22/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/23/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/24/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/25/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/26/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/27/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/28/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/29/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/29/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/30/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/30/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/31/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/31/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/32/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/32/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/33/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/33/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/34/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/34/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/35/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/35/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/36/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/36/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/37/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/37/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/38/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/38/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/39/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/39/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/40/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/40/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/41/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/41/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/42/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/42/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/43/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/43/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/44/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/44/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/45/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/45/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/46/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/46/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/47/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/47/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/48/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/48/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/49/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/49/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/50/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/50/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/51/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/51/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/52/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/52/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/53/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/53/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/54/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/54/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/55/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/55/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/56/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/56/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/57/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/57/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/58/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/58/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/59/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/59/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/60/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/60/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/61/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/61/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/62/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/62/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/63/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/63/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/64/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/64/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/65/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/65/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/66/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/66/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/67/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/67/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/68/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/68/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/69/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/69/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/70/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/70/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/71/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/71/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/72/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/72/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/73/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/73/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/74/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/74/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/75/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/75/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/76/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/76/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/77/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/77/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/78/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/78/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/79/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/79/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/80/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/80/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/81/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/81/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/82/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/82/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/83/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/83/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/84/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/84/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/85/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/85/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/86/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/86/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/87/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/87/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/88/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/88/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/89/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/89/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/90/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/90/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/91/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/91/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/92/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/92/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/93/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/93/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/94/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/94/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/95/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/95/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/96/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/96/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/97/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/97/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/98/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/98/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/99/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/99/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/100/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/sponsor/100/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/0/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/1/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/2/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/3/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/4/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/5/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/6/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/7/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/8/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/9/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/10/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/11/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/12/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/13/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/14/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/15/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/16/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/17/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/18/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/19/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/20/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/21/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/22/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/23/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/24/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/25/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/26/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/27/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/28/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/29/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/29/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/30/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/30/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/31/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/31/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/32/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/32/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/33/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/33/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/34/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/34/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/35/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/35/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/36/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/36/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/37/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/37/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/38/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/38/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/39/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/39/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/40/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/40/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/41/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/41/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/42/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/42/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/43/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/43/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/44/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/44/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/45/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/45/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/46/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/46/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/47/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/47/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/48/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/48/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/49/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/49/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/50/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/50/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/51/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/51/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/52/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/52/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/53/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/53/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/54/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/54/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/55/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/55/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/56/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/56/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/57/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/57/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/58/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/58/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/59/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/59/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/60/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/60/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/61/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/61/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/62/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/62/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/63/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/63/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/64/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/64/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/65/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/65/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/66/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/66/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/67/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/67/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/68/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/68/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/69/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/69/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/70/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/70/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/71/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/71/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/72/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/72/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/73/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/73/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/74/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/74/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/75/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/75/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/76/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/76/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/77/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/77/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/78/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/78/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/79/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/79/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/80/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/80/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/81/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/81/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/82/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/82/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/83/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/83/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/84/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/84/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/85/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/85/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/86/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/86/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/87/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/87/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/88/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/88/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/89/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/89/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/90/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/90/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/91/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/91/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/92/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/92/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/93/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/93/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/94/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/94/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/95/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/95/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/96/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/96/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/97/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/97/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/98/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/98/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/99/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/99/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/sponsor/100/website?requireActive=false" target="_blank"><img width="100" src="https://opencollective.com/webpack/sponsor/100/avatar.svg?requireActive=false"></a>
|
||||
|
||||
</div>
|
||||
|
||||
<h2 align="center">Backers</h2>
|
||||
### Backers
|
||||
|
||||
[Become a backer](https://opencollective.com/webpack#backer) and get your image on our README on GitHub with a link to your site.
|
||||
|
||||
<a href="https://opencollective.com/webpack/backer/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/7/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/8/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/9/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/10/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/11/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/12/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/13/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/14/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/15/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/16/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/17/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/18/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/19/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/20/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/21/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/22/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/23/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/24/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/25/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/26/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/27/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/28/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/29/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/29/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/30/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/30/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/31/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/31/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/32/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/32/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/33/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/33/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/34/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/34/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/35/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/35/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/36/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/36/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/37/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/37/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/38/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/38/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/39/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/39/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/40/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/40/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/41/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/41/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/42/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/42/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/43/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/43/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/44/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/44/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/45/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/45/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/46/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/46/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/47/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/47/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/48/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/48/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/49/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/49/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/50/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/50/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/51/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/51/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/52/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/52/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/53/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/53/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/54/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/54/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/55/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/55/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/56/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/56/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/57/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/57/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/58/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/58/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/59/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/59/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/60/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/60/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/61/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/61/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/62/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/62/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/63/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/63/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/64/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/64/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/65/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/65/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/66/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/66/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/67/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/67/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/68/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/68/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/69/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/69/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/70/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/70/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/71/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/71/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/72/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/72/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/73/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/73/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/74/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/74/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/75/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/75/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/76/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/76/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/77/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/77/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/78/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/78/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/79/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/79/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/80/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/80/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/81/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/81/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/82/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/82/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/83/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/83/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/84/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/84/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/85/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/85/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/86/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/86/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/87/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/87/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/88/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/88/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/89/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/89/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/90/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/90/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/91/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/91/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/92/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/92/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/93/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/93/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/94/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/94/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/95/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/95/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/96/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/96/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/97/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/97/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/98/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/98/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/99/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/99/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/100/website?requireActive=false" target="_blank"><img src="https://opencollective.com/webpack/backer/100/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/0/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/1/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/2/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/3/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/3/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/4/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/4/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/5/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/5/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/6/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/6/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/7/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/7/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/8/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/8/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/9/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/9/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/10/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/10/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/11/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/11/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/12/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/12/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/13/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/13/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/14/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/14/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/15/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/15/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/16/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/16/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/17/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/17/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/18/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/18/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/19/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/19/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/20/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/20/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/21/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/21/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/22/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/22/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/23/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/23/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/24/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/24/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/25/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/25/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/26/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/26/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/27/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/27/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/28/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/28/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/29/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/29/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/30/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/30/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/31/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/31/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/32/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/32/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/33/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/33/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/34/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/34/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/35/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/35/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/36/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/36/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/37/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/37/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/38/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/38/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/39/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/39/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/40/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/40/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/41/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/41/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/42/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/42/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/43/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/43/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/44/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/44/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/45/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/45/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/46/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/46/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/47/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/47/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/48/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/48/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/49/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/49/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/50/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/50/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/51/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/51/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/52/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/52/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/53/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/53/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/54/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/54/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/55/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/55/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/56/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/56/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/57/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/57/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/58/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/58/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/59/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/59/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/60/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/60/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/61/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/61/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/62/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/62/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/63/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/63/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/64/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/64/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/65/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/65/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/66/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/66/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/67/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/67/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/68/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/68/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/69/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/69/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/70/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/70/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/71/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/71/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/72/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/72/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/73/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/73/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/74/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/74/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/75/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/75/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/76/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/76/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/77/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/77/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/78/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/78/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/79/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/79/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/80/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/80/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/81/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/81/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/82/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/82/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/83/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/83/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/84/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/84/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/85/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/85/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/86/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/86/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/87/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/87/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/88/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/88/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/89/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/89/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/90/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/90/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/91/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/91/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/92/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/92/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/93/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/93/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/94/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/94/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/95/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/95/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/96/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/96/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/97/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/97/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/98/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/98/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/99/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/99/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/webpack/backer/100/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/webpack/backer/100/avatar.svg?requireActive=false"></a>
|
||||
|
||||
<h2 align="center">Special Thanks to</h2>
|
||||
<p align="center">(In chronological order)</p>
|
||||
## Special Thanks to
|
||||
|
||||
<p>(In chronological order)</p>
|
||||
|
||||
- [@google](https://github.com/google) for [Google Web Toolkit (GWT)](http://www.gwtproject.org/), which aims to compile Java to JavaScript. It features a similar [Code Splitting](http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html) as webpack.
|
||||
- [@medikoo](https://github.com/medikoo) for [modules-webmake](https://github.com/medikoo/modules-webmake), which is a similar project. webpack was born because I wanted Code Splitting for modules-webmake. Interestingly the [Code Splitting issue is still open](https://github.com/medikoo/modules-webmake/issues/7) (thanks also to @Phoscur for the discussion).
|
||||
- [@medikoo](https://github.com/medikoo) for [modules-webmake](https://github.com/medikoo/modules-webmake), which is a similar project. webpack was born because of the desire for code splitting for modules such as Webmake. Interestingly, the [Code Splitting issue is still open](https://github.com/medikoo/modules-webmake/issues/7) (thanks also to @Phoscur for the discussion).
|
||||
- [@substack](https://github.com/substack) for [browserify](https://browserify.org/), which is a similar project and source for many ideas.
|
||||
- [@jrburke](https://github.com/jrburke) for [require.js](https://requirejs.org/), which is a similar project and source for many ideas.
|
||||
- [@defunctzombie](https://github.com/defunctzombie) for the [browser-field spec](https://github.com/defunctzombie/package-browser-field-spec), which makes modules available for node.js, browserify and webpack.
|
||||
- Every early webpack user, which contributed to webpack by writing issues or PRs. You influenced the direction...
|
||||
- [@shama](https://github.com/shama), [@jhnns](https://github.com/jhnns) and [@sokra](https://github.com/sokra) for maintaining this project
|
||||
- [@sokra](https://github.com/sokra) for creating webpack.
|
||||
- Every early webpack user, which contributed to webpack by writing issues or PRs. You influenced the direction.
|
||||
- All past and current webpack maintainers and collaborators.
|
||||
- Everyone who has written a loader for webpack. You are the ecosystem...
|
||||
- Everyone I forgot to mention here, but also influenced webpack.
|
||||
- Everyone not mentioned here but that has also influenced webpack.
|
||||
|
||||
[npm]: https://img.shields.io/npm/v/webpack.svg
|
||||
[npm-url]: https://npmjs.com/package/webpack
|
||||
|
@ -716,9 +666,9 @@ src="https://static.monei.net/monei-logo.svg" height="30" alt="MONEI"></a>
|
|||
[node-url]: https://nodejs.org
|
||||
[prs]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg
|
||||
[prs-url]: https://webpack.js.org/contribute/
|
||||
[builds2]: https://dev.azure.com/webpack/webpack/_apis/build/status/webpack.webpack
|
||||
[builds2-url]: https://dev.azure.com/webpack/webpack/_build/latest?definitionId=3
|
||||
[licenses-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack?ref=badge_shield
|
||||
[licenses]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack.svg?type=shield
|
||||
[cover]: https://codecov.io/gh/webpack/webpack/branch/master/graph/badge.svg?token=mDP3mQJNnn
|
||||
[builds1]: https://github.com/webpack/webpack/actions/workflows/test.yml/badge.svg
|
||||
[builds1-url]: https://github.com/webpack/webpack/actions/workflows/test.yml
|
||||
[dependency-review-url]: https://github.com/webpack/webpack/actions/workflows/dependency-review.yml
|
||||
[dependency-review]: https://github.com/webpack/webpack/actions/workflows/dependency-review.yml/badge.svg
|
||||
[cover]: https://codecov.io/gh/webpack/webpack/graph/badge.svg?token=mDP3mQJNnn
|
||||
[cover-url]: https://codecov.io/gh/webpack/webpack
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
# Reporting Security Issues
|
||||
|
||||
If you discover a security issue in webpack, please report it by sending an
|
||||
email to [webpack@opencollective.com](mailto:webpack@opencollective.com).
|
||||
|
||||
This will allow us to assess the risk, and make a fix available before we add a
|
||||
bug report to the GitHub repository.
|
||||
|
||||
Thanks for helping make webpack safe for everyone.
|
|
@ -0,0 +1,102 @@
|
|||
# Webpack Test Suite Structure
|
||||
|
||||
This document explains the structure of the `test/` directory in the Webpack project using Jest. The directory is organized into multiple folders and files, each serving a specific purpose in testing various aspects of Webpack’s functionality.
|
||||
|
||||
## Folder and File Breakdown
|
||||
|
||||
### 1. `__snapshots__/`
|
||||
|
||||
- **Purpose**: Stores Jest snapshot files for comparing output consistency over time.
|
||||
- **Usage**: Used for testing UI components, serialized data, or expected module outputs.
|
||||
|
||||
### 2. `benchmarkCases/`
|
||||
|
||||
- **Purpose**: Contains test cases for benchmarking Webpack's performance.
|
||||
- **Usage**: Measures build times, memory usage, and optimization impact.
|
||||
|
||||
### 3. `cases/`
|
||||
|
||||
- **Purpose**: General test cases covering core functionalities.
|
||||
- **Usage**: Includes unit and integration tests for various modules and features.
|
||||
|
||||
### 4. `configCases/`
|
||||
|
||||
- **Purpose**: Tests related to Webpack configurations.
|
||||
- **Usage**: Ensures that Webpack’s configuration (e.g., loaders, plugins) functions correctly.
|
||||
|
||||
### 5. `fixtures/`
|
||||
|
||||
- **Purpose**: Stores sample/mock data used in tests.
|
||||
- **Usage**: Helps in creating consistent test cases with predefined inputs.
|
||||
|
||||
### 6. `helpers/`
|
||||
|
||||
- **Purpose**: Utility functions and scripts to assist in testing.
|
||||
- **Usage**: Provides reusable functions for mock data generation, cleanup, and assertions.
|
||||
|
||||
### 7. `hotCases/`
|
||||
|
||||
- **Purpose**: Focuses on Webpack’s Hot Module Replacement (HMR) functionality.
|
||||
- **Usage**: Ensures live reloading and hot updates work correctly.
|
||||
|
||||
### 8. `hotPlayground/`
|
||||
|
||||
- **Purpose**: An experimental space for testing HMR features.
|
||||
- **Usage**: Allows exploration of new HMR implementations.
|
||||
|
||||
### 9. `memoryLimitCases/json`
|
||||
|
||||
- **Purpose**: Contains test cases related to memory limits.
|
||||
- **Usage**: Ensures Webpack doesn’t exceed memory constraints.
|
||||
|
||||
### 10. `statsCases/`
|
||||
|
||||
- **Purpose**: Tests focused on Webpack’s statistical outputs.
|
||||
- **Usage**: Verifies correct bundle sizes, dependencies, and optimizations.
|
||||
|
||||
### 11. `typesCases/`
|
||||
|
||||
- **Purpose**: Type-checking tests, likely for TypeScript integration.
|
||||
- **Usage**: Ensures proper type definitions and compliance.
|
||||
|
||||
### 12. `watchCases/`
|
||||
|
||||
- **Purpose**: Tests for Webpack’s watch mode functionality.
|
||||
- **Usage**: Ensures file changes trigger correct rebuild behavior.
|
||||
|
||||
### 13. `*.unittest.js`
|
||||
|
||||
- **Purpose**: Contains unit tests for various functionalities.
|
||||
- **Usage**: Ensures individual modules and functions work as expected.
|
||||
|
||||
### 14. `BannerPlugin.test.js`
|
||||
|
||||
- **Purpose**: Tests Webpack’s `BannerPlugin` functionality.
|
||||
- **Usage**: Ensures that the plugin correctly adds banners to the bundled files.
|
||||
|
||||
## Testing Framework
|
||||
|
||||
- **Jest** is used for running tests.
|
||||
- Snapshots help maintain consistency in output.
|
||||
- Unit tests verify individual module functionality.
|
||||
- Integration tests ensure multiple components work together.
|
||||
|
||||
## How to Run Tests
|
||||
|
||||
To execute all tests, use the following command:
|
||||
|
||||
```sh
|
||||
yarn test
|
||||
```
|
||||
|
||||
For running specific tests:
|
||||
|
||||
```sh
|
||||
jest cases/userLogic.test.js
|
||||
```
|
||||
|
||||
## Contribution Guide
|
||||
|
||||
- Add new test cases in the appropriate folder.
|
||||
- Use Jest assertions and mocks for consistency.
|
||||
- Run `yarn test` before pushing changes to validate functionality.
|
|
@ -0,0 +1,48 @@
|
|||
# Webpack Core Working Group
|
||||
|
||||
This document outlines the webpack core working group.
|
||||
|
||||
---
|
||||
|
||||
## Working Group Name
|
||||
|
||||
Webpack Core Working Group
|
||||
|
||||
## Purpose and Responsibilities
|
||||
|
||||
The purpose of this working group is to facilitate, implement and fix problems and features within the core of webpack. This core includes tasking such as bugfixes, feature implementation and in general maintaining the main logic of webpack.
|
||||
|
||||
Each member of the working group is required to adhere to the [governance model of webpack](https://github.com/webpack/governance). In addition to having responsibility of the main part of webpack, the working group will manage other parts of the webpack organization repositories in such way they see fit.
|
||||
|
||||
## Goals & Objectives
|
||||
|
||||
- Develop features within the webpack organization and core areas.
|
||||
- Fix bugs within webpack organization and core areas.
|
||||
- Maintain and steer webpack in general together with the Technical Steering Committee.
|
||||
- Ensure performance and code coverage is sustained and top-notch.
|
||||
|
||||
## Members
|
||||
|
||||
- [snitin315](https://github.com/snitin315) -
|
||||
**Nitin Kumar** <<snitin315@gmail.com>> (he/him)
|
||||
- [thelarkinn](https://github.com/thelarkinn) -
|
||||
**Sean Larkin** <<selarkin@microsoft.com>> (he/him)
|
||||
- [jhnns](https://github.com/jhnns) -
|
||||
**Johannes Ewald** <<mail@johannesewald.de>>
|
||||
- [sokra](https://github.com/sokra) -
|
||||
**Tobias Koppers** <<jackworks@protonmail.co>>
|
||||
- [spacek33z](https://github.com/spacek33z) -
|
||||
**Kees Kluskens** <<kees@webduck.nl>>
|
||||
|
||||
## Communication
|
||||
|
||||
Meetings are hosted on an as-needed basis and private discussions are held in the #core-wg channel. For public feedback and communication, please use an appropriate channel within the webpack discord (e.g `#development-general`).
|
||||
|
||||
## Resources
|
||||
|
||||
- https://github.com/webpack
|
||||
- https://github.com/webpack/governance
|
||||
|
||||
## Reporting & Updates
|
||||
|
||||
- The working group can choose to involve the webpack TSC for feedback and updates, but has full autonomy of making changes to any codebase within webpack.
|
16
_SETUP.md
|
@ -57,20 +57,26 @@ yarn test:unit --watch
|
|||
yarn test:update-snapshots
|
||||
```
|
||||
|
||||
### To run benchmarks
|
||||
|
||||
```bash
|
||||
yarn benchmark
|
||||
```
|
||||
|
||||
### To run code formatter (prettier) run
|
||||
|
||||
```bash
|
||||
yarn pretty-lint-fix
|
||||
yarn fmt
|
||||
```
|
||||
|
||||
### To run all linters use
|
||||
|
||||
This performs linting on:
|
||||
|
||||
- eslint (code-lint script)
|
||||
- schema + dependencies (jest-lint script)
|
||||
- types (type-lint script)
|
||||
- format + generated files (special-lint script)
|
||||
- eslint (lint:code script)
|
||||
- dependencies (lint:yarn script)
|
||||
- types (lint:types script)
|
||||
- schema + format + generated files (lint:special script)
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
|
|
|
@ -1,326 +0,0 @@
|
|||
variables:
|
||||
YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn
|
||||
|
||||
jobs:
|
||||
- job: basic
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: "^18.0.0"
|
||||
displayName: "Install Node.js"
|
||||
- script: |
|
||||
curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
displayName: "Install Yarn"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
node -v
|
||||
yarn -v
|
||||
displayName: "Print versions"
|
||||
- task: CacheBeta@1
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: "Cache Yarn packages"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn --frozen-lockfile
|
||||
yarn link --frozen-lockfile || true
|
||||
yarn link webpack --frozen-lockfile
|
||||
displayName: "Install dependencies"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
export JEST_JUNIT_OUTPUT_NAME=basic-junit.xml
|
||||
yarn test:basic --ci --reporters=default --reporters=jest-junit
|
||||
export JEST_JUNIT_OUTPUT_NAME=unit-junit.xml
|
||||
yarn test:unit --ci --reporters=default --reporters=jest-junit
|
||||
env:
|
||||
CI: "true"
|
||||
displayName: "Run basic tests"
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testRunTitle: "basic"
|
||||
testResultsFiles: "**/basic-junit.xml"
|
||||
condition: succeededOrFailed()
|
||||
displayName: "Publish basic test results"
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testRunTitle: "unit"
|
||||
testResultsFiles: "**/unit-junit.xml"
|
||||
condition: succeededOrFailed()
|
||||
displayName: "Publish unit test results"
|
||||
|
||||
- job: lint
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: "^18.0.0"
|
||||
displayName: "Install Node.js"
|
||||
- script: |
|
||||
curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
displayName: "Install Yarn"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
node -v
|
||||
yarn -v
|
||||
displayName: "Print versions"
|
||||
- task: CacheBeta@1
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: "Cache Yarn packages"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn --frozen-lockfile
|
||||
yarn link --frozen-lockfile || true
|
||||
yarn link webpack --frozen-lockfile
|
||||
displayName: "Install dependencies"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn lint
|
||||
env:
|
||||
CI: "true"
|
||||
displayName: "Run linting"
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testRunTitle: "lint"
|
||||
testResultsFiles: "**/junit.xml"
|
||||
condition: succeededOrFailed()
|
||||
displayName: "Publish lint results"
|
||||
|
||||
- job: Windows
|
||||
dependsOn:
|
||||
- basic
|
||||
- lint
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
strategy:
|
||||
maxParallel: 6
|
||||
matrix:
|
||||
node-10-a:
|
||||
node_version: ^10.13.0
|
||||
part: a
|
||||
node-10-b:
|
||||
node_version: ^10.13.0
|
||||
part: b
|
||||
node-12-a:
|
||||
node_version: ^18.0.0
|
||||
part: a
|
||||
node-12-b:
|
||||
node_version: ^18.0.0
|
||||
part: b
|
||||
node-16-a:
|
||||
node_version: ^20.0.0
|
||||
part: a
|
||||
node-16-b:
|
||||
node_version: ^20.0.0
|
||||
part: b
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: $(node_version)
|
||||
displayName: "Install Node.js $(node_version)"
|
||||
- script: |
|
||||
npm install --global yarn
|
||||
displayName: "Install Yarn"
|
||||
- script: |
|
||||
node -v
|
||||
yarn -v
|
||||
displayName: "Print versions"
|
||||
- task: CacheBeta@1
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: "Cache Yarn packages"
|
||||
# Install old `jest` version and ignore platform problem for legacy node versions
|
||||
- script: |
|
||||
yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 cspell@^6.31.1 open-cli@^7.2.0 --ignore-engines
|
||||
yarn --frozen-lockfile --ignore-engines
|
||||
displayName: "Install dependencies (old node.js version)"
|
||||
condition: eq(variables['node_version'], '^10.13.0')
|
||||
- script: yarn --frozen-lockfile
|
||||
displayName: "Install dependencies"
|
||||
condition: not(eq(variables['node_version'], '^10.13.0'))
|
||||
- script: yarn link --frozen-lockfile || true
|
||||
displayName: "Link webpack"
|
||||
continueOnError: true
|
||||
- script: yarn link webpack --frozen-lockfile
|
||||
displayName: "Link webpack into node_modules"
|
||||
- script: |
|
||||
yarn cover:integration:$(part) --ci --maxWorkers=2 --reporters=default --reporters=jest-junit || yarn cover:integration:$(part) --ci --maxWorkers=2 --reporters=default --reporters=jest-junit -f
|
||||
yarn cover:merge
|
||||
env:
|
||||
CI: "true"
|
||||
displayName: "Run tests with coverage"
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testRunTitle: "Windows with Node.js $(node_version)"
|
||||
testResultsFiles: "**/junit.xml"
|
||||
condition: succeededOrFailed()
|
||||
displayName: "Publish test results"
|
||||
|
||||
- job: Linux
|
||||
dependsOn:
|
||||
- basic
|
||||
- lint
|
||||
pool:
|
||||
vmImage: ubuntu-latest
|
||||
strategy:
|
||||
maxParallel: 6
|
||||
matrix:
|
||||
node-10-a:
|
||||
node_version: ^10.13.0
|
||||
part: a
|
||||
node-10-b:
|
||||
node_version: ^10.13.0
|
||||
part: b
|
||||
node-12-a:
|
||||
node_version: ^18.0.0
|
||||
part: a
|
||||
node-12-b:
|
||||
node_version: ^18.0.0
|
||||
part: b
|
||||
node-16-a:
|
||||
node_version: ^20.0.0
|
||||
part: a
|
||||
node-16-b:
|
||||
node_version: ^20.0.0
|
||||
part: b
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: $(node_version)
|
||||
displayName: "Install Node.js $(node_version)"
|
||||
- script: |
|
||||
curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
displayName: "Install Yarn"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
node -v
|
||||
yarn -v
|
||||
displayName: "Print versions"
|
||||
- task: CacheBeta@1
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: "Cache Yarn packages"
|
||||
# Install old `jest` version and ignore platform problem for legacy node versions
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 cspell@^6.31.1 open-cli@^7.2.0 --ignore-engines
|
||||
yarn --frozen-lockfile --ignore-engines
|
||||
yarn link --frozen-lockfile || true
|
||||
yarn link webpack --frozen-lockfile
|
||||
displayName: "Install dependencies (old node.js version)"
|
||||
condition: eq(variables['node_version'], '^10.13.0')
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn --frozen-lockfile
|
||||
yarn link --frozen-lockfile || true
|
||||
yarn link webpack --frozen-lockfile
|
||||
displayName: "Install dependencies"
|
||||
condition: not(eq(variables['node_version'], '^10.13.0'))
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn cover:integration:$(part) --ci --maxWorkers=2 --reporters=default --reporters=jest-junit || yarn cover:integration:$(part) --ci --maxWorkers=2 --reporters=default --reporters=jest-junit -f
|
||||
yarn cover:merge
|
||||
env:
|
||||
CI: "true"
|
||||
displayName: "Run tests with coverage"
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testRunTitle: "Linux with Node.js $(node_version)"
|
||||
testResultsFiles: "**/junit.xml"
|
||||
condition: succeededOrFailed()
|
||||
displayName: "Publish test results"
|
||||
|
||||
- job: macOS
|
||||
dependsOn:
|
||||
- basic
|
||||
- lint
|
||||
pool:
|
||||
vmImage: macOS-latest
|
||||
strategy:
|
||||
maxParallel: 6
|
||||
matrix:
|
||||
node-10-a:
|
||||
node_version: ^10.13.0
|
||||
part: a
|
||||
node-10-b:
|
||||
node_version: ^10.13.0
|
||||
part: b
|
||||
node-12-a:
|
||||
node_version: ^18.0.0
|
||||
part: a
|
||||
node-12-b:
|
||||
node_version: ^18.0.0
|
||||
part: b
|
||||
node-16-a:
|
||||
node_version: ^20.0.0
|
||||
part: a
|
||||
node-16-b:
|
||||
node_version: ^20.0.0
|
||||
part: b
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: $(node_version)
|
||||
displayName: "Install Node.js $(node_version)"
|
||||
- script: |
|
||||
curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
displayName: "Install Yarn"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
node -v
|
||||
yarn -v
|
||||
displayName: "Print versions"
|
||||
- task: CacheBeta@1
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: "Cache Yarn packages"
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 cspell@^6.31.1 open-cli@^7.2.0 --ignore-engines
|
||||
yarn --frozen-lockfile --ignore-engines
|
||||
yarn link --frozen-lockfile || true
|
||||
yarn link webpack --frozen-lockfile
|
||||
displayName: "Install dependencies (old node.js version)"
|
||||
condition: eq(variables['node_version'], '^10.13.0')
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn --frozen-lockfile
|
||||
yarn link --frozen-lockfile || true
|
||||
yarn link webpack --frozen-lockfile
|
||||
displayName: "Install dependencies"
|
||||
condition: not(eq(variables['node_version'], '^10.13.0'))
|
||||
- script: |
|
||||
set -e
|
||||
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
|
||||
yarn cover:integration:$(part) --ci --reporters=default --reporters=jest-junit || yarn cover:integration:$(part) --ci --reporters=default --reporters=jest-junit -f
|
||||
yarn cover:merge
|
||||
env:
|
||||
CI: "true"
|
||||
displayName: "Run tests with coverage"
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testRunTitle: "macOS with Node.js $(node_version)"
|
||||
testResultsFiles: "**/junit.xml"
|
||||
condition: succeededOrFailed()
|
||||
displayName: "Publish test results"
|
|
@ -1,239 +0,0 @@
|
|||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const Benchmark = require("benchmark");
|
||||
const webpack = require("../");
|
||||
const fixtures = path.join(__dirname, "fixtures");
|
||||
const outputPath = path.join(__dirname, "js");
|
||||
|
||||
const benchmarkOptions = {
|
||||
defer: true,
|
||||
onCycle: function () {
|
||||
process.stderr.write(".");
|
||||
},
|
||||
minSamples: 10
|
||||
};
|
||||
|
||||
function runTimes(compiler, times, deferred) {
|
||||
fs.writeFileSync(
|
||||
path.join(fixtures, "0.js"),
|
||||
"module.exports = " + Math.random(),
|
||||
"utf-8"
|
||||
);
|
||||
compiler.run(err => {
|
||||
if (err) throw err;
|
||||
if (times === 1) deferred.resolve();
|
||||
else runTimes(compiler, times - 1, deferred);
|
||||
});
|
||||
}
|
||||
|
||||
const tests = {
|
||||
"normal build": [
|
||||
[0, 1, 5, 10, 50, 100, 200],
|
||||
(size, deferred) => {
|
||||
webpack(
|
||||
{
|
||||
context: fixtures,
|
||||
entry: `./${size}.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
}
|
||||
},
|
||||
err => {
|
||||
if (err) throw err;
|
||||
deferred.resolve();
|
||||
}
|
||||
);
|
||||
}
|
||||
],
|
||||
"eval dev build": [
|
||||
[0, 1, 2, 5, 10, 15],
|
||||
(size, deferred) => {
|
||||
webpack(
|
||||
{
|
||||
context: fixtures,
|
||||
entry: `./${size}.big.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
},
|
||||
devtool: "eval"
|
||||
},
|
||||
err => {
|
||||
if (err) throw err;
|
||||
deferred.resolve();
|
||||
}
|
||||
);
|
||||
}
|
||||
],
|
||||
"sourcemap build": [
|
||||
[0, 1, 2, 5, 10, 15],
|
||||
(size, deferred) => {
|
||||
webpack(
|
||||
{
|
||||
context: fixtures,
|
||||
entry: `./${size}.big.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
},
|
||||
devtool: "source-map"
|
||||
},
|
||||
err => {
|
||||
if (err) throw err;
|
||||
deferred.resolve();
|
||||
}
|
||||
);
|
||||
}
|
||||
],
|
||||
"cheap sourcemap build": [
|
||||
[0, 1, 2, 5, 10, 15],
|
||||
(size, deferred) => {
|
||||
webpack(
|
||||
{
|
||||
context: fixtures,
|
||||
entry: `./${size}.big.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
},
|
||||
devtool: "cheap-source-map"
|
||||
},
|
||||
err => {
|
||||
if (err) throw err;
|
||||
deferred.resolve();
|
||||
}
|
||||
);
|
||||
}
|
||||
],
|
||||
"build w/ chunks": [
|
||||
[0, 1, 5, 10, 50, 100, 200],
|
||||
(size, deferred) => {
|
||||
webpack(
|
||||
{
|
||||
context: fixtures,
|
||||
entry: `./${size}.async.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
}
|
||||
},
|
||||
err => {
|
||||
if (err) throw err;
|
||||
deferred.resolve();
|
||||
}
|
||||
);
|
||||
}
|
||||
],
|
||||
incremental: [
|
||||
[0, 1, 5, 10, 50, 100, 200],
|
||||
(size, deferred) => {
|
||||
var compiler = webpack({
|
||||
cache: true,
|
||||
context: fixtures,
|
||||
entry: "./" + size + ".js",
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
}
|
||||
});
|
||||
runTimes(compiler, 2, deferred);
|
||||
}
|
||||
],
|
||||
"incremental cheap sourcemap": [
|
||||
[1, 2, 3, 4, 5, 6],
|
||||
(size, deferred) => {
|
||||
var compiler = webpack({
|
||||
cache: true,
|
||||
context: fixtures,
|
||||
entry: "./200.js",
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
},
|
||||
devtool: "cheap-source-map"
|
||||
});
|
||||
runTimes(compiler, size, deferred);
|
||||
}
|
||||
],
|
||||
incremental2: [
|
||||
[0, 1, 5, 10, 50, 100, 200],
|
||||
(size, deferred) => {
|
||||
var compiler = webpack({
|
||||
cache: true,
|
||||
context: fixtures,
|
||||
entry: `./${size}.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
}
|
||||
});
|
||||
runTimes(compiler, 3, deferred);
|
||||
}
|
||||
],
|
||||
incremental4: [
|
||||
[0, 1, 5, 10, 50, 100, 200],
|
||||
(size, deferred) => {
|
||||
var compiler = webpack({
|
||||
cache: true,
|
||||
context: fixtures,
|
||||
entry: `./${size}.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
}
|
||||
});
|
||||
runTimes(compiler, 5, deferred);
|
||||
}
|
||||
],
|
||||
incremental16: [
|
||||
[0, 1, 5, 10, 50, 100, 200],
|
||||
(size, deferred) => {
|
||||
var compiler = webpack({
|
||||
cache: true,
|
||||
context: fixtures,
|
||||
entry: `./${size}.js`,
|
||||
output: {
|
||||
path: outputPath,
|
||||
filename: "bundle.js"
|
||||
}
|
||||
});
|
||||
runTimes(compiler, 17, deferred);
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
const suite = new Benchmark.Suite();
|
||||
|
||||
Object.keys(tests)
|
||||
.filter(name =>
|
||||
process.argv.length > 2 ? name.includes(process.argv[2]) : true
|
||||
)
|
||||
.forEach(name => {
|
||||
const test = tests[name];
|
||||
test[0].forEach(size => {
|
||||
suite.add(
|
||||
`${name} ${size}`,
|
||||
deferred => {
|
||||
test[1](size, deferred);
|
||||
},
|
||||
benchmarkOptions
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
suite.on("cycle", event => {
|
||||
process.stderr.write("\n");
|
||||
const b = event.target;
|
||||
console.log(
|
||||
b.name +
|
||||
"\t" +
|
||||
Math.floor(1000 * (b.stats.mean - b.stats.moe)) +
|
||||
"\t" +
|
||||
Math.floor(1000 * (b.stats.mean + b.stats.moe))
|
||||
);
|
||||
});
|
||||
|
||||
suite.run({
|
||||
async: true
|
||||
});
|
|
@ -1,30 +0,0 @@
|
|||
const webpack = require("../");
|
||||
const path = require("path");
|
||||
|
||||
webpack(
|
||||
{
|
||||
context: __dirname,
|
||||
entry: "./createBenchmark/entry.js",
|
||||
output: {
|
||||
path: __dirname,
|
||||
filename: "benchmark-bundle.js"
|
||||
},
|
||||
target: "node",
|
||||
node: {
|
||||
__dirname: false
|
||||
},
|
||||
optimization: {
|
||||
moduleIds: "named"
|
||||
},
|
||||
plugins: [
|
||||
new webpack.IgnorePlugin(/^(fsevents|terser)$/),
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
/^.\/loadLoader$/,
|
||||
path.resolve(__dirname, "./createBenchmark/loadLoader")
|
||||
)
|
||||
]
|
||||
},
|
||||
(err, stats) => {
|
||||
console.log(stats.toString());
|
||||
}
|
||||
);
|
|
@ -1,26 +0,0 @@
|
|||
const webpack = require("../../");
|
||||
const path = require("path");
|
||||
|
||||
const testCase = process.argv[2];
|
||||
|
||||
const config = {
|
||||
context: __dirname,
|
||||
entry: `./${testCase}`,
|
||||
output: {
|
||||
path: path.resolve(__dirname, "output-" + testCase)
|
||||
},
|
||||
devtool: process.argv[3]
|
||||
};
|
||||
|
||||
const compiler = webpack(config);
|
||||
compiler.run((err, stats) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
} else {
|
||||
console.log(
|
||||
stats.toString({
|
||||
errorDetails: true
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = (loader, callback) => {
|
||||
callback(new Error("Loaders are not supported"));
|
||||
};
|
|
@ -1,59 +0,0 @@
|
|||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
|
||||
const fixtures = path.join(__dirname, "fixtures");
|
||||
|
||||
try {
|
||||
fs.mkdirSync(fixtures);
|
||||
} catch (e) {
|
||||
// The directory already exists
|
||||
}
|
||||
|
||||
function generateRequireString(conditional, suffix) {
|
||||
const prefixedSuffix = suffix ? `.${suffix}` : "";
|
||||
return `require(${JSON.stringify(`./${conditional}${prefixedSuffix}.js`)});`;
|
||||
}
|
||||
|
||||
for (let i = 0; i < 10000; i++) {
|
||||
const source = [];
|
||||
if (i > 8) source.push(generateRequireString((i / 8) | 0));
|
||||
if (i > 4) source.push(generateRequireString((i / 4) | 0));
|
||||
if (i > 2) source.push(generateRequireString((i / 2) | 0));
|
||||
if (i > 0) source.push(generateRequireString(i - 1));
|
||||
source.push("module.exports = " + i + ";");
|
||||
fs.writeFileSync(path.join(fixtures, i + ".js"), source.join("\n"), "utf-8");
|
||||
}
|
||||
|
||||
for (let i = 0; i < 10000; i++) {
|
||||
const source = [];
|
||||
source.push("require.ensure([], function(require) {");
|
||||
if (i > 8) source.push(generateRequireString((i / 8) | 0, "async"));
|
||||
if (i > 4) source.push(generateRequireString((i / 4) | 0, "async"));
|
||||
if (i > 2) source.push(generateRequireString((i / 2) | 0, "async"));
|
||||
if (i > 0) source.push(generateRequireString(i - 1, "async"));
|
||||
source.push("});");
|
||||
source.push("module.exports = " + i + ";");
|
||||
fs.writeFileSync(
|
||||
path.join(fixtures, i + ".async.js"),
|
||||
source.join("\n"),
|
||||
"utf-8"
|
||||
);
|
||||
}
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const source = [];
|
||||
if (i > 8) source.push(generateRequireString((i / 8) | 0, "big"));
|
||||
if (i > 4) source.push(generateRequireString((i / 4) | 0, "big"));
|
||||
if (i > 2) source.push(generateRequireString((i / 2) | 0, "big"));
|
||||
if (i > 0) source.push(generateRequireString(i - 1, "big"));
|
||||
for (let j = 0; j < 300; j++)
|
||||
source.push(
|
||||
"if(Math.random())hello.world();test.a.b.c.d();x(1,2,3,4);var a,b,c,d,e,f;"
|
||||
);
|
||||
source.push("module.exports = " + i + ";");
|
||||
fs.writeFileSync(
|
||||
path.join(fixtures, i + ".big.js"),
|
||||
source.join("\n"),
|
||||
"utf-8"
|
||||
);
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
|
||||
const fixtures = path.join(__dirname, "fixtures");
|
||||
|
||||
try {
|
||||
fs.mkdirSync(fixtures);
|
||||
} catch (e) {
|
||||
// The directory already exists
|
||||
}
|
||||
|
||||
function genModule(prefix, depth, asyncDepth, multiplex, r, circular) {
|
||||
const source = [];
|
||||
const isAsync = depth >= asyncDepth;
|
||||
if (!isAsync) circular.push(path.resolve(fixtures, prefix + "/index.js"));
|
||||
source.push("(function() {");
|
||||
const m = (r % multiplex) + 1;
|
||||
let sum = 1;
|
||||
let item;
|
||||
try {
|
||||
fs.mkdirSync(path.resolve(fixtures, prefix));
|
||||
} catch (e) {
|
||||
// The directory already exists
|
||||
}
|
||||
if (depth > 0) {
|
||||
for (let i = 0; i < m; i++) {
|
||||
sum += genModule(
|
||||
prefix + "/" + i,
|
||||
depth - 1,
|
||||
asyncDepth,
|
||||
multiplex,
|
||||
(r + i + depth) * m + i + depth,
|
||||
circular
|
||||
);
|
||||
source.push("require(" + JSON.stringify("./" + i) + ");");
|
||||
if (i === 0) {
|
||||
if (isAsync) source.push("}); require.ensure([], function() {");
|
||||
}
|
||||
}
|
||||
item = circular[r % circular.length];
|
||||
}
|
||||
source.push("}, " + JSON.stringify(prefix) + ");");
|
||||
if (item) source.push("require(" + JSON.stringify(item) + ");");
|
||||
source.push("module.exports = " + JSON.stringify(prefix) + ";");
|
||||
fs.writeFileSync(
|
||||
path.resolve(fixtures, prefix + "/index.js"),
|
||||
source.join("\n"),
|
||||
"utf-8"
|
||||
);
|
||||
return sum;
|
||||
}
|
||||
|
||||
for (let i = 2; i < 14; i++) {
|
||||
const count = genModule("tree-" + i, 6, 100, i, 0, []);
|
||||
console.log("generated tree", i, count);
|
||||
}
|
||||
|
||||
for (let i = 2; i < 14; i++) {
|
||||
const count = genModule("async-tree-" + i, 6, 1, i, 0, []);
|
||||
console.log("generated async tree", i, count);
|
||||
}
|
||||
|
||||
const a = genModule("module-async", 7, 1, 3, 2, []);
|
||||
|
||||
const b = genModule("module-big-async", 5, 2, 9, 2, []);
|
||||
|
||||
const c = genModule("module-broad-async", 3, 3, 20, 10, []);
|
||||
|
||||
console.log("generated modules", a, b, c);
|
|
@ -1,83 +0,0 @@
|
|||
let avgJs = `
|
||||
const str = "we" + "do" + "some" + "ops";
|
||||
for(const x of str.split("")) {
|
||||
if(x.charCodeAt(0) > 40) {
|
||||
console.log("omg");
|
||||
} else {
|
||||
console.log(Math.random() * 2 + 3 * 2);
|
||||
}
|
||||
}
|
||||
|
||||
// Some comment
|
||||
switch(a.b.c.d.f.e.g.h.i) {
|
||||
case true:
|
||||
break;
|
||||
case "magic":
|
||||
throw new Error("Error!");
|
||||
case 9:
|
||||
(function() {
|
||||
// extra scope
|
||||
var x = 123;
|
||||
var y = 456;
|
||||
var z = x + z * x / y;
|
||||
x && y && (z = x ? y : x);
|
||||
}())
|
||||
}
|
||||
|
||||
function a() {}
|
||||
function b() {}
|
||||
function c() {}
|
||||
function d() {}
|
||||
function e() {}
|
||||
function f() {}
|
||||
`;
|
||||
|
||||
for (let i = 0; i < 2; i++) {
|
||||
avgJs += `(function() {${avgJs}}());`;
|
||||
}
|
||||
|
||||
const fs = require("fs");
|
||||
const root = __dirname;
|
||||
|
||||
createTree(fs, 100, `${root}/modules-100`);
|
||||
createTree(fs, 500, `${root}/modules-500`);
|
||||
createTree(fs, 1000, `${root}/modules-1000`);
|
||||
createTree(fs, 3000, `${root}/modules-3000`);
|
||||
createTree(fs, 5000, `${root}/modules-5000`);
|
||||
|
||||
function createTree(fs, count, folder) {
|
||||
fs.mkdirSync(folder);
|
||||
let remaining = count - 1;
|
||||
|
||||
function make(prefix, count, depth) {
|
||||
if (count === 0) {
|
||||
fs.writeFileSync(`${folder}/${prefix}.js`, `export default 1;\n${avgJs}`);
|
||||
} else {
|
||||
const list = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
if (remaining-- <= 0) break;
|
||||
if (depth <= 4 && i >= 3 && i <= 4) {
|
||||
list.push(
|
||||
`const module${i} = import("./${prefix}-${i}");\ncounter += module${i};`
|
||||
);
|
||||
} else {
|
||||
list.push(
|
||||
`import module${i} from "./${prefix}-${i}";\ncounter += module${i};`
|
||||
);
|
||||
}
|
||||
make(
|
||||
`${prefix}-${i}`,
|
||||
depth > 4 || count > 30 ? 0 : count + depth + Math.pow(i, 2),
|
||||
depth + 1
|
||||
);
|
||||
}
|
||||
fs.writeFileSync(
|
||||
`${folder}/${prefix}.js`,
|
||||
`let counter = 0;\n${list.join(
|
||||
"\n"
|
||||
)};\nexport default counter;\n${avgJs}`
|
||||
);
|
||||
}
|
||||
}
|
||||
make("index", 2, 0);
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
const createHash = require("../lib/util/createHash");
|
||||
|
||||
const compare = require("./micro-compare");
|
||||
|
||||
const size = 50;
|
||||
|
||||
const strings = [];
|
||||
for (let count = 1; ; count *= 10) {
|
||||
while (strings.length < count) {
|
||||
const s = require("crypto").randomBytes(size).toString("hex");
|
||||
strings.push(s);
|
||||
const hash = createHash("native-md4");
|
||||
hash.update(s);
|
||||
hash.update(s);
|
||||
hash.digest("hex");
|
||||
}
|
||||
let i = 0;
|
||||
console.log(
|
||||
`${count} different 200 char strings: ` +
|
||||
compare(
|
||||
"native md4",
|
||||
() => {
|
||||
const hash = createHash("native-md4");
|
||||
const s = strings[(i = (i + 1) % strings.length)];
|
||||
hash.update(s);
|
||||
hash.update(s);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"wasm md4",
|
||||
() => {
|
||||
const hash = createHash("md4");
|
||||
const s = strings[(i = (i + 1) % strings.length)];
|
||||
hash.update(s);
|
||||
hash.update(s);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
const createHash = require("../lib/util/createHash");
|
||||
|
||||
const compare = require("./micro-compare");
|
||||
|
||||
for (const size of [
|
||||
1, 10, 20, 40, 60, 80, 100, 200, 400, 1000, 1001, 5000, 8183, 8184, 8185,
|
||||
10000, 20000, 32768, 32769, 50000, 100000, 200000
|
||||
]) {
|
||||
const longString = require("crypto").randomBytes(size).toString("hex");
|
||||
const buffer = require("crypto").randomBytes(size * 2);
|
||||
console.log(
|
||||
`string ${longString.length} chars: ` +
|
||||
compare(
|
||||
"native md4",
|
||||
() => {
|
||||
const hash = createHash("native-md4");
|
||||
hash.update(longString);
|
||||
hash.update(longString);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"wasm md4",
|
||||
() => {
|
||||
const hash = createHash("md4");
|
||||
hash.update(longString);
|
||||
hash.update(longString);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
console.log(
|
||||
`buffer ${buffer.length} bytes: ` +
|
||||
compare(
|
||||
"native md4",
|
||||
() => {
|
||||
const hash = createHash("native-md4");
|
||||
hash.update(buffer);
|
||||
hash.update(buffer);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"wasm md4",
|
||||
() => {
|
||||
const hash = createHash("md4");
|
||||
hash.update(buffer);
|
||||
hash.update(buffer);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
let result;
|
||||
|
||||
const measure = (fn, count) => {
|
||||
const start = process.hrtime.bigint();
|
||||
for (let i = 0; i < count; i++) result = fn();
|
||||
return Number(process.hrtime.bigint() - start);
|
||||
};
|
||||
|
||||
const NS_PER_MS = 1000000; // 1ms
|
||||
const MIN_DURATION = 100 * NS_PER_MS; // 100ms
|
||||
const MAX_DURATION = 1000 * NS_PER_MS; // 1000ms
|
||||
const MAX_WARMUP_DURATION = 1 * NS_PER_MS; // 1ms
|
||||
|
||||
const format = (fast, slow, fastName, slowName, count) => {
|
||||
return `${fastName} is ${
|
||||
Math.round(((slow - fast) * 1000) / slow) / 10
|
||||
}% faster than ${slowName} (${Math.round(fast / 100 / count) / 10} µs vs ${
|
||||
Math.round(slow / 100 / count) / 10
|
||||
} µs, ${count}x)`;
|
||||
};
|
||||
|
||||
const compare = (n1, f1, n2, f2) => {
|
||||
let count = 1;
|
||||
while (true) {
|
||||
const timings = [f1, f2, f1, f2, f1, f2].map(f => measure(f, count));
|
||||
const t1 = Math.min(timings[0], timings[2], timings[4]);
|
||||
const t2 = Math.min(timings[1], timings[3], timings[5]);
|
||||
if (count === 1 && (t1 > MAX_WARMUP_DURATION || t2 > MAX_WARMUP_DURATION)) {
|
||||
continue;
|
||||
}
|
||||
if (
|
||||
(t1 > MIN_DURATION && t2 > MIN_DURATION) ||
|
||||
t1 > MAX_DURATION ||
|
||||
t2 > MAX_DURATION
|
||||
) {
|
||||
return t1 > t2
|
||||
? format(t2, t1, n2, n1, count)
|
||||
: format(t1, t2, n1, n2, count);
|
||||
}
|
||||
count *= 2;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = compare;
|
|
@ -1,45 +0,0 @@
|
|||
const createHash = require("../lib/util/createHash");
|
||||
|
||||
const compare = require("./micro-compare");
|
||||
|
||||
for (const size of [
|
||||
1, 10, 20, 40, 60, 80, 100, 200, 400, 1000, 1001, 5000, 8183, 8184, 8185,
|
||||
10000, 20000, 32768, 32769, 50000, 100000, 200000
|
||||
]) {
|
||||
const longString = require("crypto").randomBytes(size).toString("hex");
|
||||
const buffer = require("crypto").randomBytes(size * 2);
|
||||
console.log(
|
||||
`string ${longString.length} chars: ` +
|
||||
compare(
|
||||
"wasm xxhash64",
|
||||
() => {
|
||||
const hash = createHash("xxhash64");
|
||||
hash.update(longString);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"wasm md4",
|
||||
() => {
|
||||
const hash = createHash("md4");
|
||||
hash.update(longString);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
console.log(
|
||||
`buffer ${buffer.length} bytes: ` +
|
||||
compare(
|
||||
"wasm xxhash64",
|
||||
() => {
|
||||
const hash = createHash("xxhash64");
|
||||
hash.update(buffer);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"wasm md4",
|
||||
() => {
|
||||
const hash = createHash("md4");
|
||||
hash.update(buffer);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
const createHash = require("../lib/util/createHash");
|
||||
|
||||
const compare = require("./micro-compare");
|
||||
|
||||
for (const size of [
|
||||
1, 10, 20, 40, 60, 80, 100, 200, 400, 1000, 1001, 5000, 8183, 8184, 8185,
|
||||
10000, 20000, 32768, 32769, 50000, 100000, 200000
|
||||
]) {
|
||||
const longString = require("crypto").randomBytes(size).toString("hex");
|
||||
const buffer = require("crypto").randomBytes(size * 2);
|
||||
console.log(
|
||||
`string ${longString.length} chars: ` +
|
||||
compare(
|
||||
"wasm xxhash64",
|
||||
() => {
|
||||
const hash = createHash("xxhash64");
|
||||
hash.update(longString);
|
||||
hash.update(longString);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"native md4",
|
||||
() => {
|
||||
const hash = createHash("native-md4");
|
||||
hash.update(longString);
|
||||
hash.update(longString);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
console.log(
|
||||
`buffer ${buffer.length} bytes: ` +
|
||||
compare(
|
||||
"wasm xxhash64",
|
||||
() => {
|
||||
const hash = createHash("xxhash64");
|
||||
hash.update(buffer);
|
||||
hash.update(buffer);
|
||||
return hash.digest("hex");
|
||||
},
|
||||
"native md4",
|
||||
() => {
|
||||
const hash = createHash("native-md4");
|
||||
hash.update(buffer);
|
||||
hash.update(buffer);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* @param {string} command process to run
|
||||
* @param {string[]} args command line arguments
|
||||
|
@ -7,17 +9,18 @@
|
|||
*/
|
||||
const runCommand = (command, args) => {
|
||||
const cp = require("child_process");
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const executedCommand = cp.spawn(command, args, {
|
||||
stdio: "inherit",
|
||||
shell: true
|
||||
});
|
||||
|
||||
executedCommand.on("error", error => {
|
||||
executedCommand.on("error", (error) => {
|
||||
reject(error);
|
||||
});
|
||||
|
||||
executedCommand.on("exit", code => {
|
||||
executedCommand.on("exit", (code) => {
|
||||
if (code === 0) {
|
||||
resolve();
|
||||
} else {
|
||||
|
@ -31,7 +34,7 @@ const runCommand = (command, args) => {
|
|||
* @param {string} packageName name of the package
|
||||
* @returns {boolean} is the package installed?
|
||||
*/
|
||||
const isInstalled = packageName => {
|
||||
const isInstalled = (packageName) => {
|
||||
if (process.versions.pnp) {
|
||||
return true;
|
||||
}
|
||||
|
@ -73,15 +76,17 @@ const isInstalled = packageName => {
|
|||
* @param {CliOption} cli options
|
||||
* @returns {void}
|
||||
*/
|
||||
const runCli = cli => {
|
||||
const runCli = (cli) => {
|
||||
const path = require("path");
|
||||
|
||||
const pkgPath = require.resolve(`${cli.package}/package.json`);
|
||||
|
||||
const pkg = require(pkgPath);
|
||||
|
||||
if (pkg.type === "module" || /\.mjs/i.test(pkg.bin[cli.binName])) {
|
||||
import(path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName])).catch(
|
||||
error => {
|
||||
console.error(error);
|
||||
(err) => {
|
||||
console.error(err);
|
||||
process.exitCode = 1;
|
||||
}
|
||||
);
|
||||
|
@ -113,8 +118,7 @@ if (!cli.installed) {
|
|||
const fs = require("graceful-fs");
|
||||
const readLine = require("readline");
|
||||
|
||||
const notify =
|
||||
"CLI for webpack must be installed.\n" + ` ${cli.name} (${cli.url})\n`;
|
||||
const notify = `CLI for webpack must be installed.\n ${cli.name} (${cli.url})\n`;
|
||||
|
||||
console.error(notify);
|
||||
|
||||
|
@ -137,7 +141,7 @@ if (!cli.installed) {
|
|||
)} ${cli.package}".`
|
||||
);
|
||||
|
||||
const question = `Do you want to install 'webpack-cli' (yes/no): `;
|
||||
const question = "Do you want to install 'webpack-cli' (yes/no): ";
|
||||
|
||||
const questionInterface = readLine.createInterface({
|
||||
input: process.stdin,
|
||||
|
@ -148,7 +152,7 @@ if (!cli.installed) {
|
|||
// executed. Setting the exit code here to ensure the script exits correctly in those cases. The callback
|
||||
// function is responsible for clearing the exit code if the user wishes to install webpack-cli.
|
||||
process.exitCode = 1;
|
||||
questionInterface.question(question, answer => {
|
||||
questionInterface.question(question, (answer) => {
|
||||
questionInterface.close();
|
||||
|
||||
const normalizedAnswer = answer.toLowerCase().startsWith("y");
|
||||
|
@ -172,14 +176,15 @@ if (!cli.installed) {
|
|||
);
|
||||
|
||||
runCommand(
|
||||
/** @type {string} */ (packageManager),
|
||||
installOptions.concat(cli.package)
|
||||
/** @type {string} */
|
||||
(packageManager),
|
||||
[...installOptions, cli.package]
|
||||
)
|
||||
.then(() => {
|
||||
runCli(cli);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
process.exitCode = 1;
|
||||
});
|
||||
});
|
||||
|
|
47
codecov.yml
|
@ -6,44 +6,21 @@ coverage:
|
|||
range: "70...100"
|
||||
status:
|
||||
project:
|
||||
default: off
|
||||
basic:
|
||||
flags: basic
|
||||
default:
|
||||
flags:
|
||||
- unit
|
||||
- integration
|
||||
target: auto
|
||||
integration:
|
||||
flags: integration
|
||||
target: auto
|
||||
lintunit:
|
||||
flags: lintunit
|
||||
target: 0%
|
||||
patch:
|
||||
default: off
|
||||
basic:
|
||||
flags: basic
|
||||
default:
|
||||
flags:
|
||||
- unit
|
||||
- integration
|
||||
target: 90%
|
||||
base: pr
|
||||
integration:
|
||||
flags: integration
|
||||
target: 90%
|
||||
base: pr
|
||||
lintunit:
|
||||
flags: lintunit
|
||||
target: 0%
|
||||
base: pr
|
||||
changes:
|
||||
default: off
|
||||
basic:
|
||||
flags: basic
|
||||
target: 0%
|
||||
integration:
|
||||
flags: integration
|
||||
target: 0%
|
||||
lintunit:
|
||||
flags: lintunit
|
||||
target: 0%
|
||||
default:
|
||||
flags:
|
||||
- unit
|
||||
- integration
|
||||
comment: off
|
||||
flags:
|
||||
basic:
|
||||
joined: false
|
||||
lintunit:
|
||||
joined: false
|
||||
|
|
26
cspell.json
|
@ -42,6 +42,7 @@
|
|||
"chunkname",
|
||||
"cmodule",
|
||||
"codecov",
|
||||
"codspeed",
|
||||
"cofounder",
|
||||
"Collet's",
|
||||
"compat",
|
||||
|
@ -57,6 +58,7 @@
|
|||
"darkgreen",
|
||||
"darkred",
|
||||
"datastructures",
|
||||
"debugids",
|
||||
"declarators",
|
||||
"dedupe",
|
||||
"deduplicating",
|
||||
|
@ -85,6 +87,7 @@
|
|||
"eval",
|
||||
"Ewald",
|
||||
"exitance",
|
||||
"externref",
|
||||
"fetchpriority",
|
||||
"filebase",
|
||||
"fileoverview",
|
||||
|
@ -107,6 +110,7 @@
|
|||
"hashs",
|
||||
"hotpink",
|
||||
"hotupdatechunk",
|
||||
"icss",
|
||||
"ident",
|
||||
"idents",
|
||||
"IIFE",
|
||||
|
@ -160,12 +164,14 @@
|
|||
"mynamespace",
|
||||
"navigations",
|
||||
"nmodule",
|
||||
"nocheck",
|
||||
"noimport",
|
||||
"nonexistentfile",
|
||||
"nonrecursive",
|
||||
"nosource",
|
||||
"nosources",
|
||||
"nwjs",
|
||||
"oneline",
|
||||
"onconnect",
|
||||
"opencollective",
|
||||
"opensource",
|
||||
|
@ -177,6 +183,8 @@
|
|||
"pathinfo",
|
||||
"performant",
|
||||
"Phoscur",
|
||||
"parseargs",
|
||||
"pkgjs",
|
||||
"pmodule",
|
||||
"pnpm",
|
||||
"polyfilled",
|
||||
|
@ -208,6 +216,7 @@
|
|||
"referencer",
|
||||
"repo",
|
||||
"repos",
|
||||
"repr",
|
||||
"return'development",
|
||||
"returnfalse",
|
||||
"revparse",
|
||||
|
@ -275,6 +284,7 @@
|
|||
"url's",
|
||||
"valign",
|
||||
"valtype",
|
||||
"walltime",
|
||||
"wasi",
|
||||
"wasm",
|
||||
"watchings",
|
||||
|
@ -292,7 +302,20 @@
|
|||
"xxhashjs",
|
||||
"Yann",
|
||||
"readonly",
|
||||
"commithash"
|
||||
"commithash",
|
||||
"formaters",
|
||||
"akait",
|
||||
"evenstensberg",
|
||||
"Stensberg",
|
||||
"ovflowd",
|
||||
"Wunder",
|
||||
"snitin",
|
||||
"Nitin",
|
||||
"Kumar",
|
||||
"spacek",
|
||||
"thelarkinn",
|
||||
"behaviour",
|
||||
"WHATWG"
|
||||
],
|
||||
"ignoreRegExpList": [
|
||||
"/Author.+/",
|
||||
|
@ -304,6 +327,7 @@
|
|||
"**/dist/**",
|
||||
"**/node_modules/**",
|
||||
"examples/**/README.md",
|
||||
"examples/nodejs-addons/build/**/*",
|
||||
"examples/wasm-bindgen*/pkg/*_bg.js",
|
||||
"examples/wasm-bindgen*/pkg/*_bg*.d.ts",
|
||||
"**/webpack.lock.data/**",
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
type EXPECTED_ANY = any;
|
||||
type EXPECTED_FUNCTION = Function;
|
||||
type EXPECTED_OBJECT = object;
|
||||
|
||||
declare module "*.json";
|
||||
|
||||
// Deprecated NodeJS API usages in webpack
|
||||
|
@ -10,6 +14,24 @@ declare namespace NodeJS {
|
|||
}
|
||||
}
|
||||
|
||||
declare module "typescript-iterable" {
|
||||
// New iterator interfaces from `lib.es2015.iterable.d.ts` for compatibility with old typescript versions and `dispose`
|
||||
interface Disposable {
|
||||
[Symbol.dispose](): void;
|
||||
}
|
||||
|
||||
export interface IteratorObject<T, TReturn = unknown, TNext = unknown>
|
||||
extends Iterator<T, TReturn, TNext>,
|
||||
Disposable {
|
||||
[Symbol.iterator](): IteratorObject<T, TReturn, TNext>;
|
||||
}
|
||||
|
||||
export interface SetIterator<T>
|
||||
extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
|
||||
[Symbol.iterator](): SetIterator<T>;
|
||||
}
|
||||
}
|
||||
|
||||
declare module "neo-async" {
|
||||
interface QueueObject<T, E> {
|
||||
push(item: T): void;
|
||||
|
@ -32,7 +54,7 @@ declare module "neo-async" {
|
|||
(err?: E, result?: T): void;
|
||||
}
|
||||
export interface AsyncResultArrayCallback<T, E> {
|
||||
(err?: E, results?: Array<T | undefined>): void;
|
||||
(err: E | null, results?: Array<T | undefined>): void;
|
||||
}
|
||||
export interface AsyncResultObjectCallback<T, E> {
|
||||
(err: E | undefined, results: Dictionary<T | undefined>): void;
|
||||
|
@ -124,27 +146,35 @@ declare module "neo-async" {
|
|||
|
||||
// There are no typings for @webassemblyjs/ast
|
||||
declare module "@webassemblyjs/ast" {
|
||||
export class AST extends Node {
|
||||
type: "Program";
|
||||
body: [Module];
|
||||
}
|
||||
export interface Visitor {
|
||||
ModuleImport?: (p: NodePath<ModuleImport>) => void;
|
||||
ModuleExport?: (p: NodePath<ModuleExport>) => void;
|
||||
Start?: (p: NodePath<Start>) => void;
|
||||
Global?: (p: NodePath<Global>) => void;
|
||||
}
|
||||
export function traverse(
|
||||
ast: any,
|
||||
visitor: Visitor
|
||||
): void;
|
||||
export function traverse(node: Node, visitor: Visitor): void;
|
||||
export class NodePath<T> {
|
||||
node: T;
|
||||
remove(): void;
|
||||
}
|
||||
export class Node {}
|
||||
export class Node {
|
||||
type: string;
|
||||
}
|
||||
export class Identifier extends Node {
|
||||
value: string;
|
||||
}
|
||||
export class Start extends Node {
|
||||
index: Identifier;
|
||||
}
|
||||
export class Module extends Node {
|
||||
id: string;
|
||||
fields: Node[];
|
||||
metadata?: Record<string, EXPECTED_ANY>;
|
||||
}
|
||||
export class ModuleImportDescription {
|
||||
type: string;
|
||||
valtype?: string;
|
||||
|
@ -161,7 +191,7 @@ declare module "@webassemblyjs/ast" {
|
|||
name: string;
|
||||
descr: ModuleExportDescr;
|
||||
}
|
||||
type Index = Identifier | NumberLiteral;
|
||||
type Index = NumberLiteral;
|
||||
export class ModuleExportDescr extends Node {
|
||||
type: string;
|
||||
exportType: string;
|
||||
|
@ -207,7 +237,7 @@ declare module "@webassemblyjs/ast" {
|
|||
inf?: boolean,
|
||||
raw?: string
|
||||
): FloatLiteral;
|
||||
export function global(globalType: string, nodes: Node[]): Global;
|
||||
export function global(globalType: GlobalType, nodes: Node[]): Global;
|
||||
export function identifier(identifier: string): Identifier;
|
||||
export function funcParam(valType: string, id: Identifier): FuncParam;
|
||||
export function instruction(inst: string, args?: Node[]): Instruction;
|
||||
|
@ -218,7 +248,11 @@ declare module "@webassemblyjs/ast" {
|
|||
init: Node[]
|
||||
): ObjectInstruction;
|
||||
export function signature(params: FuncParam[], results: string[]): Signature;
|
||||
export function func(initFuncId: Identifier, signature: Signature, funcBody: Instruction[]): Func;
|
||||
export function func(
|
||||
initFuncId: Identifier,
|
||||
signature: Signature,
|
||||
funcBody: Instruction[]
|
||||
): Func;
|
||||
export function typeInstruction(
|
||||
id: Identifier | undefined,
|
||||
functype: Signature
|
||||
|
@ -233,12 +267,18 @@ declare module "@webassemblyjs/ast" {
|
|||
index: Index
|
||||
): ModuleExportDescr;
|
||||
|
||||
export function getSectionMetadata(ast: any, section: string): { vectorOfSize: { value: number } };
|
||||
export function getSectionMetadata(
|
||||
ast: AST,
|
||||
section: string
|
||||
): { vectorOfSize: { value: number } };
|
||||
export class FuncSignature {
|
||||
args: string[];
|
||||
result: string[];
|
||||
}
|
||||
export function moduleContextFromModuleAST(ast: any): any;
|
||||
export function moduleContextFromModuleAST(module: Module): {
|
||||
getFunction(i: number): FuncSignature;
|
||||
getStart(): Index;
|
||||
};
|
||||
|
||||
// Node matcher
|
||||
export function isGlobalType(n: Node): boolean;
|
||||
|
@ -248,167 +288,94 @@ declare module "@webassemblyjs/ast" {
|
|||
}
|
||||
|
||||
declare module "@webassemblyjs/wasm-parser" {
|
||||
export function decode(source: string | Buffer, options: { dump?: boolean, ignoreCodeSection?: boolean, ignoreDataSection?: boolean, ignoreCustomNameSection?: boolean }): any;
|
||||
export function decode(
|
||||
source: string | Buffer,
|
||||
options: {
|
||||
dump?: boolean;
|
||||
ignoreCodeSection?: boolean;
|
||||
ignoreDataSection?: boolean;
|
||||
ignoreCustomNameSection?: boolean;
|
||||
}
|
||||
): import("@webassemblyjs/ast").AST;
|
||||
}
|
||||
|
||||
declare module "@webassemblyjs/wasm-edit" {
|
||||
export function addWithAST(ast: any, bin: any, newNodes: import("@webassemblyjs/ast").Node[]): ArrayBuffer;
|
||||
export function editWithAST(ast: any, bin: any, visitors: import("@webassemblyjs/ast").Visitor): ArrayBuffer;
|
||||
export function addWithAST(
|
||||
ast: import("@webassemblyjs/ast").AST,
|
||||
bin: any,
|
||||
newNodes: import("@webassemblyjs/ast").Node[]
|
||||
): ArrayBuffer;
|
||||
export function editWithAST(
|
||||
ast: import("@webassemblyjs/ast").AST,
|
||||
bin: any,
|
||||
visitors: import("@webassemblyjs/ast").Visitor
|
||||
): ArrayBuffer;
|
||||
}
|
||||
|
||||
declare module "webpack-sources" {
|
||||
export type MapOptions = { columns?: boolean; module?: boolean };
|
||||
|
||||
export type RawSourceMap = {
|
||||
version: number;
|
||||
sources: string[];
|
||||
names: string[];
|
||||
sourceRoot?: string;
|
||||
sourcesContent?: string[];
|
||||
mappings: string;
|
||||
file: string;
|
||||
};
|
||||
|
||||
export abstract class Source {
|
||||
size(): number;
|
||||
|
||||
map(options?: MapOptions): RawSourceMap | null;
|
||||
|
||||
sourceAndMap(options?: MapOptions): {
|
||||
source: string | Buffer;
|
||||
map: Object;
|
||||
};
|
||||
|
||||
updateHash(hash: import("./lib/util/Hash")): void;
|
||||
|
||||
source(): string | Buffer;
|
||||
|
||||
buffer(): Buffer;
|
||||
}
|
||||
|
||||
export class RawSource extends Source {
|
||||
constructor(source: string | Buffer, convertToString?: boolean);
|
||||
|
||||
isBuffer(): boolean;
|
||||
}
|
||||
|
||||
export class OriginalSource extends Source {
|
||||
constructor(source: string | Buffer, name: string);
|
||||
|
||||
getName(): string;
|
||||
}
|
||||
|
||||
export class ReplaceSource extends Source {
|
||||
constructor(source: Source, name?: string);
|
||||
|
||||
replace(start: number, end: number, newValue: string, name?: string): void;
|
||||
insert(pos: number, newValue: string, name?: string): void;
|
||||
|
||||
getName(): string;
|
||||
original(): string;
|
||||
getReplacements(): {
|
||||
start: number;
|
||||
end: number;
|
||||
content: string;
|
||||
insertIndex: number;
|
||||
name: string;
|
||||
}[];
|
||||
}
|
||||
|
||||
export class SourceMapSource extends Source {
|
||||
constructor(
|
||||
source: string | Buffer,
|
||||
name: string,
|
||||
sourceMap: Object | string | Buffer,
|
||||
originalSource?: string | Buffer,
|
||||
innerSourceMap?: Object | string | Buffer,
|
||||
removeOriginalSource?: boolean
|
||||
);
|
||||
|
||||
getArgsAsBuffers(): [
|
||||
Buffer,
|
||||
string,
|
||||
Buffer,
|
||||
Buffer | undefined,
|
||||
Buffer | undefined,
|
||||
boolean
|
||||
];
|
||||
}
|
||||
|
||||
export class ConcatSource extends Source {
|
||||
constructor(...args: (string | Source)[]);
|
||||
|
||||
getChildren(): Source[];
|
||||
|
||||
add(item: string | Source): void;
|
||||
addAllSkipOptimizing(items: Source[]): void;
|
||||
}
|
||||
|
||||
export class PrefixSource extends Source {
|
||||
constructor(prefix: string, source: string | Source);
|
||||
|
||||
original(): Source;
|
||||
getPrefix(): string;
|
||||
}
|
||||
|
||||
export class CachedSource extends Source {
|
||||
constructor(source: Source);
|
||||
constructor(source: Source | (() => Source), cachedData?: any);
|
||||
|
||||
original(): Source;
|
||||
originalLazy(): Source | (() => Source);
|
||||
getCachedData(): any;
|
||||
}
|
||||
|
||||
export class SizeOnlySource extends Source {
|
||||
constructor(size: number);
|
||||
}
|
||||
|
||||
interface SourceLike {
|
||||
source(): string | Buffer;
|
||||
}
|
||||
|
||||
export class CompatSource extends Source {
|
||||
constructor(sourceLike: SourceLike);
|
||||
|
||||
static from(sourceLike: SourceLike): Source;
|
||||
}
|
||||
}
|
||||
|
||||
declare module "browserslist" {
|
||||
function browserslist(query: string): string[] | undefined;
|
||||
namespace browserslist {
|
||||
export function loadConfig(
|
||||
options:
|
||||
| {
|
||||
config: string;
|
||||
env?: string;
|
||||
}
|
||||
| {
|
||||
path: string;
|
||||
env?: string;
|
||||
}
|
||||
): string | undefined;
|
||||
export function findConfig(path: string): Record<string, string[]>;
|
||||
}
|
||||
export = browserslist;
|
||||
export {
|
||||
SourceLike,
|
||||
RawSourceMap,
|
||||
MapOptions,
|
||||
Source,
|
||||
RawSource,
|
||||
OriginalSource,
|
||||
ReplaceSource,
|
||||
SourceMapSource,
|
||||
ConcatSource,
|
||||
PrefixSource,
|
||||
CachedSource,
|
||||
SizeOnlySource,
|
||||
CompatSource
|
||||
} from "webpack-sources/types";
|
||||
}
|
||||
|
||||
declare module "json-parse-even-better-errors" {
|
||||
function parseJson(text: string, reviver?: (this: any, key: string, value: any) => any, context?: number): any;
|
||||
function parseJson(
|
||||
text: string,
|
||||
reviver?: (this: any, key: string, value: any) => any,
|
||||
context?: number
|
||||
): any;
|
||||
export = parseJson;
|
||||
}
|
||||
|
||||
// TODO remove that when @types/estree is updated
|
||||
interface ImportAttributeNode {
|
||||
type: "ImportAttribute";
|
||||
key: import("estree").Identifier | import("estree").Literal;
|
||||
value: import("estree").Literal;
|
||||
}
|
||||
|
||||
type TODO = any;
|
||||
|
||||
type RecursiveArrayOrRecord<T> =
|
||||
| { [index: string]: RecursiveArrayOrRecord<T> }
|
||||
| Array<RecursiveArrayOrRecord<T>>
|
||||
| T;
|
||||
|
||||
declare module "loader-runner" {
|
||||
export function getContext(resource: string): string;
|
||||
export function runLoaders(
|
||||
options: any,
|
||||
callback: (err: Error | null, result: any) => void
|
||||
): void;
|
||||
}
|
||||
|
||||
declare module "watchpack" {
|
||||
class Watchpack {
|
||||
aggregatedChanges: Set<string>;
|
||||
aggregatedRemovals: Set<string>;
|
||||
constructor(options: import("./declarations/WebpackOptions").WatchOptions);
|
||||
once(eventName: string, callback: any): void;
|
||||
watch(options: any): void;
|
||||
collectTimeInfoEntries(
|
||||
fileTimeInfoEntries: Map<string, number>,
|
||||
contextTimeInfoEntries: Map<string, number>
|
||||
): void;
|
||||
pause(): void;
|
||||
close(): void;
|
||||
}
|
||||
export = Watchpack;
|
||||
}
|
||||
|
||||
declare module "eslint-scope/lib/referencer" {
|
||||
type Property = import("estree").Property;
|
||||
type PropertyDefinition = import("estree").PropertyDefinition;
|
||||
|
||||
class Referencer {
|
||||
Property(node: PropertyDefinition | Property): void;
|
||||
PropertyDefinition(node: PropertyDefinition): void;
|
||||
}
|
||||
export = Referencer;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
declare module "*.json";
|
||||
declare module "mini-css-extract-plugin";
|
||||
|
||||
type Env = Record<string, any>;
|
||||
type TestOptions = { testPath: string; srcPath: string };
|
||||
|
||||
declare namespace jest {
|
||||
interface Matchers<R> {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import type { SourceMap } from "../lib/NormalModule";
|
||||
import type { RawSourceMap } from "../lib/NormalModule";
|
||||
import type Module from "../lib/Module";
|
||||
import type { validate } from "schema-utils";
|
||||
import type { AssetInfo } from "../lib/Compilation";
|
||||
import type { ResolveOptionsWithDependencyType } from "../lib/ResolverFactory";
|
||||
|
@ -9,11 +10,18 @@ import type Hash from "../lib/util/Hash";
|
|||
import type { InputFileSystem } from "../lib/util/fs";
|
||||
import type { Logger } from "../lib/logging/Logger";
|
||||
import type {
|
||||
ImportModuleOptions,
|
||||
ImportModuleCallback,
|
||||
ImportModuleOptions
|
||||
ExecuteModuleExports
|
||||
} from "../lib/dependencies/LoaderPlugin";
|
||||
import type { Resolver } from "enhanced-resolve";
|
||||
import type { Environment } from "./WebpackOptions";
|
||||
import type {
|
||||
Environment,
|
||||
HashDigestLength,
|
||||
HashSalt,
|
||||
HashDigest,
|
||||
HashFunction
|
||||
} from "./WebpackOptions";
|
||||
|
||||
type ResolveCallback = Parameters<Resolver["resolve"]>[4];
|
||||
type Schema = Parameters<typeof validate>[0];
|
||||
|
@ -26,7 +34,7 @@ export interface NormalModuleLoaderContext<OptionsType> {
|
|||
emitWarning(warning: Error): void;
|
||||
emitError(error: Error): void;
|
||||
getLogger(name?: string): Logger;
|
||||
resolve(context: string, request: string, callback: ResolveCallback): any;
|
||||
resolve(context: string, request: string, callback: ResolveCallback): void;
|
||||
getResolve(
|
||||
options?: ResolveOptionsWithDependencyType
|
||||
): ((context: string, request: string, callback: ResolveCallback) => void) &
|
||||
|
@ -48,6 +56,10 @@ export interface NormalModuleLoaderContext<OptionsType> {
|
|||
sourceMap?: boolean;
|
||||
mode: "development" | "production" | "none";
|
||||
webpack?: boolean;
|
||||
hashFunction: HashFunction;
|
||||
hashDigest: HashDigest;
|
||||
hashDigestLength: HashDigestLength;
|
||||
hashSalt?: HashSalt;
|
||||
_module?: NormalModule;
|
||||
_compilation?: Compilation;
|
||||
_compiler?: Compiler;
|
||||
|
@ -70,18 +82,21 @@ export interface LoaderPluginLoaderContext {
|
|||
request: string,
|
||||
callback: (
|
||||
err: Error | null,
|
||||
source: string,
|
||||
sourceMap: any,
|
||||
module: NormalModule
|
||||
source?: string | Buffer,
|
||||
sourceMap?: object | null,
|
||||
module?: Module
|
||||
) => void
|
||||
): void;
|
||||
|
||||
importModule(
|
||||
request: string,
|
||||
options: ImportModuleOptions,
|
||||
options: ImportModuleOptions | undefined,
|
||||
callback: ImportModuleCallback
|
||||
): void;
|
||||
importModule(request: string, options?: ImportModuleOptions): Promise<any>;
|
||||
importModule(
|
||||
request: string,
|
||||
options?: ImportModuleOptions
|
||||
): Promise<ExecuteModuleExports>;
|
||||
}
|
||||
|
||||
/** The properties are added by https://github.com/webpack/loader-runner */
|
||||
|
@ -234,9 +249,9 @@ type AdditionalData = {
|
|||
};
|
||||
|
||||
type WebpackLoaderContextCallback = (
|
||||
err: Error | undefined | null,
|
||||
err: undefined | null | Error,
|
||||
content?: string | Buffer,
|
||||
sourceMap?: string | SourceMap,
|
||||
sourceMap?: null | string | RawSourceMap,
|
||||
additionalData?: AdditionalData
|
||||
) => void;
|
||||
|
||||
|
@ -255,14 +270,14 @@ type PitchLoaderDefinitionFunction<OptionsType = {}, ContextAdditions = {}> = (
|
|||
type LoaderDefinitionFunction<OptionsType = {}, ContextAdditions = {}> = (
|
||||
this: LoaderContext<OptionsType> & ContextAdditions,
|
||||
content: string,
|
||||
sourceMap?: string | SourceMap,
|
||||
sourceMap?: string | RawSourceMap,
|
||||
additionalData?: AdditionalData
|
||||
) => string | Buffer | Promise<string | Buffer> | void;
|
||||
|
||||
type RawLoaderDefinitionFunction<OptionsType = {}, ContextAdditions = {}> = (
|
||||
this: LoaderContext<OptionsType> & ContextAdditions,
|
||||
content: Buffer,
|
||||
sourceMap?: string | SourceMap,
|
||||
sourceMap?: string | RawSourceMap,
|
||||
additionalData?: AdditionalData
|
||||
) => string | Buffer | Promise<string | Buffer> | void;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export type BannerPluginArgument =
|
||||
|
@ -23,7 +23,7 @@ export type Rules = Rule[] | Rule;
|
|||
/**
|
||||
* Filtering rule as regex or string.
|
||||
*/
|
||||
export type Rule = RegExp | string;
|
||||
export type Rule = RegExp | string | ((str: string) => boolean);
|
||||
|
||||
export interface BannerPluginOptions {
|
||||
/**
|
||||
|
@ -51,7 +51,7 @@ export interface BannerPluginOptions {
|
|||
*/
|
||||
raw?: boolean;
|
||||
/**
|
||||
* Specifies the banner.
|
||||
* Specifies the stage when add a banner.
|
||||
*/
|
||||
stage?: number;
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface DllPluginOptions {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export type DllReferencePluginOptions =
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export type IgnorePluginOptions =
|
||||
|
@ -19,5 +19,5 @@ export type IgnorePluginOptions =
|
|||
/**
|
||||
* A filter function for resource and context.
|
||||
*/
|
||||
checkResource: (resource: string, context: string) => boolean;
|
||||
checkResource: import("../../lib/IgnorePlugin").CheckResourceFn;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
*/
|
||||
|
||||
export interface JsonModulesPluginGeneratorOptions {
|
||||
/**
|
||||
* Use `JSON.parse` when the JSON string is longer than 20 characters.
|
||||
*/
|
||||
JSONParse?: boolean;
|
||||
}
|
|
@ -5,6 +5,10 @@
|
|||
*/
|
||||
|
||||
export interface JsonModulesPluginParserOptions {
|
||||
/**
|
||||
* The depth of json dependency flagged as `exportInfo`.
|
||||
*/
|
||||
exportsDepth?: number;
|
||||
/**
|
||||
* Function that executes for a module source string and should return json-compatible data.
|
||||
*/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface LoaderOptionsPluginOptions {
|
||||
|
|
|
@ -1,18 +1,14 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export type ProgressPluginArgument = ProgressPluginOptions | HandlerFunction;
|
||||
/**
|
||||
* Function that executes for every progress step.
|
||||
*/
|
||||
export type HandlerFunction = (
|
||||
percentage: number,
|
||||
msg: string,
|
||||
...args: string[]
|
||||
) => void;
|
||||
export type HandlerFunction = import("../../lib/ProgressPlugin").HandlerFn;
|
||||
|
||||
/**
|
||||
* Options object for the ProgressPlugin.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -11,7 +11,7 @@ export type Rules = Rule[] | Rule;
|
|||
/**
|
||||
* Include source maps for modules based on their extension (defaults to .js and .css).
|
||||
*/
|
||||
export type Rule = RegExp | string;
|
||||
export type Rule = RegExp | string | ((str: string) => boolean);
|
||||
|
||||
export interface SourceMapDevToolPluginOptions {
|
||||
/**
|
||||
|
@ -20,14 +20,15 @@ export interface SourceMapDevToolPluginOptions {
|
|||
append?:
|
||||
| (false | null)
|
||||
| string
|
||||
| ((
|
||||
pathData: import("../../lib/Compilation").PathData,
|
||||
assetInfo?: import("../../lib/Compilation").AssetInfo
|
||||
) => string);
|
||||
| import("../../lib/TemplatedPathPlugin").TemplatePathFn;
|
||||
/**
|
||||
* Indicates whether column mappings should be used (defaults to true).
|
||||
*/
|
||||
columns?: boolean;
|
||||
/**
|
||||
* Emit debug IDs into source and SourceMap.
|
||||
*/
|
||||
debugIds?: boolean;
|
||||
/**
|
||||
* Exclude modules that match the given value from source map generation.
|
||||
*/
|
||||
|
@ -35,7 +36,9 @@ export interface SourceMapDevToolPluginOptions {
|
|||
/**
|
||||
* Generator string or function to create identifiers of modules for the 'sources' array in the SourceMap used only if 'moduleFilenameTemplate' would result in a conflict.
|
||||
*/
|
||||
fallbackModuleFilenameTemplate?: string | Function;
|
||||
fallbackModuleFilenameTemplate?:
|
||||
| string
|
||||
| import("../../lib/ModuleFilenameHelpers").ModuleFilenameTemplateFunction;
|
||||
/**
|
||||
* Path prefix to which the [file] placeholder is relative to.
|
||||
*/
|
||||
|
@ -55,7 +58,9 @@ export interface SourceMapDevToolPluginOptions {
|
|||
/**
|
||||
* Generator string or function to create identifiers of modules for the 'sources' array in the SourceMap.
|
||||
*/
|
||||
moduleFilenameTemplate?: string | Function;
|
||||
moduleFilenameTemplate?:
|
||||
| string
|
||||
| import("../../lib/ModuleFilenameHelpers").ModuleFilenameTemplateFunction;
|
||||
/**
|
||||
* Namespace prefix to allow multiple webpack roots in the devtools.
|
||||
*/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface WatchIgnorePluginOptions {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -27,6 +27,7 @@ export type ExternalsType =
|
|||
| "system"
|
||||
| "promise"
|
||||
| "import"
|
||||
| "module-import"
|
||||
| "script"
|
||||
| "node-commonjs";
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -84,6 +84,7 @@ export type ExternalsType =
|
|||
| "system"
|
||||
| "promise"
|
||||
| "import"
|
||||
| "module-import"
|
||||
| "script"
|
||||
| "node-commonjs";
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface ProfilingPluginOptions {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
* Algorithm used for generation the hash (see node.js crypto package).
|
||||
*/
|
||||
export type HashFunction = string | typeof import("../../lib/util/Hash");
|
||||
export type HashFunction = string | typeof import("../../../lib/util/Hash");
|
||||
|
||||
export interface HashedModuleIdsPluginOptions {
|
||||
/**
|
||||
|
@ -17,7 +17,19 @@ export interface HashedModuleIdsPluginOptions {
|
|||
/**
|
||||
* The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported.
|
||||
*/
|
||||
hashDigest?: "hex" | "latin1" | "base64";
|
||||
hashDigest?:
|
||||
| "base64"
|
||||
| "base64url"
|
||||
| "hex"
|
||||
| "binary"
|
||||
| "utf8"
|
||||
| "utf-8"
|
||||
| "utf16le"
|
||||
| "utf-16le"
|
||||
| "latin1"
|
||||
| "ascii"
|
||||
| "ucs2"
|
||||
| "ucs-2";
|
||||
/**
|
||||
* The prefix length of the hash digest to use, defaults to 4.
|
||||
*/
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface OccurrenceChunkIdsPluginOptions {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface OccurrenceModuleIdsPluginOptions {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface AggressiveSplittingPluginOptions {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface LimitChunkCountPluginOptions {
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface MergeDuplicateChunksPluginOptions {
|
||||
/**
|
||||
* Specifies the stage for merging duplicate chunks.
|
||||
*/
|
||||
stage?: number;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export interface MinChunkSizePluginOptions {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export type HttpUriPluginOptions = HttpUriOptions;
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
export type VirtualUrlPluginOptions = VirtualUrlOptions;
|
||||
/**
|
||||
* A virtual module can be a string, a function, or a VirtualModule object.
|
||||
*/
|
||||
export type VirtualModuleContent =
|
||||
| string
|
||||
| import("../../../lib/schemes/VirtualUrlPlugin").SourceFn
|
||||
| VirtualModule;
|
||||
|
||||
/**
|
||||
* Options for building virtual resources.
|
||||
*/
|
||||
export interface VirtualUrlOptions {
|
||||
/**
|
||||
* The virtual modules configuration.
|
||||
*/
|
||||
modules: {
|
||||
[k: string]: VirtualModuleContent;
|
||||
};
|
||||
/**
|
||||
* The URL scheme to use for virtual resources.
|
||||
*/
|
||||
scheme?: string;
|
||||
}
|
||||
/**
|
||||
* A virtual module definition.
|
||||
*/
|
||||
export interface VirtualModule {
|
||||
/**
|
||||
* The source function that provides the virtual content.
|
||||
*/
|
||||
source: import("../../../lib/schemes/VirtualUrlPlugin").SourceFn;
|
||||
/**
|
||||
* The module type.
|
||||
*/
|
||||
type?: string;
|
||||
/**
|
||||
* Optional version function or value for cache invalidation.
|
||||
*/
|
||||
version?:
|
||||
| true
|
||||
| string
|
||||
| import("../../../lib/schemes/VirtualUrlPlugin").VersionFn;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file was automatically generated.
|
||||
* DO NOT MODIFY BY HAND.
|
||||
* Run `yarn special-lint-fix` to update
|
||||
* Run `yarn fix:special` to update
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
201
eslint.config.js
|
@ -1,201 +0,0 @@
|
|||
const js = require("@eslint/js");
|
||||
const prettier = require("eslint-plugin-prettier");
|
||||
const n = require("eslint-plugin-n");
|
||||
const jest = require("eslint-plugin-jest");
|
||||
const jsdoc = require("eslint-plugin-jsdoc");
|
||||
const prettierConfig = require("eslint-config-prettier");
|
||||
const globals = require("globals");
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
ignores: [
|
||||
// Ignore some test files
|
||||
"test/**/*.*",
|
||||
"!test/*.js",
|
||||
"!test/**/webpack.config.js",
|
||||
"!test/**/test.config.js",
|
||||
"!test/**/test.filter.js",
|
||||
"test/cases/parsing/es2022/test.filter.js",
|
||||
"!test/**/errors.js",
|
||||
"!test/**/warnings.js",
|
||||
"!test/**/deprecations.js",
|
||||
"!test/helpers/*.*",
|
||||
|
||||
// Ignore some folders
|
||||
"benchmark",
|
||||
"coverage",
|
||||
|
||||
// Ignore generated files
|
||||
"*.check.js",
|
||||
|
||||
// Ignore not supported files
|
||||
"*.d.ts",
|
||||
|
||||
// Ignore precompiled schemas
|
||||
"schemas/**/*.check.js",
|
||||
|
||||
// Ignore some examples files
|
||||
"examples/**/*.js",
|
||||
"examples/**/*.mjs",
|
||||
"!examples/*/webpack.config.js"
|
||||
]
|
||||
},
|
||||
js.configs.recommended,
|
||||
n.configs["flat/recommended"],
|
||||
jsdoc.configs["flat/recommended-typescript-flavor-error"],
|
||||
prettierConfig,
|
||||
{
|
||||
languageOptions: {
|
||||
ecmaVersion: 2018,
|
||||
globals: {
|
||||
...globals.node,
|
||||
...globals.es2015,
|
||||
WebAssembly: true
|
||||
}
|
||||
},
|
||||
linterOptions: {
|
||||
reportUnusedDisableDirectives: true
|
||||
},
|
||||
plugins: {
|
||||
prettier
|
||||
},
|
||||
rules: {
|
||||
"prettier/prettier": "error",
|
||||
"no-template-curly-in-string": "error",
|
||||
"no-caller": "error",
|
||||
"no-control-regex": "off",
|
||||
yoda: "error",
|
||||
eqeqeq: "error",
|
||||
"eol-last": "error",
|
||||
"no-extra-bind": "warn",
|
||||
"no-process-exit": "warn",
|
||||
"no-use-before-define": "off",
|
||||
"no-unused-vars": [
|
||||
"error",
|
||||
{ caughtErrors: "none", args: "none", ignoreRestSiblings: true }
|
||||
],
|
||||
"no-inner-declarations": "error",
|
||||
"no-loop-func": "off",
|
||||
"n/no-missing-require": ["error", { allowModules: ["webpack"] }],
|
||||
"n/no-unsupported-features/node-builtins": [
|
||||
"error",
|
||||
{
|
||||
ignores: ["zlib.createBrotliCompress", "zlib.createBrotliDecompress"]
|
||||
}
|
||||
],
|
||||
"jsdoc/check-alignment": "off",
|
||||
"jsdoc/tag-lines": "off",
|
||||
"jsdoc/valid-types": "off",
|
||||
// TODO remove me after switch to typescript strict mode
|
||||
"jsdoc/require-jsdoc": "off",
|
||||
"jsdoc/require-returns-check": "off",
|
||||
"jsdoc/check-indentation": "error",
|
||||
"jsdoc/require-hyphen-before-param-description": ["error", "never"],
|
||||
"jsdoc/require-property-description": "off",
|
||||
// Disallow @ts-ignore directive. Use @ts-expect-error instead
|
||||
"no-warning-comments": [
|
||||
"error",
|
||||
{ terms: ["@ts-ignore"], location: "start" }
|
||||
]
|
||||
},
|
||||
settings: {
|
||||
jsdoc: {
|
||||
mode: "typescript",
|
||||
// supported tags https://github.com/microsoft/TypeScript-wiki/blob/master/JSDoc-support-in-JavaScript.md
|
||||
tagNamePreference: {
|
||||
...["implements", "const", "memberof", "yields"].reduce(
|
||||
(acc, tag) => {
|
||||
acc[tag] = {
|
||||
message: `@${tag} currently not supported in TypeScript`
|
||||
};
|
||||
return acc;
|
||||
},
|
||||
{}
|
||||
),
|
||||
extends: "extends",
|
||||
return: "returns",
|
||||
constructor: "constructor",
|
||||
prop: "property",
|
||||
arg: "param",
|
||||
augments: "extends",
|
||||
description: false,
|
||||
desc: false,
|
||||
inheritdoc: false,
|
||||
class: "constructor"
|
||||
},
|
||||
overrideReplacesDocs: false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["bin/**/*.js"],
|
||||
// Allow to use `dynamic` import
|
||||
languageOptions: {
|
||||
ecmaVersion: 2020
|
||||
},
|
||||
rules: {
|
||||
"n/no-unsupported-features/es-syntax": [
|
||||
"error",
|
||||
{
|
||||
ignores: ["hashbang", "dynamic-import"]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["lib/**/*.runtime.js", "hot/*.js"],
|
||||
languageOptions: {
|
||||
ecmaVersion: 5,
|
||||
globals: {
|
||||
...globals.browser,
|
||||
...globals.es5
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["tooling/**/*.js"],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2020,
|
||||
globals: {
|
||||
...globals.es2015
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
...jest.configs["flat/recommended"],
|
||||
files: ["test/**/*.js"],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2020,
|
||||
globals: {
|
||||
...globals.jest,
|
||||
nsObj: false
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
...jest.configs["flat/recommended"].rules,
|
||||
"jest/no-standalone-expect": "off",
|
||||
"jest/valid-title": [
|
||||
"error",
|
||||
{
|
||||
ignoreTypeOfDescribeName: true,
|
||||
ignoreTypeOfTestName: true
|
||||
}
|
||||
],
|
||||
"jest/no-done-callback": "off",
|
||||
"jest/expect-expect": "off",
|
||||
"jest/no-conditional-expect": "off",
|
||||
"n/no-unsupported-features/node-builtins": [
|
||||
"error",
|
||||
{
|
||||
allowExperimental: true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["examples/**/*.js"],
|
||||
rules: {
|
||||
"n/no-missing-require": "off"
|
||||
}
|
||||
}
|
||||
];
|
|
@ -0,0 +1,226 @@
|
|||
import { defineConfig, globalIgnores } from "eslint/config";
|
||||
import config from "eslint-config-webpack";
|
||||
import configs from "eslint-config-webpack/configs.js";
|
||||
import globals from "globals";
|
||||
|
||||
export default defineConfig([
|
||||
globalIgnores([
|
||||
// Ignore some test files
|
||||
"test/**/*.*",
|
||||
"!test/*.js",
|
||||
"!test/*.cjs",
|
||||
"!test/*.mjs",
|
||||
"!test/**/webpack.config.js",
|
||||
"!test/**/test.config.js",
|
||||
"!test/**/test.filter.js",
|
||||
"test/cases/parsing/es2022/test.filter.js",
|
||||
"!test/**/errors.js",
|
||||
"!test/**/warnings.js",
|
||||
"!test/**/deprecations.js",
|
||||
"!test/**/infrastructure-log.js",
|
||||
"!test/helpers/*.*",
|
||||
"!test/benchmarkCases/**/*.mjs",
|
||||
"!test/_helpers/**/*.mjs",
|
||||
"!test/runner/*.js",
|
||||
"test/js/**/*.*",
|
||||
|
||||
// TODO fix me
|
||||
// This is not exactly typescript
|
||||
"assembly/**/*.ts",
|
||||
|
||||
// Ignore some folders
|
||||
"benchmark",
|
||||
"coverage",
|
||||
|
||||
// Ignore generated files
|
||||
"*.check.js",
|
||||
|
||||
// Ignore not supported files
|
||||
"*.d.ts",
|
||||
|
||||
// Ignore precompiled schemas
|
||||
"schemas/**/*.check.js",
|
||||
|
||||
// Auto generation
|
||||
"lib/util/semver.js",
|
||||
|
||||
// Ignore some examples files
|
||||
"examples/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,md}",
|
||||
"!examples/*/webpack.config.js"
|
||||
]),
|
||||
{
|
||||
ignores: ["lib/**/*.runtime.js", "hot/*.js"],
|
||||
extends: [config],
|
||||
rules: {
|
||||
// Too noise
|
||||
"jsdoc/require-property-description": "off",
|
||||
// We have helpers for the default configuration
|
||||
"new-cap": [
|
||||
"error",
|
||||
{
|
||||
newIsCapExceptions: [],
|
||||
capIsNewExceptions: ["A", "F", "D", "MODULES_GROUPERS"]
|
||||
}
|
||||
],
|
||||
// Revisit it in future
|
||||
"id-length": "off",
|
||||
// Revisit it in future
|
||||
"no-use-before-define": "off",
|
||||
|
||||
// TODO We need allow to have `_arg` in tooling and use `after-used` value for `args`
|
||||
"no-unused-vars": [
|
||||
"error",
|
||||
{
|
||||
vars: "all",
|
||||
varsIgnorePattern: "^_",
|
||||
args: "none",
|
||||
argsIgnorePattern: "^_",
|
||||
caughtErrors: "all",
|
||||
caughtErrorsIgnorePattern: "^_",
|
||||
destructuredArrayIgnorePattern: "^_",
|
||||
ignoreRestSiblings: true,
|
||||
ignoreClassWithStaticInitBlock: false,
|
||||
reportUsedIgnorePattern: false
|
||||
}
|
||||
],
|
||||
// TODO enable me in future
|
||||
"prefer-destructuring": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["lib/**/*.js"],
|
||||
extends: [configs["webpack/special"]]
|
||||
},
|
||||
{
|
||||
files: ["bin/**/*.js"],
|
||||
// Allow to use `dynamic` import
|
||||
languageOptions: {
|
||||
ecmaVersion: 2020
|
||||
},
|
||||
rules: {
|
||||
"no-console": "off",
|
||||
|
||||
// Allow to use `dynamic` import and hashbang
|
||||
"n/no-unsupported-features/es-syntax": [
|
||||
"error",
|
||||
{
|
||||
ignores: ["hashbang", "dynamic-import"]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["lib/**/*.runtime.js", "hot/*.js"],
|
||||
extends: [configs["javascript/es5"]],
|
||||
languageOptions: {
|
||||
sourceType: "commonjs",
|
||||
globals: {
|
||||
...globals.browser,
|
||||
...globals.es5,
|
||||
Promise: false,
|
||||
Map: false,
|
||||
Set: false,
|
||||
process: false
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
strict: "off",
|
||||
|
||||
"block-scoped-var": "off",
|
||||
|
||||
// Allow logging
|
||||
"no-console": "off",
|
||||
|
||||
// We replace `$VAR$` on real code
|
||||
"no-unused-vars": "off",
|
||||
"no-undef-init": "off",
|
||||
|
||||
"id-length": "off",
|
||||
|
||||
"jsdoc/require-jsdoc": "off",
|
||||
|
||||
// Revisit it in future
|
||||
"no-use-before-define": "off",
|
||||
"func-names": "off",
|
||||
"func-style": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["test/**/*.js"],
|
||||
rules: {
|
||||
// Some our tests contain `package.json` without `engines`, but tests should work on Node.js@10, so let's disable it
|
||||
"n/prefer-node-protocol": "off",
|
||||
|
||||
// No need here, we have custom test logic, so except can be placed in different places
|
||||
"jest/no-standalone-expect": "off",
|
||||
|
||||
// We have a lot of custom tests
|
||||
"jest/expect-expect": "off",
|
||||
|
||||
// We have a lot of custom tests
|
||||
"jest/no-confusing-set-timeout": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["test/helpers/**/*.{js,cjs,mjs}"],
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.jest
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
"no-eval": "off",
|
||||
"no-console": "off",
|
||||
|
||||
// Allow to use any builtins, syntax and node API in tests
|
||||
"n/no-unsupported-features/es-builtins": "off",
|
||||
"n/no-unsupported-features/es-syntax": "off",
|
||||
"n/no-unsupported-features/node-builtins": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["test/**/*.mjs"],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2022
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["setup/**/*.js", "tooling/**/*.js"],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2022
|
||||
},
|
||||
rules: {
|
||||
"no-console": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ["test/Compiler-filesystem-caching.test.js"],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2022
|
||||
}
|
||||
},
|
||||
{
|
||||
files: [
|
||||
"test/configCases/{dll-plugin-entry,dll-plugin-side-effects,dll-plugin}/**/webpack.config.js",
|
||||
"test/NodeTemplatePlugin.test.js",
|
||||
"test/PersistentCaching.test.js"
|
||||
],
|
||||
rules: {
|
||||
"import/extensions": "off",
|
||||
"import/no-unresolved": "off"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
files: ["examples/**/*.js"],
|
||||
rules: {
|
||||
// For examples purposes
|
||||
"n/no-unsupported-features/es-builtins": "off",
|
||||
"n/no-unsupported-features/es-syntax": "off",
|
||||
"n/no-unsupported-features/node-builtins": "off",
|
||||
|
||||
"import/extensions": "off",
|
||||
"import/no-unresolved": "off"
|
||||
}
|
||||
}
|
||||
]);
|
|
@ -29,8 +29,10 @@ a big file...
|
|||
# webpack.config.js
|
||||
|
||||
```javascript
|
||||
var path = require("path");
|
||||
var { AggressiveMergingPlugin } = require("../../").optimize;
|
||||
"use strict";
|
||||
|
||||
const path = require("path");
|
||||
const { AggressiveMergingPlugin } = require("../..").optimize;
|
||||
|
||||
module.exports = {
|
||||
// mode: "development" || "production",
|
||||
|
@ -60,24 +62,12 @@ module.exports = {
|
|||
## Unoptimized
|
||||
|
||||
```
|
||||
asset pageA.bundle.js 8.9 KiB [emitted] (name: pageA)
|
||||
asset pageB.bundle.js 8.9 KiB [emitted] (name: pageB)
|
||||
asset pageC.bundle.js 8.9 KiB [emitted] (name: pageC)
|
||||
asset 456.chunk.js 6.28 KiB [emitted]
|
||||
asset 394.chunk.js 606 bytes [emitted]
|
||||
chunk (runtime: pageB) pageB.bundle.js (pageB) 69 bytes (javascript) 4.97 KiB (runtime) [entry] [rendered]
|
||||
> ./pageB pageB
|
||||
runtime modules 4.97 KiB 6 modules
|
||||
./pageB.js 69 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./pageB pageB
|
||||
chunk (runtime: pageC) pageC.bundle.js (pageC) 68 bytes (javascript) 4.97 KiB (runtime) [entry] [rendered]
|
||||
> ./pageC pageC
|
||||
runtime modules 4.97 KiB 6 modules
|
||||
./pageC.js 68 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./pageC pageC
|
||||
chunk (runtime: pageC) 394.chunk.js 42 bytes [rendered]
|
||||
asset pageA.bundle.js 8.81 KiB [emitted] (name: pageA)
|
||||
asset pageB.bundle.js 8.81 KiB [emitted] (name: pageB)
|
||||
asset pageC.bundle.js 8.81 KiB [emitted] (name: pageC)
|
||||
asset 531.chunk.js 6.28 KiB [emitted]
|
||||
asset 78.chunk.js 605 bytes [emitted]
|
||||
chunk (runtime: pageC) 78.chunk.js 42 bytes [rendered]
|
||||
> ./a ./pageC.js 1:0-3:2
|
||||
./a.js 21 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
|
@ -89,13 +79,19 @@ chunk (runtime: pageC) 394.chunk.js 42 bytes [rendered]
|
|||
cjs self exports reference ./b.js 1:0-14
|
||||
cjs require ./b ./pageB.js 2:8-22
|
||||
cjs require ./b ./pageC.js 2:17-31
|
||||
chunk (runtime: pageA) pageA.bundle.js (pageA) 69 bytes (javascript) 4.97 KiB (runtime) [entry] [rendered]
|
||||
chunk (runtime: pageB) pageB.bundle.js (pageB) 69 bytes (javascript) 4.91 KiB (runtime) [entry] [rendered]
|
||||
> ./pageB pageB
|
||||
runtime modules 4.91 KiB 6 modules
|
||||
./pageB.js 69 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./pageB pageB
|
||||
chunk (runtime: pageA) pageA.bundle.js (pageA) 69 bytes (javascript) 4.91 KiB (runtime) [entry] [rendered]
|
||||
> ./pageA pageA
|
||||
runtime modules 4.97 KiB 6 modules
|
||||
runtime modules 4.91 KiB 6 modules
|
||||
./pageA.js 69 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./pageA pageA
|
||||
chunk (runtime: pageA, pageB) 456.chunk.js 5.45 KiB [rendered]
|
||||
chunk (runtime: pageA, pageB) 531.chunk.js 5.45 KiB [rendered]
|
||||
> ./common ./pageA.js 1:0-3:2
|
||||
> ./common ./pageB.js 1:0-3:2
|
||||
./a.js 21 bytes [built] [code generated]
|
||||
|
@ -113,30 +109,24 @@ chunk (runtime: pageA, pageB) 456.chunk.js 5.45 KiB [rendered]
|
|||
cjs self exports reference ./common.js 1:0-14
|
||||
amd require ./common ./pageA.js 1:0-3:2
|
||||
amd require ./common ./pageB.js 1:0-3:2
|
||||
webpack 5.78.0 compiled successfully
|
||||
chunk (runtime: pageC) pageC.bundle.js (pageC) 68 bytes (javascript) 4.91 KiB (runtime) [entry] [rendered]
|
||||
> ./pageC pageC
|
||||
runtime modules 4.91 KiB 6 modules
|
||||
./pageC.js 68 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./pageC pageC
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
||||
## Production mode
|
||||
|
||||
```
|
||||
asset pageC.bundle.js 1.74 KiB [emitted] [minimized] (name: pageC)
|
||||
asset pageA.bundle.js 1.73 KiB [emitted] [minimized] (name: pageA)
|
||||
asset pageB.bundle.js 1.73 KiB [emitted] [minimized] (name: pageB)
|
||||
asset 456.chunk.js 155 bytes [emitted] [minimized]
|
||||
asset 394.chunk.js 104 bytes [emitted] [minimized]
|
||||
chunk (runtime: pageB) pageB.bundle.js (pageB) 69 bytes (javascript) 4.97 KiB (runtime) [entry] [rendered]
|
||||
> ./pageB pageB
|
||||
runtime modules 4.97 KiB 6 modules
|
||||
./pageB.js 69 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./pageB pageB
|
||||
chunk (runtime: pageC) pageC.bundle.js (pageC) 68 bytes (javascript) 4.97 KiB (runtime) [entry] [rendered]
|
||||
> ./pageC pageC
|
||||
runtime modules 4.97 KiB 6 modules
|
||||
./pageC.js 68 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./pageC pageC
|
||||
chunk (runtime: pageC) 394.chunk.js 42 bytes [rendered]
|
||||
asset pageC.bundle.js 1.71 KiB [emitted] [minimized] (name: pageC)
|
||||
asset pageA.bundle.js 1.7 KiB [emitted] [minimized] (name: pageA)
|
||||
asset pageB.bundle.js 1.7 KiB [emitted] [minimized] (name: pageB)
|
||||
asset 531.chunk.js 154 bytes [emitted] [minimized]
|
||||
asset 78.chunk.js 103 bytes [emitted] [minimized]
|
||||
chunk (runtime: pageC) 78.chunk.js 42 bytes [rendered]
|
||||
> ./a ./pageC.js 1:0-3:2
|
||||
./a.js 21 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
|
@ -148,13 +138,19 @@ chunk (runtime: pageC) 394.chunk.js 42 bytes [rendered]
|
|||
cjs self exports reference ./b.js 1:0-14
|
||||
cjs require ./b ./pageB.js 2:8-22
|
||||
cjs require ./b ./pageC.js 2:17-31
|
||||
chunk (runtime: pageA) pageA.bundle.js (pageA) 69 bytes (javascript) 4.97 KiB (runtime) [entry] [rendered]
|
||||
chunk (runtime: pageB) pageB.bundle.js (pageB) 69 bytes (javascript) 4.91 KiB (runtime) [entry] [rendered]
|
||||
> ./pageB pageB
|
||||
runtime modules 4.91 KiB 6 modules
|
||||
./pageB.js 69 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./pageB pageB
|
||||
chunk (runtime: pageA) pageA.bundle.js (pageA) 69 bytes (javascript) 4.91 KiB (runtime) [entry] [rendered]
|
||||
> ./pageA pageA
|
||||
runtime modules 4.97 KiB 6 modules
|
||||
runtime modules 4.91 KiB 6 modules
|
||||
./pageA.js 69 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./pageA pageA
|
||||
chunk (runtime: pageA, pageB) 456.chunk.js 5.45 KiB [rendered]
|
||||
chunk (runtime: pageA, pageB) 531.chunk.js 5.45 KiB [rendered]
|
||||
> ./common ./pageA.js 1:0-3:2
|
||||
> ./common ./pageB.js 1:0-3:2
|
||||
./a.js 21 bytes [built] [code generated]
|
||||
|
@ -172,5 +168,11 @@ chunk (runtime: pageA, pageB) 456.chunk.js 5.45 KiB [rendered]
|
|||
cjs self exports reference ./common.js 1:0-14
|
||||
amd require ./common ./pageA.js 1:0-3:2
|
||||
amd require ./common ./pageB.js 1:0-3:2
|
||||
webpack 5.78.0 compiled successfully
|
||||
chunk (runtime: pageC) pageC.bundle.js (pageC) 68 bytes (javascript) 4.91 KiB (runtime) [entry] [rendered]
|
||||
> ./pageC pageC
|
||||
runtime modules 4.91 KiB 6 modules
|
||||
./pageC.js 68 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./pageC pageC
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
var path = require("path");
|
||||
var { AggressiveMergingPlugin } = require("../..").optimize;
|
||||
"use strict";
|
||||
|
||||
const path = require("path");
|
||||
const { AggressiveMergingPlugin } = require("../..").optimize;
|
||||
|
||||
module.exports = {
|
||||
// mode: "development" || "production",
|
||||
|
|
|
@ -1,221 +0,0 @@
|
|||
This is a very simple example that shows the usage of the asset module type.
|
||||
|
||||
Files can be imported like other modules without file-loader.
|
||||
|
||||
# example.js
|
||||
|
||||
```javascript
|
||||
import png from "./images/file.png";
|
||||
import jpg from "./images/file.jpg";
|
||||
import svg from "./images/file.svg";
|
||||
|
||||
const container = document.createElement("div");
|
||||
Object.assign(container.style, {
|
||||
display: "flex",
|
||||
justifyContent: "center"
|
||||
});
|
||||
document.body.appendChild(container);
|
||||
|
||||
function createImageElement(title, src) {
|
||||
const div = document.createElement("div");
|
||||
div.style.textAlign = "center";
|
||||
|
||||
const h2 = document.createElement("h2");
|
||||
h2.textContent = title;
|
||||
div.appendChild(h2);
|
||||
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", src);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
[png, jpg, svg].forEach(src => {
|
||||
createImageElement(src.split(".").pop(), src);
|
||||
});
|
||||
```
|
||||
|
||||
# webpack.config.js
|
||||
|
||||
```javascript
|
||||
module.exports = {
|
||||
output: {
|
||||
assetModuleFilename: "images/[hash][ext]"
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.(png|jpg|svg)$/,
|
||||
type: "asset"
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
# js/output.js
|
||||
|
||||
```javascript
|
||||
/******/ (() => { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
/******/ var __webpack_modules__ = ([
|
||||
/* 0 */,
|
||||
/* 1 */
|
||||
/*!*************************!*\
|
||||
!*** ./images/file.png ***!
|
||||
\*************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: __webpack_require__.p, module, __webpack_require__.* */
|
||||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||||
|
||||
module.exports = __webpack_require__.p + "images/89a353e9c515885abd8e.png";
|
||||
|
||||
/***/ }),
|
||||
/* 2 */
|
||||
/*!*************************!*\
|
||||
!*** ./images/file.jpg ***!
|
||||
\*************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: module */
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAA...4CD/9M//Z";
|
||||
|
||||
/***/ }),
|
||||
/* 3 */
|
||||
/*!*************************!*\
|
||||
!*** ./images/file.svg ***!
|
||||
\*************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: module */
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo...vc3ZnPgo=";
|
||||
|
||||
/***/ })
|
||||
/******/ ]);
|
||||
```
|
||||
|
||||
<details><summary><code>/* webpack runtime code */</code></summary>
|
||||
|
||||
``` js
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ (() => {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = (exports) => {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/publicPath */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.p = "dist/";
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
``` js
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
/*!********************!*\
|
||||
!*** ./example.js ***!
|
||||
\********************/
|
||||
/*! namespace exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _images_file_png__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./images/file.png */ 1);
|
||||
/* harmony import */ var _images_file_jpg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./images/file.jpg */ 2);
|
||||
/* harmony import */ var _images_file_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./images/file.svg */ 3);
|
||||
|
||||
|
||||
|
||||
|
||||
const container = document.createElement("div");
|
||||
Object.assign(container.style, {
|
||||
display: "flex",
|
||||
justifyContent: "center"
|
||||
});
|
||||
document.body.appendChild(container);
|
||||
|
||||
function createImageElement(title, src) {
|
||||
const div = document.createElement("div");
|
||||
div.style.textAlign = "center";
|
||||
|
||||
const h2 = document.createElement("h2");
|
||||
h2.textContent = title;
|
||||
div.appendChild(h2);
|
||||
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", src);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
[_images_file_png__WEBPACK_IMPORTED_MODULE_0__, _images_file_jpg__WEBPACK_IMPORTED_MODULE_1__, _images_file_svg__WEBPACK_IMPORTED_MODULE_2__].forEach(src => {
|
||||
createImageElement(src.split(".").pop(), src);
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
```
|
||||
|
||||
# Info
|
||||
|
||||
## webpack output
|
||||
|
||||
```
|
||||
asset images/89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: images/file.png] (auxiliary name: main)
|
||||
asset output.js 13 KiB [emitted] (name: main)
|
||||
chunk (runtime: main) output.js (main) 9.58 KiB (javascript) 14.6 KiB (asset) 306 bytes (runtime) [entry] [rendered]
|
||||
> ./example.js main
|
||||
dependent modules 8.86 KiB (javascript) 14.6 KiB (asset) [dependent] 3 modules
|
||||
runtime modules 306 bytes 2 modules
|
||||
./example.js 742 bytes [built] [code generated]
|
||||
[no exports]
|
||||
[used exports unknown]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
```
|
|
@ -1,30 +0,0 @@
|
|||
import png from "./images/file.png";
|
||||
import jpg from "./images/file.jpg";
|
||||
import svg from "./images/file.svg";
|
||||
|
||||
const container = document.createElement("div");
|
||||
Object.assign(container.style, {
|
||||
display: "flex",
|
||||
justifyContent: "center"
|
||||
});
|
||||
document.body.appendChild(container);
|
||||
|
||||
function createImageElement(title, src) {
|
||||
const div = document.createElement("div");
|
||||
div.style.textAlign = "center";
|
||||
|
||||
const h2 = document.createElement("h2");
|
||||
h2.textContent = title;
|
||||
div.appendChild(h2);
|
||||
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", src);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
[png, jpg, svg].forEach(src => {
|
||||
createImageElement(src.split(".").pop(), src);
|
||||
});
|
|
@ -38,6 +38,8 @@ function createImageElement(title, src) {
|
|||
# webpack.config.js
|
||||
|
||||
```javascript
|
||||
"use strict";
|
||||
|
||||
const svgToMiniDataURI = require("mini-svg-data-uri");
|
||||
|
||||
module.exports = {
|
||||
|
@ -137,7 +139,7 @@ module.exports = "data:image/svg+xml,%3csvg xmlns='http://www.w3.or...3c/svg%3e"
|
|||
|
||||
``` js
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
/*!********************!*\
|
||||
!*** ./example.js ***!
|
||||
|
@ -196,5 +198,5 @@ chunk (runtime: main) output.js (main) 1.54 KiB (javascript) 274 bytes (runtime)
|
|||
[no exports]
|
||||
[used exports unknown]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 656 B |
|
@ -1,3 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
const svgToMiniDataURI = require("mini-svg-data-uri");
|
||||
|
||||
module.exports = {
|
|
@ -0,0 +1,488 @@
|
|||
This is a very simple example that shows the usage of the asset module type.
|
||||
|
||||
Files can be imported like other modules without file-loader.
|
||||
|
||||
# example.js
|
||||
|
||||
```javascript
|
||||
// There are different ways to use files:
|
||||
|
||||
// 1. Using `import something from "./file.ext";`
|
||||
|
||||
// return URLs or Data URL, depends on your configuration
|
||||
import png from "./images/file.png";
|
||||
import jpg from "./images/file.jpg";
|
||||
import svg from "./images/file.svg";
|
||||
|
||||
// 2. Using `import something from "./file.ext"; with { type: "text" }` or `import something from "./file.ext"; with { type: "bytes" }`
|
||||
// You don't need extra options in your configuration for these imports, they work out of the box
|
||||
|
||||
// returns the content as text
|
||||
import text from "./content/file.text" with { type: "text" };
|
||||
|
||||
// returns the content as `Uint8Array`
|
||||
import bytes from "./content/bytes.svg" with { type: "bytes" };
|
||||
|
||||
// 3. Using `new URL("./file.ext", import.meta.url);`
|
||||
// You don't need extra options in your configuration for `new URL(...)` construction, they work out of the box
|
||||
const url = new URL("./images/url.svg", import.meta.url);
|
||||
|
||||
const container = document.createElement("div");
|
||||
|
||||
Object.assign(container.style, {
|
||||
display: "flex",
|
||||
flexWrap: "wrap",
|
||||
justifyContent: "center"
|
||||
});
|
||||
document.body.appendChild(container);
|
||||
|
||||
function createImageElement(div, data) {
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", data);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
function createTextElement(div, data) {
|
||||
const context = document.createElement("div");
|
||||
context.textContent = data;
|
||||
div.appendChild(context);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
function createBlobElement(div, data) {
|
||||
const blob = new Blob([data], { type: 'image/svg+xml' });
|
||||
const blobUrl = URL.createObjectURL(blob);
|
||||
|
||||
const img = document.createElement("img");
|
||||
|
||||
img.setAttribute("src", blobUrl);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
|
||||
img.addEventListener(
|
||||
'load',
|
||||
() => { URL.revokeObjectURL(blobUrl) },
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
|
||||
const files = [
|
||||
{
|
||||
title: "import png from \"./images/file.png\";",
|
||||
data: png,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import jpg from \"./images/file.jpg\";",
|
||||
data: jpg,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import svg from \"./images/file.svg\";",
|
||||
data: svg,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import text from \"./content/file.text\" with { type: \"text\" };",
|
||||
data: text,
|
||||
render: createTextElement,
|
||||
},
|
||||
{
|
||||
title: "import bytes from \"./content/file.text\" with { type: \"bytes\" };",
|
||||
data: bytes,
|
||||
render: createBlobElement,
|
||||
},
|
||||
{
|
||||
title: "new URL(\"./url.svg\", import.meta.url);",
|
||||
data: url,
|
||||
render: createImageElement,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
function render(title, data, fn) {
|
||||
const div = document.createElement("div");
|
||||
div.style.textAlign = "center";
|
||||
div.style.width = "50%";
|
||||
|
||||
const h2 = document.createElement("h2");
|
||||
h2.textContent = title;
|
||||
div.appendChild(h2);
|
||||
|
||||
fn(div, data)
|
||||
}
|
||||
|
||||
files.forEach(item => {
|
||||
render(item.title, item.data, item.render);
|
||||
});
|
||||
```
|
||||
|
||||
# webpack.config.js
|
||||
|
||||
```javascript
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
output: {
|
||||
assetModuleFilename: "images/[hash][ext]"
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /file\.(png|jpg|svg)$/,
|
||||
type: "asset"
|
||||
},
|
||||
]
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
# js/output.js
|
||||
|
||||
```javascript
|
||||
/******/ (() => { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
/******/ var __webpack_modules__ = ([
|
||||
/* 0 */,
|
||||
/* 1 */
|
||||
/*!*************************!*\
|
||||
!*** ./images/file.png ***!
|
||||
\*************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: __webpack_require__.p, module, __webpack_require__.* */
|
||||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||||
|
||||
module.exports = __webpack_require__.p + "images/89a353e9c515885abd8e.png";
|
||||
|
||||
/***/ }),
|
||||
/* 2 */
|
||||
/*!*************************!*\
|
||||
!*** ./images/file.jpg ***!
|
||||
\*************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: module */
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAA...4CD/9M//Z";
|
||||
|
||||
/***/ }),
|
||||
/* 3 */
|
||||
/*!*************************!*\
|
||||
!*** ./images/file.svg ***!
|
||||
\*************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: module */
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo...vc3ZnPgo=";
|
||||
|
||||
/***/ }),
|
||||
/* 4 */
|
||||
/*!************************!*\
|
||||
!*** ./images/url.svg ***!
|
||||
\************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: __webpack_require__.p, module, __webpack_require__.* */
|
||||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||||
|
||||
module.exports = __webpack_require__.p + "images/afc10c70ed4ce2b33593.svg";
|
||||
|
||||
/***/ }),
|
||||
/* 5 */
|
||||
/*!***************************!*\
|
||||
!*** ./content/file.text ***!
|
||||
\***************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: module */
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = "a Ā 𐀀 文 🦄 Text\n";
|
||||
|
||||
/***/ }),
|
||||
/* 6 */
|
||||
/*!***************************!*\
|
||||
!*** ./content/bytes.svg ***!
|
||||
\***************************/
|
||||
/*! default exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: __webpack_require__.tb, module */
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = __webpack_require__.tb("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=");
|
||||
|
||||
/***/ })
|
||||
/******/ ]);
|
||||
```
|
||||
|
||||
<details><summary><code>/* webpack runtime code */</code></summary>
|
||||
|
||||
``` js
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = __webpack_modules__;
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ (() => {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = (exports) => {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/to binary */
|
||||
/******/ (() => {
|
||||
/******/ // define to binary helper
|
||||
/******/ __webpack_require__.tb = (() => {
|
||||
/******/ var table = new Uint8Array(128);
|
||||
/******/ for (var i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;
|
||||
/******/ return (base64) => {
|
||||
/******/ var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == '=') - (base64[n - 2] == '=')) * 3 / 4 | 0);
|
||||
/******/ for (var i = 0, j = 0; i < n;) {
|
||||
/******/ var c0 = table[base64.charCodeAt(i++)], c1 = table[base64.charCodeAt(i++)];
|
||||
/******/ var c2 = table[base64.charCodeAt(i++)], c3 = table[base64.charCodeAt(i++)];
|
||||
/******/ bytes[j++] = (c0 << 2) | (c1 >> 4);
|
||||
/******/ bytes[j++] = (c1 << 4) | (c2 >> 2);
|
||||
/******/ bytes[j++] = (c2 << 6) | c3;
|
||||
/******/ }
|
||||
/******/ return bytes
|
||||
/******/ }
|
||||
/******/ })();
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/publicPath */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.p = "dist/";
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/jsonp chunk loading */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;
|
||||
/******/
|
||||
/******/ // object to store loaded and loading chunks
|
||||
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
|
||||
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
|
||||
/******/ var installedChunks = {
|
||||
/******/ 0: 0
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // no chunk on demand loading
|
||||
/******/
|
||||
/******/ // no prefetching
|
||||
/******/
|
||||
/******/ // no preloaded
|
||||
/******/
|
||||
/******/ // no HMR
|
||||
/******/
|
||||
/******/ // no HMR manifest
|
||||
/******/
|
||||
/******/ // no on chunks loaded
|
||||
/******/
|
||||
/******/ // no jsonp function
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
``` js
|
||||
var __webpack_exports__ = {};
|
||||
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
/*!********************!*\
|
||||
!*** ./example.js ***!
|
||||
\********************/
|
||||
/*! namespace exports */
|
||||
/*! exports [not provided] [no usage info] */
|
||||
/*! runtime requirements: __webpack_require__, __webpack_require__.b, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _images_file_png__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./images/file.png */ 1);
|
||||
/* harmony import */ var _images_file_jpg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./images/file.jpg */ 2);
|
||||
/* harmony import */ var _images_file_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./images/file.svg */ 3);
|
||||
/* harmony import */ var _content_file_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./content/file.text */ 5);
|
||||
/* harmony import */ var _content_bytes_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./content/bytes.svg */ 6);
|
||||
// There are different ways to use files:
|
||||
|
||||
// 1. Using `import something from "./file.ext";`
|
||||
|
||||
// return URLs or Data URL, depends on your configuration
|
||||
|
||||
|
||||
|
||||
|
||||
// 2. Using `import something from "./file.ext"; with { type: "text" }` or `import something from "./file.ext"; with { type: "bytes" }`
|
||||
// You don't need extra options in your configuration for these imports, they work out of the box
|
||||
|
||||
// returns the content as text
|
||||
|
||||
|
||||
// returns the content as `Uint8Array`
|
||||
|
||||
|
||||
// 3. Using `new URL("./file.ext", import.meta.url);`
|
||||
// You don't need extra options in your configuration for `new URL(...)` construction, they work out of the box
|
||||
const url = new URL(/* asset import */ __webpack_require__(/*! ./images/url.svg */ 4), __webpack_require__.b);
|
||||
|
||||
const container = document.createElement("div");
|
||||
|
||||
Object.assign(container.style, {
|
||||
display: "flex",
|
||||
flexWrap: "wrap",
|
||||
justifyContent: "center"
|
||||
});
|
||||
document.body.appendChild(container);
|
||||
|
||||
function createImageElement(div, data) {
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", data);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
function createTextElement(div, data) {
|
||||
const context = document.createElement("div");
|
||||
context.textContent = data;
|
||||
div.appendChild(context);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
function createBlobElement(div, data) {
|
||||
const blob = new Blob([data], { type: 'image/svg+xml' });
|
||||
const blobUrl = URL.createObjectURL(blob);
|
||||
|
||||
const img = document.createElement("img");
|
||||
|
||||
img.setAttribute("src", blobUrl);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
|
||||
img.addEventListener(
|
||||
'load',
|
||||
() => { URL.revokeObjectURL(blobUrl) },
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
|
||||
const files = [
|
||||
{
|
||||
title: "import png from \"./images/file.png\";",
|
||||
data: _images_file_png__WEBPACK_IMPORTED_MODULE_0__,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import jpg from \"./images/file.jpg\";",
|
||||
data: _images_file_jpg__WEBPACK_IMPORTED_MODULE_1__,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import svg from \"./images/file.svg\";",
|
||||
data: _images_file_svg__WEBPACK_IMPORTED_MODULE_2__,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import text from \"./content/file.text\" with { type: \"text\" };",
|
||||
data: _content_file_text__WEBPACK_IMPORTED_MODULE_3__,
|
||||
render: createTextElement,
|
||||
},
|
||||
{
|
||||
title: "import bytes from \"./content/file.text\" with { type: \"bytes\" };",
|
||||
data: _content_bytes_svg__WEBPACK_IMPORTED_MODULE_4__,
|
||||
render: createBlobElement,
|
||||
},
|
||||
{
|
||||
title: "new URL(\"./url.svg\", import.meta.url);",
|
||||
data: url,
|
||||
render: createImageElement,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
function render(title, data, fn) {
|
||||
const div = document.createElement("div");
|
||||
div.style.textAlign = "center";
|
||||
div.style.width = "50%";
|
||||
|
||||
const h2 = document.createElement("h2");
|
||||
h2.textContent = title;
|
||||
div.appendChild(h2);
|
||||
|
||||
fn(div, data)
|
||||
}
|
||||
|
||||
files.forEach(item => {
|
||||
render(item.title, item.data, item.render);
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
```
|
||||
|
||||
# Info
|
||||
|
||||
## webpack output
|
||||
|
||||
```
|
||||
asset output.js 19.2 KiB [emitted] (name: main)
|
||||
asset images/89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: images/file.png] (auxiliary name: main)
|
||||
asset images/afc10c70ed4ce2b33593.svg 656 bytes [emitted] [immutable] [from: images/url.svg] (auxiliary name: main)
|
||||
chunk (runtime: main) output.js (main) 12.4 KiB (javascript) 15.2 KiB (asset) 1.48 KiB (runtime) [entry] [rendered]
|
||||
> ./example.js main
|
||||
dependent modules 9.59 KiB (javascript) 15.2 KiB (asset) [dependent] 6 modules
|
||||
runtime modules 1.48 KiB 5 modules
|
||||
./example.js 2.85 KiB [built] [code generated]
|
||||
[no exports]
|
||||
[used exports unknown]
|
||||
entry ./example.js main
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 656 B |
|
@ -0,0 +1 @@
|
|||
a Ā 𐀀 文 🦄 Text
|
|
@ -0,0 +1,116 @@
|
|||
// There are different ways to use files:
|
||||
|
||||
// 1. Using `import something from "./file.ext";`
|
||||
|
||||
// return URLs or Data URL, depends on your configuration
|
||||
import png from "./images/file.png";
|
||||
import jpg from "./images/file.jpg";
|
||||
import svg from "./images/file.svg";
|
||||
|
||||
// 2. Using `import something from "./file.ext"; with { type: "text" }` or `import something from "./file.ext"; with { type: "bytes" }`
|
||||
// You don't need extra options in your configuration for these imports, they work out of the box
|
||||
|
||||
// returns the content as text
|
||||
import text from "./content/file.text" with { type: "text" };
|
||||
|
||||
// returns the content as `Uint8Array`
|
||||
import bytes from "./content/bytes.svg" with { type: "bytes" };
|
||||
|
||||
// 3. Using `new URL("./file.ext", import.meta.url);`
|
||||
// You don't need extra options in your configuration for `new URL(...)` construction, they work out of the box
|
||||
const url = new URL("./images/url.svg", import.meta.url);
|
||||
|
||||
const container = document.createElement("div");
|
||||
|
||||
Object.assign(container.style, {
|
||||
display: "flex",
|
||||
flexWrap: "wrap",
|
||||
justifyContent: "center"
|
||||
});
|
||||
document.body.appendChild(container);
|
||||
|
||||
function createImageElement(div, data) {
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", data);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
function createTextElement(div, data) {
|
||||
const context = document.createElement("div");
|
||||
context.textContent = data;
|
||||
div.appendChild(context);
|
||||
|
||||
container.appendChild(div);
|
||||
}
|
||||
|
||||
function createBlobElement(div, data) {
|
||||
const blob = new Blob([data], { type: 'image/svg+xml' });
|
||||
const blobUrl = URL.createObjectURL(blob);
|
||||
|
||||
const img = document.createElement("img");
|
||||
|
||||
img.setAttribute("src", blobUrl);
|
||||
img.setAttribute("width", "150");
|
||||
div.appendChild(img);
|
||||
|
||||
container.appendChild(div);
|
||||
|
||||
img.addEventListener(
|
||||
'load',
|
||||
() => { URL.revokeObjectURL(blobUrl) },
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
|
||||
const files = [
|
||||
{
|
||||
title: "import png from \"./images/file.png\";",
|
||||
data: png,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import jpg from \"./images/file.jpg\";",
|
||||
data: jpg,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import svg from \"./images/file.svg\";",
|
||||
data: svg,
|
||||
render: createImageElement,
|
||||
},
|
||||
{
|
||||
title: "import text from \"./content/file.text\" with { type: \"text\" };",
|
||||
data: text,
|
||||
render: createTextElement,
|
||||
},
|
||||
{
|
||||
title: "import bytes from \"./content/file.text\" with { type: \"bytes\" };",
|
||||
data: bytes,
|
||||
render: createBlobElement,
|
||||
},
|
||||
{
|
||||
title: "new URL(\"./url.svg\", import.meta.url);",
|
||||
data: url,
|
||||
render: createImageElement,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
function render(title, data, fn) {
|
||||
const div = document.createElement("div");
|
||||
div.style.textAlign = "center";
|
||||
div.style.width = "50%";
|
||||
|
||||
const h2 = document.createElement("h2");
|
||||
h2.textContent = title;
|
||||
div.appendChild(h2);
|
||||
|
||||
fn(div, data)
|
||||
}
|
||||
|
||||
files.forEach(item => {
|
||||
render(item.title, item.data, item.render);
|
||||
});
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><title>icon-square-small</title><path fill="#FFF" d="M300 .1L565 150v299.9L300 599.8 35 449.9V150z"/><path fill="#8ED6FB" d="M517.7 439.5L308.8 557.8v-92L439 394.1l78.7 45.4zm14.3-12.9V179.4l-76.4 44.1v159l76.4 44.1zM81.5 439.5l208.9 118.2v-92l-130.2-71.6-78.7 45.4zm-14.3-12.9V179.4l76.4 44.1v159l-76.4 44.1zm8.9-263.2L290.4 42.2v89l-137.3 75.5-1.1.6-75.9-43.9zm446.9 0L308.8 42.2v89L446 206.8l1.1.6 75.9-44z"/><path fill="#1C78C0" d="M290.4 444.8L162 374.1V234.2l128.4 74.1v136.5zm18.4 0l128.4-70.6v-140l-128.4 74.1v136.5zM299.6 303zm-129-85l129-70.9L428.5 218l-128.9 74.4-129-74.4z"/></svg>
|
After Width: | Height: | Size: 656 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><title>icon-square-small</title><path fill="#FFF" d="M300 .1L565 150v299.9L300 599.8 35 449.9V150z"/><path fill="#8ED6FB" d="M517.7 439.5L308.8 557.8v-92L439 394.1l78.7 45.4zm14.3-12.9V179.4l-76.4 44.1v159l76.4 44.1zM81.5 439.5l208.9 118.2v-92l-130.2-71.6-78.7 45.4zm-14.3-12.9V179.4l76.4 44.1v159l-76.4 44.1zm8.9-263.2L290.4 42.2v89l-137.3 75.5-1.1.6-75.9-43.9zm446.9 0L308.8 42.2v89L446 206.8l1.1.6 75.9-44z"/><path fill="#1C78C0" d="M290.4 444.8L162 374.1V234.2l128.4 74.1v136.5zm18.4 0l128.4-70.6v-140l-128.4 74.1v136.5zM299.6 303zm-129-85l129-70.9L428.5 218l-128.9 74.4-129-74.4z"/></svg>
|
After Width: | Height: | Size: 656 B |
|
@ -1,3 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
output: {
|
||||
assetModuleFilename: "images/[hash][ext]"
|
||||
|
@ -5,9 +7,9 @@ module.exports = {
|
|||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.(png|jpg|svg)$/,
|
||||
test: /file\.(png|jpg|svg)$/,
|
||||
type: "asset"
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
};
|
|
@ -16,7 +16,7 @@ const targetArgs = global.NO_TARGET_ARGS ? "" : "--entry ./example.js --output-f
|
|||
const displayReasons = global.NO_REASONS ? "" : "--stats-reasons --stats-used-exports --stats-provided-exports";
|
||||
const statsArgs = global.NO_STATS_OPTIONS ? "" : "--stats-chunks --stats-modules-space 99999 --stats-chunk-origins";
|
||||
const publicPathArgs = global.NO_PUBLIC_PATH ? "" : '--output-public-path "dist/"';
|
||||
const statsColorsArg = global.STATS_COLORS ? "" : "--no-stats-colors";
|
||||
const statsColorsArg = global.STATS_COLORS ? "" : "--no-color";
|
||||
const commonArgs = `${statsColorsArg} ${statsArgs} ${publicPathArgs} ${extraArgs} ${targetArgs}`;
|
||||
|
||||
let readme = fs.readFileSync(require("path").join(process.cwd(), "template.md"), "utf-8");
|
||||
|
@ -80,7 +80,16 @@ const doCompileAndReplace = (args, prefix, callback) => {
|
|||
if (error !== null)
|
||||
console.log(error);
|
||||
try {
|
||||
readme = tc.replaceResults(readme, process.cwd(), stdout.replace(/[\r?\n]*$/, ""), prefix);
|
||||
readme = tc.replaceResults(
|
||||
readme,
|
||||
process.cwd(),
|
||||
stdout
|
||||
.replace(/[\r?\n]*$/, "")
|
||||
.replace(/\d\d\d\d-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])/g, "XXXX-XX-XX")
|
||||
.replace(/([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/g, "XXXX:XX:XX")
|
||||
.replace(/webpack [0-9.]+/g, "webpack X.X.X"),
|
||||
prefix
|
||||
);
|
||||
} catch (e) {
|
||||
console.log(stderr);
|
||||
throw e;
|
||||
|
|
|
@ -14,6 +14,8 @@ console.log(pMap4);
|
|||
# webpack.config.js
|
||||
|
||||
```javascript
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
// enable debug logging to see network requests!
|
||||
// stats: {
|
||||
|
@ -35,7 +37,7 @@ module.exports = {
|
|||
## Unoptimized
|
||||
|
||||
```
|
||||
asset output.js 82.6 KiB [emitted] (name: main)
|
||||
asset output.js 82.4 KiB [emitted] (name: main)
|
||||
runtime modules 670 bytes 3 modules
|
||||
modules by path https:// 30 KiB
|
||||
modules by path https://jspm.dev/ 16.1 KiB 12 modules
|
||||
|
@ -59,7 +61,7 @@ modules by path https:// 30 KiB
|
|||
[used exports unknown]
|
||||
harmony side effect evaluation https://cdn.skypack.dev/p-map ./example.js 1:0-50
|
||||
harmony import specifier https://cdn.skypack.dev/p-map ./example.js 5:12-17
|
||||
https://cdn.skypack.dev/-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js 2.29 KiB [built] [code generated]
|
||||
https://cdn.skypack.dev/-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imp...(truncated) 2.29 KiB [built] [code generated]
|
||||
[exports: default, pMapSkip]
|
||||
[used exports unknown]
|
||||
harmony side effect evaluation /-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js https://cdn.skypack.dev/p-map 15:0-97
|
||||
|
@ -76,7 +78,7 @@ modules by path https:// 30 KiB
|
|||
[no exports]
|
||||
[used exports unknown]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
||||
## Production mode
|
||||
|
@ -88,5 +90,5 @@ orphan modules 30 KiB [orphan] 26 modules
|
|||
[no exports]
|
||||
[no exports used]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
// enable debug logging to see network requests!
|
||||
// stats: {
|
||||
|
|
|
@ -18,7 +18,10 @@ import("./async2");
|
|||
# webpack.config.js
|
||||
|
||||
```javascript
|
||||
var path = require("path");
|
||||
"use strict";
|
||||
|
||||
const path = require("path");
|
||||
|
||||
module.exports = {
|
||||
// mode: "development" || "production",
|
||||
entry: {
|
||||
|
@ -43,7 +46,7 @@ module.exports = {
|
|||
<body>
|
||||
<!-- inlined minimized file "runtime~main.[chunkhash].js" -->
|
||||
<script>
|
||||
(()=>{"use strict";var e,r,t,o,n={},a={};function i(e){var r=a[e];if(void 0!==r)return r.exports;var t=a[e]={exports:{}};return n[e](t,t.exports,i),t.exports}i.m=n,e=[],i.O=(r,t,o,n)=>{if(!t){var a=1/0;for(s=0;s<e.length;s++){for(var[t,o,n]=e[s],l=!0,u=0;u<t.length;u++)(!1&n||a>=n)&&Object.keys(i.O).every((e=>i.O[e](t[u])))?t.splice(u--,1):(l=!1,n<a&&(a=n));if(l){e.splice(s--,1);var f=o();void 0!==f&&(r=f)}}return r}n=n||0;for(var s=e.length;s>0&&e[s-1][2]>n;s--)e[s]=e[s-1];e[s]=[t,o,n]},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var n=Object.create(null);i.r(n);var a={};r=r||[null,t({}),t([]),t(t)];for(var l=2&o&&e;"object"==typeof l&&!~r.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((r=>a[r]=()=>e[r]));return a.default=()=>e,i.d(n,a),n},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((r,t)=>(i.f[t](e,r),r)),[])),i.u=e=>e+".[chunkhash].js",i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),o={},i.l=(e,r,t,n)=>{if(o[e])o[e].push(r);else{var a,l;if(void 0!==t)for(var u=document.getElementsByTagName("script"),f=0;f<u.length;f++){var s=u[f];if(s.getAttribute("src")==e){a=s;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=e),o[e]=[r];var c=(r,t)=>{a.onerror=a.onload=null,clearTimeout(d);var n=o[e];if(delete o[e],a.parentNode&&a.parentNode.removeChild(a),n&&n.forEach((e=>e(t))),r)return r(t)},d=setTimeout(c.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=c.bind(null,a.onerror),a.onload=c.bind(null,a.onload),l&&document.head.appendChild(a)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="dist/",(()=>{var e={303:0};i.f.j=(r,t)=>{var o=i.o(e,r)?e[r]:void 0;if(0!==o)if(o)t.push(o[2]);else if(303!=r){var n=new Promise(((t,n)=>o=e[r]=[t,n]));t.push(o[2]=n);var a=i.p+i.u(r),l=new Error;i.l(a,(t=>{if(i.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;l.message="Loading chunk "+r+" failed.\n("+n+": "+a+")",l.name="ChunkLoadError",l.type=n,l.request=a,o[1](l)}}),"chunk-"+r,r)}else e[r]=0},i.O.j=r=>0===e[r];var r=(r,t)=>{var o,n,[a,l,u]=t,f=0;if(a.some((r=>0!==e[r]))){for(o in l)i.o(l,o)&&(i.m[o]=l[o]);if(u)var s=u(i)}for(r&&r(t);f<a.length;f++)n=a[f],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return i.O(s)},t=self.webpackChunk=self.webpackChunk||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();
|
||||
(()=>{"use strict";var e,r,t,o,n={},a={};function i(e){var r=a[e];if(void 0!==r)return r.exports;var t=a[e]={exports:{}};return n[e](t,t.exports,i),t.exports}i.m=n,e=[],i.O=(r,t,o,n)=>{if(!t){var a=1/0;for(s=0;s<e.length;s++){for(var[t,o,n]=e[s],l=!0,u=0;u<t.length;u++)(!1&n||a>=n)&&Object.keys(i.O).every(e=>i.O[e](t[u]))?t.splice(u--,1):(l=!1,n<a&&(a=n));if(l){e.splice(s--,1);var f=o();void 0!==f&&(r=f)}}return r}n=n||0;for(var s=e.length;s>0&&e[s-1][2]>n;s--)e[s]=e[s-1];e[s]=[t,o,n]},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var n=Object.create(null);i.r(n);var a={};r=r||[null,t({}),t([]),t(t)];for(var l=2&o&&e;("object"==typeof l||"function"==typeof l)&&!~r.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach(r=>a[r]=()=>e[r]);return a.default=()=>e,i.d(n,a),n},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((r,t)=>(i.f[t](e,r),r),[])),i.u=e=>e+".[chunkhash].js",i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),o={},i.l=(e,r,t,n)=>{if(o[e])o[e].push(r);else{var a,l;if(void 0!==t)for(var u=document.getElementsByTagName("script"),f=0;f<u.length;f++){var s=u[f];if(s.getAttribute("src")==e){a=s;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",i.nc&&a.setAttribute("nonce",i.nc),a.src=e),o[e]=[r];var c=(r,t)=>{a.onerror=a.onload=null,clearTimeout(d);var n=o[e];if(delete o[e],a.parentNode&&a.parentNode.removeChild(a),n&&n.forEach(e=>e(t)),r)return r(t)},d=setTimeout(c.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=c.bind(null,a.onerror),a.onload=c.bind(null,a.onload),l&&document.head.appendChild(a)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="dist/",(()=>{var e={354:0};i.f.j=(r,t)=>{var o=i.o(e,r)?e[r]:void 0;if(0!==o)if(o)t.push(o[2]);else if(354!=r){var n=new Promise((t,n)=>o=e[r]=[t,n]);t.push(o[2]=n);var a=i.p+i.u(r),l=new Error;i.l(a,t=>{if(i.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;l.message="Loading chunk "+r+" failed.\n("+n+": "+a+")",l.name="ChunkLoadError",l.type=n,l.request=a,o[1](l)}},"chunk-"+r,r)}else e[r]=0},i.O.j=r=>0===e[r];var r=(r,t)=>{var o,n,[a,l,u]=t,f=0;if(a.some(r=>0!==e[r])){for(o in l)i.o(l,o)&&(i.m[o]=l[o]);if(u)var s=u(i)}for(r&&r(t);f<a.length;f++)n=a[f],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return i.O(s)},t=self.webpackChunk=self.webpackChunk||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();
|
||||
</script>
|
||||
|
||||
<script src="dist/main.[chunkhash].js"></script>
|
||||
|
@ -144,7 +147,7 @@ module.exports = {
|
|||
/******/ __webpack_require__.r(ns);
|
||||
/******/ var def = {};
|
||||
/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
|
||||
/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
|
||||
/******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {
|
||||
/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
|
||||
/******/ }
|
||||
/******/ def['default'] = () => (value);
|
||||
|
@ -212,11 +215,11 @@ module.exports = {
|
|||
/******/ script = document.createElement('script');
|
||||
/******/
|
||||
/******/ script.charset = 'utf-8';
|
||||
/******/ script.timeout = 120;
|
||||
/******/ if (__webpack_require__.nc) {
|
||||
/******/ script.setAttribute("nonce", __webpack_require__.nc);
|
||||
/******/ }
|
||||
/******/
|
||||
/******/
|
||||
/******/ script.src = url;
|
||||
/******/ }
|
||||
/******/ inProgress[url] = [done];
|
||||
|
@ -396,9 +399,9 @@ chunk (runtime: runtime~main) main.[chunkhash].js (main) 55 bytes [initial] [ren
|
|||
./example.js 55 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./example main
|
||||
chunk (runtime: runtime~main) runtime~main.[chunkhash].js (runtime~main) 7.59 KiB [entry] [rendered]
|
||||
chunk (runtime: runtime~main) runtime~main.[chunkhash].js (runtime~main) 7.6 KiB [entry] [rendered]
|
||||
> ./example main
|
||||
runtime modules 7.59 KiB 10 modules
|
||||
runtime modules 7.6 KiB 10 modules
|
||||
chunk (runtime: runtime~main) 2.[chunkhash].js 28 bytes [rendered]
|
||||
> ./async1 ./example.js 2:0-18
|
||||
./async1.js 28 bytes [built] [code generated]
|
||||
|
@ -409,23 +412,26 @@ chunk (runtime: runtime~main) 3.[chunkhash].js 28 bytes [rendered]
|
|||
./async2.js 28 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
import() ./async2 ./example.js 3:0-18
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
||||
## Production mode
|
||||
|
||||
```
|
||||
asset runtime~main.[chunkhash].js 2.73 KiB [emitted] [minimized] (name: runtime~main)
|
||||
asset main.[chunkhash].js 157 bytes [emitted] [minimized] (name: main)
|
||||
asset 114.[chunkhash].js 69 bytes [emitted] [minimized]
|
||||
asset 172.[chunkhash].js 69 bytes [emitted] [minimized]
|
||||
Entrypoint main 2.88 KiB = runtime~main.[chunkhash].js 2.73 KiB main.[chunkhash].js 157 bytes
|
||||
chunk (runtime: runtime~main) 114.[chunkhash].js 28 bytes [rendered]
|
||||
asset main.[chunkhash].js 155 bytes [emitted] [minimized] (name: main)
|
||||
asset 471.[chunkhash].js 69 bytes [emitted] [minimized]
|
||||
asset 18.[chunkhash].js 67 bytes [emitted] [minimized]
|
||||
Entrypoint main 2.88 KiB = runtime~main.[chunkhash].js 2.73 KiB main.[chunkhash].js 155 bytes
|
||||
chunk (runtime: runtime~main) 18.[chunkhash].js 28 bytes [rendered]
|
||||
> ./async1 ./example.js 2:0-18
|
||||
./async1.js 28 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
import() ./async1 ./example.js 2:0-18
|
||||
chunk (runtime: runtime~main) 172.[chunkhash].js 28 bytes [rendered]
|
||||
chunk (runtime: runtime~main) runtime~main.[chunkhash].js (runtime~main) 7.61 KiB [entry] [rendered]
|
||||
> ./example main
|
||||
runtime modules 7.61 KiB 10 modules
|
||||
chunk (runtime: runtime~main) 471.[chunkhash].js 28 bytes [rendered]
|
||||
> ./async2 ./example.js 3:0-18
|
||||
./async2.js 28 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
|
@ -435,8 +441,5 @@ chunk (runtime: runtime~main) main.[chunkhash].js (main) 55 bytes [initial] [ren
|
|||
./example.js 55 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./example main
|
||||
chunk (runtime: runtime~main) runtime~main.[chunkhash].js (runtime~main) 7.59 KiB [entry] [rendered]
|
||||
> ./example main
|
||||
runtime modules 7.59 KiB 10 modules
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
var path = require("path");
|
||||
"use strict";
|
||||
|
||||
const path = require("path");
|
||||
|
||||
module.exports = {
|
||||
// mode: "development" || "production",
|
||||
entry: {
|
||||
|
|
|
@ -58,15 +58,15 @@ exports.multiply = function multiply() {
|
|||
!*** ./increment.js ***!
|
||||
\**********************/
|
||||
/*! default exports */
|
||||
/*! export decrement [provided] [unused] [renamed to Mj] */
|
||||
/*! export increment [provided] [used in main] [renamed to nP] */
|
||||
/*! export incrementBy2 [provided] [unused] [renamed to pN] */
|
||||
/*! export decrement [provided] [unused] [renamed to Kt] */
|
||||
/*! export increment [provided] [used in main] [renamed to GV] */
|
||||
/*! export incrementBy2 [provided] [unused] [renamed to Bd] */
|
||||
/*! runtime requirements: __webpack_require__, __webpack_exports__ */
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
|
||||
var __webpack_unused_export__;
|
||||
const add = (__webpack_require__(/*! ./math */ 2)/* .add */ .I);
|
||||
exports.nP = function increment(val) {
|
||||
const add = (__webpack_require__(/*! ./math */ 2)/* .add */ .W);
|
||||
exports.GV = function increment(val) {
|
||||
return add(val, 1);
|
||||
};
|
||||
__webpack_unused_export__ = function incrementBy2(val) {
|
||||
|
@ -83,13 +83,13 @@ __webpack_unused_export__ = function decrement(val) {
|
|||
!*** ./math.js ***!
|
||||
\*****************/
|
||||
/*! default exports */
|
||||
/*! export add [provided] [used in main] [renamed to I] */
|
||||
/*! export multiply [provided] [unused] [renamed to J] */
|
||||
/*! export add [provided] [used in main] [renamed to W] */
|
||||
/*! export multiply [provided] [unused] [renamed to l] */
|
||||
/*! runtime requirements: __webpack_exports__ */
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
var __webpack_unused_export__;
|
||||
exports.I = function add() {
|
||||
exports.W = function add() {
|
||||
var sum = 0,
|
||||
i = 0,
|
||||
args = arguments,
|
||||
|
@ -151,14 +151,14 @@ __webpack_unused_export__ = function multiply() {
|
|||
|
||||
``` js
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
/*!********************!*\
|
||||
!*** ./example.js ***!
|
||||
\********************/
|
||||
/*! unknown exports (runtime-defined) */
|
||||
/*! runtime requirements: __webpack_require__ */
|
||||
const inc = (__webpack_require__(/*! ./increment */ 1)/* .increment */ .nP);
|
||||
const inc = (__webpack_require__(/*! ./increment */ 1)/* .increment */ .GV);
|
||||
var a = 1;
|
||||
inc(a); // 2
|
||||
|
||||
|
@ -172,7 +172,7 @@ inc(a); // 2
|
|||
|
||||
```javascript
|
||||
/*! For license information please see output.js.LICENSE.txt */
|
||||
(()=>{var r=[,(r,n,t)=>{const o=t(2).I;n.nP=function(r){return o(r,1)}},(r,n)=>{n.I=function(){for(var r=0,n=0,t=arguments,o=t.length;n<o;)r+=t[n++];return r}}],n={};(0,function t(o){var e=n[o];if(void 0!==e)return e.exports;var u=n[o]={exports:{}};return r[o](u,u.exports,t),u.exports}(1).nP)(1)})();
|
||||
(()=>{var r=[,(r,t,n)=>{const o=n(2).W;t.GV=function(r){return o(r,1)}},(r,t)=>{t.W=function(){for(var r=0,t=0,n=arguments,o=n.length;t<o;)r+=n[t++];return r}}],t={};(0,function n(o){var e=t[o];if(void 0!==e)return e.exports;var u=t[o]={exports:{}};return r[o](u,u.exports,n),u.exports}(1).GV)(1)})();
|
||||
```
|
||||
|
||||
# dist/without.js (same without tree shaking)
|
||||
|
@ -194,16 +194,16 @@ chunk (runtime: main) output.js (main) 634 bytes [entry] [rendered]
|
|||
./example.js 70 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
|
||||
asset without.js 3.08 KiB [emitted] (name: main)
|
||||
asset without.js 3.09 KiB [emitted] (name: main)
|
||||
chunk (runtime: main) without.js (main) 634 bytes [entry] [rendered]
|
||||
> ./example.js main
|
||||
dependent modules 564 bytes [dependent] 2 modules
|
||||
./example.js 70 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
||||
## Production mode
|
||||
|
@ -216,7 +216,7 @@ chunk (runtime: main) output.js (main) 634 bytes [entry] [rendered]
|
|||
./example.js 70 bytes [built] [code generated]
|
||||
[no exports used]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
|
||||
asset without.js 551 bytes [emitted] [minimized] (name: main) 1 related asset
|
||||
chunk (runtime: main) without.js (main) 634 bytes [entry] [rendered]
|
||||
|
@ -225,5 +225,5 @@ chunk (runtime: main) without.js (main) 634 bytes [entry] [rendered]
|
|||
./example.js 70 bytes [built] [code generated]
|
||||
[used exports unknown]
|
||||
entry ./example.js main
|
||||
webpack 5.78.0 compiled successfully
|
||||
webpack X.X.X compiled successfully
|
||||
```
|
||||
|
|