NODE_MODULE_VERSION không chính xác khi sử dụng ava
Tôi viết một ứng dụng Electron sử dụng nodegit . Đối với phần kiểm tra của tôi, tôi sử dụng ava kết hợp với Spectron để kiểm tra ứng dụng của mình. Tất cả các thử nghiệm của tôi đều hoạt động - bao gồm các chức năng sử dụng nodegit trong ứng dụng của tôi.
Ngoài các thử nghiệm được mô tả ở trên, tôi cũng đã tạo một tệp thử nghiệm thuần túy không phải Electron trong đó tôi nhập trực tiếp nodegit.
import * as nodegit from 'nodegit';
Thực hiện kiểm tra này ngay bây giờ thông qua ava trả về:
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)
Chính xác thì phiên bản 82 đến từ đâu? Tôi chỉ cài đặt nodejs 14.15.0 , sử dụng phiên bản 83như mong đợi. Tại sao nút lại cho rằng phiên bản không khớp với nơi nó hoạt động thực sự trong ứng dụng của tôi? Đây là cách tôi package.jsontrông như thế này:
"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"
]
},
Tôi đã nodegittự xây dựng và trong config.gypitệp, nó thậm chí còn đề cập đến:
"node_module_version": 83,
Tôi đã tạo một ví dụ siêu đơn giản có thể tái tạo: https://github.com/Githubber2021/node_module_version-issue
% node --version
14.15.0
% npm install
% npm run ava
... error
Bất cứ ai có thể giải thích cho tôi nếu đây là một lỗi hoặc phiên bản 82 đến từ đâu?
Trả lời
Đây có thể là một trong hai điều:
- Sự phụ thuộc nguồn gốc bạn đang tải cung cấp mã nhị phân được xây dựng sẵn qua prebuild - Đây có lẽ là trường hợp
- Phần phụ thuộc gốc mà bạn đang tải được tải xuống dưới dạng mã nguồn và việc xây dựng tệp nhị phân là tùy thuộc vào bạn.
Theo README của nodegit,
"NodeGit sẽ hoạt động trên hầu hết các hệ thống hiện đại mà không có bất kỳ phụ thuộc gốc nào."
Nhưng có vẻ như bạn cần tối thiểu [email protected]để có được các tệp nhị phân dựng sẵn từ việc sử dụng Node 14. Nguồn
Vì vậy, những 82gì bạn đang thấy đến từ phiên bản ABI mà nhị phân dựng sẵn được biên dịch dựa trên. Vì bạn đã sử dụng [email protected], nên bằng cách nào đó bạn đã kết thúc với các tệp nhị phân dựng sẵn cho ABI sai.
Đây là repo tôi sử dụng liệt kê tất cả các tệp nhị phân khác nhau cho các phiên bản khác nhau, vì vậy bạn có thể thấy điều này có thể xảy ra như thế nào: https://github.com/lovell/sharp/tree/v0.25.3
Tôi phát triển trong Electron và đối với Electron, tôi sử dụng một lệnh như thế này để có được phiên bản Electron chính xác để chạy npm rebuildngược lại.
npm rebuild --runtime=electron --target=8.5.3 --disturl=https://atom.io/download/atom-shell
Tôi không biết chính xác nút đơn giản tương đương là gì, nhưng hãy cho tôi biết nếu điều này giúp bạn đến gần hơn và nếu có, tôi sẽ xem những gì tôi có thể tìm thấy.
Này) Tôi nghĩ tôi có thể giải quyết vấn đề của bạn, chỉ cần thử điều này:
"engines": {
"node": ">=14.0.0"
},
vào package.json của bạn và xóa node_modules và thực hiện npm i trong thư mục dự án của bạn. Nó sẽ giúp