Repository navigation
Issue/10565 - #3101
Merged
Merged
Issue/10565#3101
Conversation
Dependabot 미해결 경고 114건 중 코드 변경 없이 해결 가능한 건만 적용한다. 소스 코드는 전혀 건드리지 않으며, package.json 버전 범위와 pnpm-lock.yaml만 바뀐다. 주요 해소 항목 (critical 8건 전부 포함): - form-data 2.3.3→2.5.6 / 4.0.5→4.0.6 (안전하지 않은 난수로 boundary 생성, CRLF 주입) - shell-quote 1.8.3→1.10.0 (quote() 개행 미이스케이프) - websocket-driver 0.7.4→0.7.5 (프로토콜 혼동을 통한 메시지 변조) - socket.io-parser 3.3.4→3.3.6, 3.2.0 제거 (패킷 디코딩 검증 미흡, 메모리 고갈) socket.io-client 2.5.0 이 기대하는 3.3.x 라인 유지를 위해 ~3.3.6 으로 고정 - xmlhttprequest-ssl 1.5.5→1.6.3 (인증서 검증 미흡, 임의 코드 실행) - minimist 0.0.10/1.2.0→1.2.8 (프로토타입 오염) - lodash 4.17.23→4.18.1 (_.template imports 키를 통한 코드 주입, _.unset/_.omit 오염) - fast-uri, js-yaml, minimatch, brace-expansion, node-forge, picomatch, path-to-regexp, flatted, ws, serialize-javascript, browserslist 등 high 다수 검증: - pnpm 9 (CI와 동일) 기준 `--frozen-lockfile` 설치 성공, lockfileVersion 9.0 유지 - `pnpm prod` 프로덕션 빌드 성공, 번들 구문 유효 - entry.css 는 caniuse 데이터 갱신으로 cssnano 선택자 병합이 달라져 319바이트 늘었으나 선언 6,630개 기준 유효 차이 0건으로 의미상 완전히 동일함을 확인 - eslint 결과 baseline 과 동일, `pnpm test` 통과 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
karma 4.4.1 이 끌고 오던 구형 하위 트리가 critical 2건을 포함한 다수 경고의 출처였다. karma 는 npm script 어디에서도 실행되지 않는 유휴 개발 도구이며(테스트는 jest 사용), karma.conf.js 는 v6 와 호환되는 표준 옵션만 사용하므로 설정 변경이 필요 없다. 동반 해소: - socket.io 2.1.1 → 4.8.3, engine.io 3.2.1 → 6.6.10 - ws 3.3.3 제거 (메모리 고갈 DoS) - xmlhttprequest-ssl 1.5.5 제거 (인증서 검증 미흡 / 임의 코드 실행, critical) - socket.io-parser 3.2.0 제거 (패킷 디코딩 검증 미흡, critical) - log4js 4.5.1 → 6.9.1, flatted 2.0.2 제거, tmp 0.0.33 → 0.2.7, cookie 0.3.1 제거 이 커밋만 되돌리면 karma 는 4.x 로 복귀하고 앞 커밋의 오버라이드는 그대로 유지된다. 검증: `--frozen-lockfile` 설치 · `pnpm prod` 빌드 · `pnpm test` · eslint 모두 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
전 저장소(소스·설정·스크립트·CI)를 훑어 참조가 하나도 없는 패키지만 골라 제거한다. dependencies: - file-saver 참조 0건. 과거 b97eb4e, 68fcf3b 에서 소스 사용처가 제거됨 - html-webpack-template 참조 0건. serve.js 는 직접 작성한 example/*.ejs 를 씀 devDependencies: - @babel/eslint-plugin .eslintrc 의 plugins 는 ["prettier"] 뿐. 쓰이는 건 @babel/eslint-parser - prettier-eslint 참조 0건 (prettier·eslint-plugin-prettier 와 다른 패키지) - @types/pixi.js typings:null 스텁. pixi.js 5 가 자체 타입을 제공 - karma, karma-chai, karma-mocha, karma-chrome-launcher, mocha, chai 죽은 설정 파일: - Gruntfile.js 구조적으로 실행 불가. 4번째 줄 require('google-closure-compiler') 가 모듈 로드 시점에 throw 한다. grunt·grunt-cli·google-closure-compiler·grunt-* 6종이 package.json·node_modules·lockfile 어디에도 없다. - karma.conf.js 유일한 소비자가 Gruntfile.js:60. 게다가 Entry/EntryStatic/filbert/Test 전역을 로드하지 않아 수동 실행도 실패한다. 위 두 파일이 karma/mocha/chai 6종의 유일한 참조처였다. npm script 와 GitHub Actions 어디에도 karma·grunt·mocha 호출이 없다. 누락 의존성 보정: - rimraf ^6.1.3 추가. "clean": "rimraf ./dist" 가 선언 없이 호출하며 hoisting 운에 기대고 있었다. 효과: 의존성 트리 1,419 → 1,310 (109개 감소). socket.io 2.x·engine.io 3.x·log4js 4.x 등 karma 가 끌고 오던 레거시 체인이 통째로 사라졌다. 검증: --frozen-lockfile 설치·빌드·테스트·clean 전부 통과. 빌드 산출물은 직전 커밋과 바이트 단위로 동일(entry.js 35,432,816 / entry.min.js 17,994,161). Dependabot 경고 해결 85/114 유지. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
webpack_config/common.js:125 의 externals 는 react, react-dom, @entrylabs/tool, entry-paint, @entrylabs/sound-editor, @entrylabs/legacy-video 뿐이고 이들은 package.json 에 아예 없는 런타임 전역이다. 즉 선언된 의존성은 전부 dist/ 에 번들되며, 소비자가 별도로 설치할 필요가 없다. 또한 files 필드로 배포되는 src/playground/ 경로가 직접 import 하는 외부 패키지는 buffer, crypto-js, lodash/* 뿐임을 확인했다. 아래 10개는 그중 하나도 아니다. 이동 대상 (dependencies -> devDependencies): - jest 테스트 러너 (scripts.test) - webpack 빌드 - copy-webpack-plugin 빌드 플러그인 - html-webpack-plugin 빌드 플러그인 - worker-loader webpack 로더 (common.js:37, 인라인 구문 사용처 없음) - autoprefixer postcss 플러그인 - postcss-flexbugs-fixes postcss 플러그인 - @types/crypto-js, @types/hammerjs, @types/isomorphic-fetch TS 타입 전용 효과: dependencies 33 -> 23. 특히 jest 24 가 빠지면서 소비자 설치본에서 request(패치 없음)·tough-cookie·node-notifier·micromatch 3.x·braces 2.x·uuid 3.x 가 사라진다 — Dependabot 경고 6건어치 코드가 소비자에게 더는 전달되지 않는다. 주의: 배포 패키지의 의존성 계약이 바뀌는 변경이라 별도 커밋으로 분리했다. 검증: --frozen-lockfile 설치·빌드·테스트 통과. 빌드 산출물은 직전 커밋과 바이트 단위로 동일(35,432,816 / 17,994,161 / 187,891). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pnpm 10 부터 package.json 의 resolutions / pnpm.overrides 를 더 이상 읽지 않는다. 그 결과 CI(pnpm 9)와 개발자 로컬(pnpm 11)이 서로 다른 의존성 트리를 만들고 있었고, 기존 pixi.js 5.3.7 핀조차 로컬에서는 무력화되어 5.3.12 로 설치되고 있었다. 로컬에서 pnpm install 한 번이면 직전 커밋들의 보안 오버라이드가 통째로 날아가는 상태였다. 실측 확인: 오버라이드 위치 pnpm 9 pnpm 11 package.json > resolutions 적용 무시 package.json > pnpm.overrides 적용 무시 pnpm-workspace.yaml > overrides (+ packages) 적용 적용 변경: - pnpm-workspace.yaml 신규. 오버라이드 34개를 이전했다. packages 필드는 생략 불가 — 없으면 pnpm 이 "packages field missing or empty" 로 즉시 실패한다. karma 제거로 대상이 사라진 socket.io@^2 항목은 정리했다(35 -> 34). - package.json: resolutions 삭제(pnpm 11 이 읽지 않는 죽은 설정), packageManager "pnpm@11.26.0" 와 engines 추가. - 워크플로 2종: pnpm/action-setup v3 -> v4 로 올리고 version 입력을 제거해 packageManager 필드를 단일 진실 원천으로 삼는다. - Node 20 -> 24. pnpm 11 이 Node >=22.13 을 요구하므로 선택이 아니라 필수다. - pull-request-workflow 에는 setup-node 스텝이 아예 없어 러너 기본 Node 에 의존했다. Node 24 스텝을 추가했다. 없으면 기본값이 22.13 미만일 때 pnpm 11 이 그 자리에서 죽는다. allowBuilds: pnpm 10 부터 의존성 install 스크립트가 기본 차단이며, 판단을 내려두지 않으면 설치가 ERR_PNPM_IGNORED_BUILDS 로 exit 1 한다. 실제로 이 저장소에서 재현됐고(CI 가 여기서 죽는다), core-js(후원 안내 출력뿐)와 fsevents 1.2.13(NAN 구 API 라 Node 22+ 에서 빌드 실패, 없으면 폴링 폴백)을 false 로 명시했다. 검증 (pnpm 11.26.0 / Node 24.19.0): - pnpm install --frozen-lockfile exit 0, lockfileVersion 9.0 유지 - pixi.js 가 pnpm 11 에서도 5.3.7 로 고정 — 기존 잠재 버그 해소 - Dependabot 경고 해결 85/114 유지 - pnpm prod 빌드 exit 0, 번들 구문 유효, pnpm test 통과 - eslint 13,879건으로 baseline 과 동일 - entry.css 바이트 동일 + 선언 6,630개 대조 유효 차이 0건 - entry.js 가 368바이트 증가. 원인 규명 결과 pnpm 가상 스토어 경로가 바뀌면서 webpack deterministic 모듈 ID 가 재배정된 것으로, 차이나는 7개 모듈은 전부 require.context 의 ID 매핑 테이블과 webpack 런타임이다. 파일 경로는 동일하고 숫자 ID 만 다르다 — 번들 코드 자체는 같다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.