728x90
업무를 보고있는데 같은 로직을 태워야하는데 실행 경로가 다른 경우의 케이스가 있어서 로직을 private파일로 분리하고 두개의 경로에서 분리한 private 파일을 사용하도록 처리하는 도중 e2e 테스트를 하는데 오류가 발생하였다.
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './base64' is not defined by "exports" in C:\Users\USER\Desktop\workspaces\보안상\이름바꿉니다\node_modules\js-base64\package.json
at new NodeError (internal/errors.js:322:7)
at throwExportsNotFound (internal/modules/esm/resolve.js:332:9)
at packageExportsResolve (internal/modules/esm/resolve.js:565:3)
at resolveExports (internal/modules/cjs/loader.js:450:36)
at Function.Module._findPath (internal/modules/cjs/loader.js:490:31)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:888:27)
at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as _resolveFilename] (C:\Users\USER\Desktop\workspaces\보안보안\node_modules\@cspotcode\source-map-support\source-map-support.js:811:30)
at Function.Module._load (internal/modules/cjs/loader.js:746:27)
at Module.require (internal/modules/cjs/loader.js:974:19)
at require (internal/modules/cjs/helpers.js:101:18) {
code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}
제일먼저 노드 버전을 확인해보았다.
우리 회사에서는 v14.19.1 을 사용하는데 버전에는 문제가 없었다.
그러면 파일을 분리하는 도중 노드 모듈에 문제가 있는걸까?..
2번째 조치로 노드 모듈을 다시 받아보았다.
npm chach clean --force도 해보고 별짓을 다해보았다.
그래도 같은 증상,,
아니 버전문제도 아니고 경로문제 분명 아닌데 왜 안된단말인가?..
Chat-GPT한테 물어보았다.
이 오류는 js-base64 모듈의 package.json 파일에서 exports 객체에 base64 속성이 정의되어 있지 않아서 발생하는 것입니다. 이 속성이 정의되어 있지 않으면 Node.js는 해당 모듈을 사용할 수 없습니다.
해결 방법으로는 js-base64 모듈의 package.json 파일에서 exports 객체에 base64 속성을 추가해야 합니다. 예를 들어, 다음과 같이 추가할 수 있습니다.
"exports": {
".": "./dist/js-base64.js",
"./base64": "./dist/base64.js"
}
이렇게 하면 js-base64 모듈의 base64 속성을 사용할 수 있게 됩니다.
라는데 npm i 로 받은 모듈이라 exports가 잘 되어있다.
이 문제가 아닌것같은데 다시 알려달라고 물어보았다.
만약 exports 객체에 base64 속성이 정의되어 있고, 여전히 이 오류가 발생한다면, 다음과 같은 몇 가지 가능한 원인이 있을 수 있습니다.
모듈 경로가 잘못되었을 경우: 모듈 경로가 올바른지 확인해보세요. 예를 들어, js-base64 모듈을 사용하는 코드에서 require('js-base64/base64')와 같이 경로를 잘못 지정한 경우 이 오류가 발생할 수 있습니다. 경로를 올바르게 지정하면 이 오류를 해결할 수 있습니다.
모듈 버전이 맞지 않을 경우: 모듈 버전이 맞지 않으면 이 오류가 발생할 수 있습니다. 모듈 버전을 확인해보세요. js-base64 모듈의 package.json 파일에서 version 속성을 확인해보세요.
Node.js 버전이 맞지 않을 경우: Node.js 버전이 맞지 않으면 이 오류가 발생할 수 있습니다. Node.js 버전을 확인해보세요.
파일 시스템 문제일 경우: 파일 시스템 문제로 인해 이 오류가 발생할 수 있습니다. 파일 시스템을 확인해보세요.
위의 원인들을 하나씩 확인해보시고, 문제를 해결해보세요.
라는데... 나는 경로나 import를 건든게 없다...
그러다가 발견한것이 있다.
import { Base64 } from 'js-base64/base64';
뭔가 이상하다...
소스를 건든적은 없는데 js-base64/base64 인게 뭔가 의심스러웠다.
수정한 소스를 stash 해놓고 원복한다음 기존 소스를 보았다.
import { Base64 } from 'js-base64';
나는 빡대가리 였다.....
소스를 복붙하면서 경로를 VSCODE에서 자동으로 바꿔준것같은데...
경로 수정하니까 아주 잘된다...
노드 버전문제 뿐만아니라 경로도 꼭 다시한번 확인해보시길,,,
728x90