URL 단축기 만들기 - 8. swc 사용하기
전에 @swc/jest
패키지를 이용해 테스트를 진행하려고 했었는데 오류가 나서 @swc-node/jest
패키지로 진행했었어요. 그런데 이번에 해결 방법을 찾아서 그 방법으로 진행해 볼게요.
일단 swc를 설치해 주세요.
yarn add --dev @swc/jest @swc/core
backend 폴더에 .swcrc
파일을 만들어 주세요. 혹시 다른 프로젝트에 사용하신다면 그에 맞게 수정해주시면 될것 같네요. 사실 이부분이 여기에서 가장 중요한 부분이에요. swc가 어떻게 작동해야 하는지 설정해주는 부분이니까요.
{
"jsc": {
"baseUrl": "./src",
"paths": {
"src/*": ["./*"]
},
"transform": {
"decoratorMetadata": true
},
"target": "es2017",
"parser": {
"syntax": "typescript",
"decorators": true
}
},
"module": {
"type": "commonjs"
},
"minify": false
}
일단 이렇게 swc 설정을 써줬어요. 전에 nestjs에서 오류가 발생했던 이유는 jsc.transform.decoratorMetadata
를 설정해주지 않아서였네요.
그럼 이제 jest 설정을 수정해 줄게요. package.json
을 수정해 주세요.
{
"jest": {
"transform": {
"^.+\\.(t|j)s$": "@swc/jest"
}
}
}
이렇게 되면 jest 설정이 끝나네요! 여기까지만 하면 제목이 @swc/jest 사용하기였겠죠? 빌드 스크립트도 바꿔볼게요!
yarn add --dev @swc/cli
build 스크립트도 바꿔주세요.
yarn generate && swc src -d dist
이러면 (아마도) 정상적으로 작동할 거에요! 아마도요...
오늘도 소스코드 남겨놓고 도망갈게요 히히
+ 이 방법으로 테스트가 왜인지 잘 작동하지 않는걸 확인했어요. 여기서부터 해결 방법을 알려드릴게요.
일단 package.json에서 jest 부분을 삭제해주세요. jest.config.js
로 이동할 거에요.
jest.config.js를 이렇게 써주세요.
const { readFileSync } = require('fs')
const path = require('path')
const swcrc = JSON.parse(readFileSync(path.join(__dirname, '.swcrc'), 'utf8'))
module.exports = {
moduleFileExtensions: ['js', 'json', 'ts'],
rootDir: 'src',
testRegex: '.*\\.spec\\.ts$',
transform: {
'^.+\\.(t|j)s$': ['@swc/jest', swcrc],
},
collectCoverageFrom: ['**/*.(t|j)s'],
coverageDirectory: '../coverage',
testEnvironment: 'node',
moduleNameMapper: {
'^src/(.*)$': '<rootDir>/$1',
'(.*)\\.edgeql$': '$1.edgeql.ts',
},
}
이러면 끝이에요! 아마도요..