2024년 6월 11일 작업일지

2 min read

swc_core Regression 수정

제일 수상한 #8986 을 우선 리버트하고 프로덕션 빌드를 돌려봤다. 그랬더니 잘 작동했다. 그래서 revert 한 것 그대로 PR 만들었다.

@swc/core@v1.5.28 배포

SWC Minifier 버그 수정

해결책이 성능적인 측면에서 마음에 들진 않는데, 그래도 일단 간단한 해결책을 사용해서 PR을 만들었다.

swc_core 업데이트 PR 리베이스

SWC: CI 문제 해결

SWC Minifier 버그 디버깅

이전부터 작업하던 이슈인데 난이도가 조금 있어서 기록하면서 디버깅하기로 했다.

t의 값이 이상한 게 문제였다.

m6 12c3.3 0 6-2.7 6-6s-2.7-6-6-6-6 2.7-6 6 2.7 6 6 6z 가 들어간 문자열은 하나밖에 없었다.

입력 파일에서 찾아보니까 property hoisting이 문제인 것 같았다. 근데 minifier에서 직접 UPDATE=1 cargo test를 하니까

                var et = {
                    btn: '<svg class="H_icon" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><g transform="translate(3 2)"><path d="m18 13v7h-18v-7h2v5h2v-2h2v2h2v-3h2v3h2v-2h2v2h2v-5z"></path><path d="m2.3.3c.7 0 1.3.1 1.8.4s.9.6 1.1 1 .4.9.4 1.4c0 .5-.1 1-.3 1.4s-.57 1-1 1.6-1.3 1.3-2.3 2.2h3.9l-.2 1.7h-6.16v-1.6c1.1-1.1 2-2 2.5-2.6s.9-1 1-1.4.3-.8.3-1.2c0-.4-.1-.7-.3-.9s-.5-.3-.9-.3c-.3 0-.6 0-.9.2s-.5.4-.8.7l-1.3-1c.4-.5.9-.9 1.4-1.2s1.2-.4 1.8-.4zm14.4 9.7h-2.3l-.2-3.8c 0-.9-.1-1.7-.1-2.4 0-.5 0-1 0-1.5l-1.5 6.7h-2.2l-1.6-6.7c.1.8.1 1.6.1 2.3 0 .5 0 1.1 0 1.7l-.2 3.8h-2.2l.7-9.7h2.9l1.5 6.6 1.4-6.6h2.9z"></path></g></g></svg>',
                    point: '<svg height="22" viewBox="0 0 12 12" width="22" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m6 12c3.3 0 6-2.7 6-6s-2.7-6-6-6-6 2.7-6 6 2.7 6 6 6z" fill="#fff"></path><path d="m6 10c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4z" fill="#2ed5c9" stroke="#272c36" stroke-width="2"></path></g></svg>'
                };

가 정상적으로 유지됐다. 진짜 이해가 안 돼서

import fs from 'node:fs/promises'
import { minify } from './dist/build/swc/index.js'

const src = await fs.readFile(
  '/Users/kdy1/projects/s/minifier/crates/swc_ecma_minifier/tests/fixture/next/66182/input.js',
  'utf-8'
)

const minified = await minify(src)
console.log(minified.code)

같은 코드를 짜서 돌려봤는데 나온 파일에선 var et가 정상적으로 유지됐다. 테스트용으로 입력을 추출하는 스크립트에 문제가 있나 했는데 이미 SWC 메인 레포지토리와 v15.0.0-canary.12에서는 고쳐진 문제였다. canary.12 에 적용된 swc_core 업데이트가 revert 돼버려서 최신 카나리에서 재현이 가능한 것이었고, 헛수고했지만 그래도 문제는 해결됐다.

SWC 파서 최적화

SWC의 ES파서가 템플릿 리터럴 렉싱할 때 매우 비효율적인 작업을 하고 있었다.