단진
대체로 맑음
단진
  • 분류 전체보기 (162)
    • 개발 (112)
      • 회고 (25)
      • 개발과정 (28)
      • 개념 (14)
      • JavaScript (11)
      • TypeScript (12)
      • 알고리즘 (4)
      • GitHub (4)
      • 오류 (9)
      • TMI (5)
    • 일상 (15)
      • 사진 및 여행 (6)
      • 책 소개 (4)
      • 기타 TMI (5)
    • IT (16)
      • 개념 (5)
      • 데이터베이스 (6)
      • 딥러닝 (1)
      • TMI (4)
    • TMI (4)
      • 법률 TMI (4)
    • 보안 (15)
      • Dreamhack (5)
      • Root Me (10)
hELLO · Designed By 정상우.
단진

대체로 맑음

[import-visualizer] 7. 번들링(빌드)
개발/개발과정

[import-visualizer] 7. 번들링(빌드)

2024. 6. 14. 17:05

다음 고민으로 번들링을 수행할지 안할지 결정하는 것이었다.

 

처음 JS로 작업한 이유는 빌드를 고려하지 않았기 때문이다.

 

improt-visualizer라는 이름에 맞게 esm에서만 사용할 수 있도록 하는 것이 목표였기 때문에 cjs 방식을 고려할 필요가 없었기 때문이다.

(나중에 require-visualizer도?)

 

지금 이대로 배포해도 문제가 없지만 연습삼아 하는 것 + TS가 없으니 리책토링 엄두가 안남의 이유로 TS를 도입하기로 결정했다.

(리팩토링 과정에서 TS의 장점을 최대한 살리기 위해)

 

이 시리즈의 글은 개발 과정을 작성한 것으로 내용 중 코드 또는 판단이 이상한 부분이 있다면 높은 확률로 뒷부분에서 수정될 것입니다.

TSC

(TypeScript로 변환하는 과정은 생략)

 

이 프로젝트에서 빌드는 2회 수행되어야 한다.

  1. 리액트 빌드
  2. typescript

두 과정은 별개로 일어나도 되기에 npm-run-all이라는 라이브러리를 활용하여 병렬적으로 실행될 수 있도록 구성했다.

npm-run-all - npm (npmjs.com)

 

npm-run-all

A CLI tool to run multiple npm-scripts in parallel or sequential.. Latest version: 4.1.5, last published: 6 years ago. Start using npm-run-all in your project by running `npm i npm-run-all`. There are 1700 other projects in the npm registry using npm-run-a

www.npmjs.com

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "build": "run-p build:*",
  "build:plugin": "tsc",
  "build:template": "rollup -c rollup.config.js",
  "prebuild": "rm -rf ./dist"
},

js로 잘 변환되며 타입 파일도 함께 생성됨을 확인할 수 있다.

 

멍청한 생각

이 과정에서 판단 실수를 했었다.

 

빌드를 수행하는 과정에서 어떤 것을 빌드 결과에 포함시켜야 할 지 제대로 고려하지 못했다.

 

이전에 리액트를 빌드해서 넣는 이유는 리액트의 실행 부분 코드만 필요했기 때문이며 사용자가 react를 설치하지 않아도 실행할 수 있도록 하기 위함이었다.

(React 버전 업그레이드에 대한 문제도 함께 해결할 수 있으며 preact를 사용했다면 번들 크기도 더 줄였을 것이다)

 

다시 말 하면 react 빌드 결과를 번들에 포함시키는 것은 당위성이 있었다.

 

하지만, 현재 프로젝트에서 사용하는 @babel/core 등의 AST 관련 라이브러리와 JSON5, open의 경우는 어떻게 될까?

 

이들이 번들에 포함되는 것도 가능하지만 그렇게 했을 때 얻을 수 있는 장점이 거의 없었다.

 

파일의 내용은 매우 길어지게 되었고 불필요한 에러가 계속 발생하는 등 문제가 발생했다.

 

다르게 생각하면 이 각각의 라이브러리가 독립적으로 작동하기 위해서는 이들이 의존하는 모든 의존성을 내 번들에 포함해야 정상적으로 작동한다는 것을 알 수 있다.

 

내가 했던 판단 실수는 이들 모두를 번들에 포함시키려 했던 것이다.

 

뒤로 물러서서 생각하면 devDependencies가 아니라 dependencies에 이들을 정의해두면 사용자가 내 라이브러리를 사용할 때 알아서 설치 하도록 할 수 있다.

 

이 과정에서 devDependencies와 dependencies에 대해 이해할 수 있었다.

 

devDependencies는 라이브러리의 소스 코드를 다운받아 npm i를 하는 경우 설치될 것이고 개발과정에서 사용할 수 있게 될 것이다.

 

dependencies는 사용자가 내 라이브러리를 npm i import-visualizer를 이용해서 설치하는 경우 자동으로 함께 설치될 것이고 이렇게 사용된 라이브러리를 활용하여 import-visualizer를 실행할 수 있게 될 것이다.

저작자표시 (새창열림)

'개발 > 개발과정' 카테고리의 다른 글

[import-visualizer] 9. 상대경로 문제와 스택 오버플로우  (0) 2024.06.14
[import-visualizer] 8. tsc의 한계 및 배포  (0) 2024.06.14
[import-visualizer] 6. 트리 생성  (0) 2024.06.14
[import-visualizer] 5. CDN의 한계  (0) 2024.06.14
[import-visualizer] 4. 시각화  (0) 2024.06.14
    '개발/개발과정' 카테고리의 다른 글
    • [import-visualizer] 9. 상대경로 문제와 스택 오버플로우
    • [import-visualizer] 8. tsc의 한계 및 배포
    • [import-visualizer] 6. 트리 생성
    • [import-visualizer] 5. CDN의 한계
    단진
    단진

    티스토리툴바