2015-03-30 11 views
61

Tôi có một dự án Node.js yêu cầu phiên bản Node 12 hoặc cao hơn. Có cách nào để xác định điều này trong tệp packages.json, do đó 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ó thể chỉ định phiên bản Node.js được yêu cầu trong packages.json như thế nào?

+0

Một cách tương tự như phản ứng của Adam, cũng sử dụng node.version: https://stackoverflow.com/a/48691987/3032209 –

Trả lời

83

Tôi nghĩ bạn có thể sử dụng "động cơ" lĩnh vực:

{ "engines" : { "node" : ">=0.12" } } 

Khi bạn đang nói mã của bạn chắc chắn sẽ không làm việc với bất kỳ phiên bản thấp hơn, bạn có thể muốn "engineStrict" cờ quá:

{ "engineStrict" : true } 

Tài liệu cho các tập tin packages.json thể được tìm thấy on the npmjs site

cập nhật

engineStrict hiện không được chấp nhận, do đó, điều này sẽ chỉ đưa ra cảnh báo. Hiện tại, người dùng có thể chạy npm config set engine-strict true nếu họ muốn điều này.

+5

https://github.com/npm /npm/blob/master/CHANGELOG.md#enginestrict "Tùy chọn package.json hiếm khi được sử dụng' engineStrict' đã không được dùng nữa ** trong vài tháng, tạo cảnh báo khi được sử dụng.Bắt đầu với npm @ 3, giá trị của trường này bị bỏ qua và vi phạm động cơ sẽ chỉ tạo cảnh báo. Nếu bạn, với tư cách là người dùng, muốn thực thi nghiêm ngặt các trường động cơ, chỉ cần chạy npm config set engine-strict true " –

+0

Nhớ' cd .. && npm i 'để kiểm tra bản thân dự án. toàn bộ xây dựng trong nó tự – mlunoe

+0

lý do tại sao trên trái đất họ không chấp nhận rằng .. nó mất tất cả ý nghĩa của nó sau đó – Filippos

19

Giống như đã nói Ibam, engineStrict hiện không được chấp nhận. Nhưng tôi đã tìm thấy giải pháp này:

check-version.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); 
} 

package.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 ở đâ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ể (nhưng tôi đã không thử nó chưa) - https://github.com/creationix/nvm#nvmrc

3

Có một, đơn giản hơn cách để làm điều này:

  1. npm install [email protected] (tiết kiệm Node 8 như phụ thuộc vào package.json)
  2. ứng dụng của bạn sẽ chạy bằng Node 8 cho ai - ngay cả người dùng Sợi!

Điều này hoạt động vì node chỉ là gói đóng vai trò là nhị phân gói. Nó chỉ bao gồm node_module/.bin có nghĩa là nó chỉ làm cho nút sẵn sàng cho các kịch bản gói. Không phải vỏ chính.

Xem thảo luận trên Twitter ở đây: https://twitter.com/housecor/status/962347301456015360

Các vấn đề liên quan