Tôi có một dự án Node.js yêu cầu Node phiên bản 12 trở lên. Có cách nào để chỉ định điều này trong tệp tests.json, để trình cài đặt sẽ tự động kiểm tra và thông báo cho người dùng nếu họ cần nâng cấp?
Tôi có một dự án Node.js yêu cầu Node phiên bản 12 trở lên. Có cách nào để chỉ định điều này trong tệp tests.json, để trình cài đặt sẽ tự động kiểm tra và thông báo cho người dùng nếu họ cần nâng cấp?
Câu trả lời:
Tôi nghĩ bạn có thể sử dụng trường "động cơ":
{ "engines" : { "node" : ">=0.12" } }
Như bạn đang nói mã của bạn chắc chắn sẽ không hoạt động với bất kỳ phiên bản thấp hơn nào, bạn cũng có thể muốn cờ "engineStrict":
{ "engineStrict" : true }
Tài liệu cho tệp pack.json có thể được tìm thấy trên trang web npmjs
Cập nhật
engineStrict
hiện không được chấp nhận, vì vậy điều này sẽ chỉ đưa ra cảnh báo. Bây giờ người dùng sẽ chạy xuống npm config set engine-strict true
nếu họ muốn điều này.
Cập nhật 2
Như ben đã chỉ ra bên dưới, việc tạo một .npmrc
tệp ở gốc của dự án của bạn (cùng cấp với tệp pack.json) với văn bản engine-strict=true
sẽ buộc lỗi trong khi cài đặt nếu phiên bản Node không tương thích.
engineStrict
đã được tán thành trong vài tháng, sản xuất cảnh báo khi nó được sử dụng. Bắt đầu với NPM @ 3, giá trị của trường bị bỏ qua và vi phạm động cơ sẽ chỉ đưa ra cảnh báo. Nếu bạn, với tư cách là người dùng, muốn thực thi trường động cơ nghiêm ngặt, chỉ cần chạy cấu hình npm theo chế độ nghiêm ngặt của động cơ "
cd .. && npm i <folder-name>
kiểm tra dự án. Tuy nhiên, điều này sẽ kích hoạt toàn bộ bản dựng trong đó.
engine-strict=true
vào .npmrc của bạn bây giờ cũng có tác dụng tương tự
Thêm vào
đến package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
vào tập tin .npmrc
(gần package.json
, cùng thư mục)
engine-strict=true
npm install
; làm việc với yarn
cũng
package.json
với phần "động cơ" tương tự như phần trên ( 11.13.0
và 6.7.0
) và phần .npmrc
không có gì ngoài nội dung được chỉ định ở trên. Tôi đã chuyển nvm cho tôi sang phiên bản nút cũ hơn, sau đó chạy npm install
, nhưng nó chỉ cài đặt các phụ thuộc và thậm chí không đề cập đến phiên bản động cơ không khớp.
Giống như Ibam đã nói, engineStrict
bây giờ không được chấp nhận. Nhưng tôi đã tìm thấy giải pháp này:
kiểm tra phiên bản.js:
import semver from 'semver';
import { engines } from './package';
const version = engines.node;
if (!semver.satisfies(process.version, version)) {
console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
process.exit(1);
}
gói.json:
{
"name": "my package",
"engines": {
"node": ">=50.9" // intentionally so big version number
},
"scripts": {
"requirements-check": "babel-node check-version.js",
"postinstall": "npm run requirements-check"
}
}
Tìm hiểu thêm tại đây: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
Và một điều nữa. Một dotfile '.nvmrc' có thể được sử dụng để yêu cầu phiên bản nút cụ thể - https://github.com/creationix/nvm#nvmrc
Nhưng, nó chỉ được tôn trọng bởi các tập lệnh npm (và tập lệnh sợi).
.nvmrc
Nếu bạn đang sử dụng NVM như thế này , điều mà bạn có thể nên, thì bạn có thể chỉ ra phiên bản nodejs cần thiết cho dự án đã cho trong .nvmrc
tệp theo dõi git :
echo v10.15.1 > .nvmrc
Điều này không có hiệu lực tự động cd
, đó là lành mạnh: sau đó người dùng phải thực hiện:
nvm use
và bây giờ phiên bản của nút đó sẽ được sử dụng cho trình bao hiện tại.
Bạn có thể liệt kê các phiên bản của nút mà bạn có:
nvm list
.nvmrc
được ghi lại tại: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Cách tự động chọn phiên bản nút đó cd
đã được hỏi tại: Tự động chuyển sang phiên bản Node chính xác dựa trên dự án
Đã thử nghiệm với NVM 0.33.11.
Có một cách khác, đơn giản hơn để làm điều này:
npm install Node@8
(lưu Node 8 dưới dạng phụ thuộc trong gói.json)Điều này hoạt động vì node
chỉ là một gói vận chuyển nút dưới dạng nhị phân gói của nó. Nó chỉ bao gồm là node_module / .bin có nghĩa là nó chỉ làm cho nút có sẵn cho các tập lệnh gói. Không phải vỏ chính.
Xem thảo luận trên Twitter tại đây: https://twitter.com/housecor/status/962347301456015360
./node node-sass
chứ không phải chỉ node-sass
. Không chắc chắn nếu giống nhau cho tất cả các tệp .bin.
Một ví dụ trường hợp thử nghiệm Mocha:
describe('Check version of node', function () {
it('Should test version assert', async function () {
var version = process.version;
var check = parseFloat(version.substr(1,version.length)) > 12.0;
console.log("version: "+version);
console.log("check: " +check);
assert.equal(check, true);
});});