ava를 사용할 때 잘못된 NODE_MODULE_VERSION
nodegit 을 사용하는 Electron 앱을 작성합니다 . 테스트 부분 에서는 Spectron과 함께 ava 를 사용 하여 앱을 테스트합니다. 내 앱에서 nodegit 을 사용하는 함수를 포함하여 모든 테스트가 작동 합니다.
위에서 설명한 테스트 외에도 nodegit을 직접 가져 오는 순수한 non-Electron 테스트 파일 도 만들었습니다 .
import * as nodegit from 'nodegit';
지금 ava를 통해이 테스트를 실행하면 다음이 반환됩니다.
node_modules\.pnpm\[email protected]\node_modules\nodegit\build\Release\nodegit.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 82. This version of Node.js requires
NODE_MODULE_VERSION 83. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Module._extensions..node (internal/modules/cjs/loader.js:1122:18)
82 버전은 정확히 어디에서 왔습니까? 예상대로 버전을 사용하는 nodejs 만 14.15.0설치했습니다 83. 노드 가 내 앱에서 실제로 작동하는 버전이 일치 하지 않는다고 생각하는 이유는 무엇 입니까? 이것은 내 package.json모습입니다.
"devDependencies": {
"ava": "^3.13.0",
},
"scripts": {
"ava": "node_modules/.bin/ava",
...
},
"ava": {
"files": [
"*.ts"
],
"extensions": [
"ts"
],
"require": [
"ts-node/register"
],
"nodeArguments": [
"--napi-modules",
"--experimental-modules"
]
},
내가 nodegit직접 만들었고 config.gypi파일에서 다음을 참조합니다.
"node_module_version": 83,
나는 매우 간단한 재현 가능한 예를 만들었습니다. https://github.com/Githubber2021/node_module_version-issue
% node --version
14.15.0
% npm install
% npm run ava
... error
누가 이것이 버그인지 또는 버전 82의 출처인지 설명해 줄 수 있습니까?
답변
다음 두 가지 중 하나 일 수 있습니다.
- 있는 거 로딩을 통해 사전 구축 된 바이너리를 제공하면 네이티브 의존성 사전 빌드는 - 이것은 아마의 경우
- 로드하는 네이티브 종속성은 소스 코드로 다운로드되며 바이너리를 빌드하는 것은 사용자에게 달려 있습니다.
nodegit의 README에 따르면
"NodeGit은 기본 종속성없이 대부분의 시스템에서 즉시 작동합니다."
그러나 [email protected]Node 14를 사용하여 미리 빌드 된 바이너리를 가져 오려면 최소한 필요한 것 같습니다 . 소스
그래서 82여러분이보고있는 것은 미리 빌드 된 바이너리가 컴파일 된 ABI 버전에서 온 것입니다. 이미을 사용하고 있기 때문에 [email protected]어떻게 든 잘못된 ABI에 대해 미리 빌드 된 바이너리로 끝났습니다.
다음은 여러 버전에 대한 다양한 바이너리를 모두 나열하는 저장소입니다. 어떻게 이런 일이 발생할 수 있는지 확인할 수 있습니다. https://github.com/lovell/sharp/tree/v0.25.3
나는 Electron에서 개발하고 Electron의 경우 올바른 버전의 Electron을 실행하기 위해 이와 같은 명령을 사용합니다 npm rebuild.
npm rebuild --runtime=electron --target=8.5.3 --disturl=https://atom.io/download/atom-shell
나도 몰라 정확히 해당하는 일반 노드 무엇인지, 그러나 이것은 가까이를 얻을 수 있으면 알려 그렇다면 내가 무엇을 찾을 수 볼 수 있습니다.
이봐) 나는 당신의 문제를 해결할 수 있다고 생각합니다.
"engines": {
"node": ">=14.0.0"
},
package.json에 추가하고 node_modules를 제거하고 프로젝트 디렉토리에서 npm i를 수행하십시오. 도움이 될 것입니다