build: use swc minify for prod builds

This commit is contained in:
Evan You 2024-06-18 18:12:26 +08:00
parent 1c3327a0fa
commit dadb3632a0
No known key found for this signature in database
GPG Key ID: B9D421896CA450FB
3 changed files with 150 additions and 48 deletions

View File

@ -67,7 +67,7 @@
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-replace": "5.0.4",
"@rollup/plugin-terser": "^0.4.4",
"@swc/core": "^1.6.1",
"@types/hash-sum": "^1.0.2",
"@types/minimist": "^1.2.5",
"@types/node": "^20.14.2",

View File

@ -32,9 +32,9 @@ importers:
'@rollup/plugin-replace':
specifier: 5.0.4
version: 5.0.4(rollup@4.18.0)
'@rollup/plugin-terser':
specifier: ^0.4.4
version: 0.4.4(rollup@4.18.0)
'@swc/core':
specifier: ^1.6.1
version: 1.6.1
'@types/hash-sum':
specifier: ^1.0.2
version: 1.0.2
@ -807,15 +807,6 @@ packages:
rollup:
optional: true
'@rollup/plugin-terser@0.4.4':
resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/pluginutils@5.1.0':
resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
engines: {node: '>=14.0.0'}
@ -915,6 +906,81 @@ packages:
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
'@swc/core-darwin-arm64@1.6.1':
resolution: {integrity: sha512-u6GdwOXsOEdNAdSI6nWq6G2BQw5HiSNIZVcBaH1iSvBnxZvWbnIKyDiZKaYnDwTLHLzig2GuUjjE2NaCJPy4jg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
'@swc/core-darwin-x64@1.6.1':
resolution: {integrity: sha512-/tXwQibkDNLVbAtr7PUQI0iQjoB708fjhDDDfJ6WILSBVZ3+qs/LHjJ7jHwumEYxVq1XA7Fv2Q7SE/ZSQoWHcQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
'@swc/core-linux-arm-gnueabihf@1.6.1':
resolution: {integrity: sha512-aDgipxhJTms8iH78emHVutFR2c16LNhO+NTRCdYi+X4PyIn58/DyYTH6VDZ0AeEcS5f132ZFldU5AEgExwihXA==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
'@swc/core-linux-arm64-gnu@1.6.1':
resolution: {integrity: sha512-XkJ+eO4zUKG5g458RyhmKPyBGxI0FwfWFgpfIj5eDybxYJ6s4HBT5MoxyBLorB5kMlZ0XoY/usUMobPVY3nL0g==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
'@swc/core-linux-arm64-musl@1.6.1':
resolution: {integrity: sha512-dr6YbLBg/SsNxs1hDqJhxdcrS8dGMlOXJwXIrUvACiA8jAd6S5BxYCaqsCefLYXtaOmu0bbx1FB/evfodqB70Q==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
'@swc/core-linux-x64-gnu@1.6.1':
resolution: {integrity: sha512-A0b/3V+yFy4LXh3O9umIE7LXPC7NBWdjl6AQYqymSMcMu0EOb1/iygA6s6uWhz9y3e172Hpb9b/CGsuD8Px/bg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
'@swc/core-linux-x64-musl@1.6.1':
resolution: {integrity: sha512-5dJjlzZXhC87nZZZWbpiDP8kBIO0ibis893F/rtPIQBI5poH+iJuA32EU3wN4/WFHeK4et8z6SGSVghPtWyk4g==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
'@swc/core-win32-arm64-msvc@1.6.1':
resolution: {integrity: sha512-HBi1ZlwvfcUibLtT3g/lP57FaDPC799AD6InolB2KSgkqyBbZJ9wAXM8/CcH67GLIP0tZ7FqblrJTzGXxetTJQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
'@swc/core-win32-ia32-msvc@1.6.1':
resolution: {integrity: sha512-AKqHohlWERclexar5y6ux4sQ8yaMejEXNxeKXm7xPhXrp13/1p4/I3E5bPVX/jMnvpm4HpcKSP0ee2WsqmhhPw==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
'@swc/core-win32-x64-msvc@1.6.1':
resolution: {integrity: sha512-0dLdTLd+ONve8kgC5T6VQ2Y5G+OZ7y0ujjapnK66wpvCBM6BKYGdT/OKhZKZydrC5gUKaxFN6Y5oOt9JOFUrOQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
'@swc/core@1.6.1':
resolution: {integrity: sha512-Yz5uj5hNZpS5brLtBvKY0L4s2tBAbQ4TjmW8xF1EC3YLFxQRrUjMP49Zm1kp/KYyYvTkSaG48Ffj2YWLu9nChw==}
engines: {node: '>=10'}
peerDependencies:
'@swc/helpers': '*'
peerDependenciesMeta:
'@swc/helpers':
optional: true
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
'@swc/types@0.1.8':
resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==}
'@tootallnate/quickjs-emscripten@0.23.0':
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
@ -2757,9 +2823,6 @@ packages:
queue-tick@1.0.1:
resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
range-parser@1.2.0:
resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==}
engines: {node: '>= 0.6'}
@ -2900,9 +2963,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
serve-handler@6.1.5:
resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==}
@ -2963,9 +3023,6 @@ packages:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
smob@1.5.0:
resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
socks-proxy-agent@8.0.3:
resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==}
engines: {node: '>= 14'}
@ -3815,14 +3872,6 @@ snapshots:
optionalDependencies:
rollup: 4.18.0
'@rollup/plugin-terser@0.4.4(rollup@4.18.0)':
dependencies:
serialize-javascript: 6.0.2
smob: 1.5.0
terser: 5.31.1
optionalDependencies:
rollup: 4.18.0
'@rollup/pluginutils@5.1.0(rollup@4.18.0)':
dependencies:
'@types/estree': 1.0.5
@ -3885,6 +3934,58 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {}
'@swc/core-darwin-arm64@1.6.1':
optional: true
'@swc/core-darwin-x64@1.6.1':
optional: true
'@swc/core-linux-arm-gnueabihf@1.6.1':
optional: true
'@swc/core-linux-arm64-gnu@1.6.1':
optional: true
'@swc/core-linux-arm64-musl@1.6.1':
optional: true
'@swc/core-linux-x64-gnu@1.6.1':
optional: true
'@swc/core-linux-x64-musl@1.6.1':
optional: true
'@swc/core-win32-arm64-msvc@1.6.1':
optional: true
'@swc/core-win32-ia32-msvc@1.6.1':
optional: true
'@swc/core-win32-x64-msvc@1.6.1':
optional: true
'@swc/core@1.6.1':
dependencies:
'@swc/counter': 0.1.3
'@swc/types': 0.1.8
optionalDependencies:
'@swc/core-darwin-arm64': 1.6.1
'@swc/core-darwin-x64': 1.6.1
'@swc/core-linux-arm-gnueabihf': 1.6.1
'@swc/core-linux-arm64-gnu': 1.6.1
'@swc/core-linux-arm64-musl': 1.6.1
'@swc/core-linux-x64-gnu': 1.6.1
'@swc/core-linux-x64-musl': 1.6.1
'@swc/core-win32-arm64-msvc': 1.6.1
'@swc/core-win32-ia32-msvc': 1.6.1
'@swc/core-win32-x64-msvc': 1.6.1
'@swc/counter@0.1.3': {}
'@swc/types@0.1.8':
dependencies:
'@swc/counter': 0.1.3
'@tootallnate/quickjs-emscripten@0.23.0': {}
'@types/estree@1.0.5': {}
@ -5865,10 +5966,6 @@ snapshots:
queue-tick@1.0.1: {}
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
range-parser@1.2.0: {}
rc@1.2.8:
@ -6028,10 +6125,6 @@ snapshots:
semver@7.6.2: {}
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
serve-handler@6.1.5:
dependencies:
bytes: 3.0.0
@ -6102,8 +6195,6 @@ snapshots:
smart-buffer@4.2.0: {}
smob@1.5.0: {}
socks-proxy-agent@8.0.3:
dependencies:
agent-base: 7.1.1

View File

@ -9,11 +9,11 @@ import pico from 'picocolors'
import commonJS from '@rollup/plugin-commonjs'
import polyfillNode from 'rollup-plugin-polyfill-node'
import { nodeResolve } from '@rollup/plugin-node-resolve'
import terser from '@rollup/plugin-terser'
import esbuild from 'rollup-plugin-esbuild'
import alias from '@rollup/plugin-alias'
import { entries } from './scripts/aliases.js'
import { inlineEnums } from './scripts/inline-enums.js'
import { minify as minifySwc } from '@swc/core'
/**
* @template T
@ -364,14 +364,25 @@ function createMinifiedConfig(/** @type {PackageFormat} */ format) {
format: outputConfigs[format].format,
},
[
terser({
module: /^esm/.test(format),
compress: {
ecma: 2016,
pure_getters: true,
{
name: 'swc-minify',
async renderChunk(
contents,
_,
{ format, sourcemap, sourcemapExcludeSources },
) {
const { code, map } = await minifySwc(contents, {
module: format === 'es',
compress: true,
mangle: true,
sourceMap: !!sourcemap,
inlineSourcesContent: !sourcemapExcludeSources,
})
return { code, map: map || null }
},
safari10: true,
}),
},
],
)
}