Tôi đang viết một vài tập lệnh shell shell để sử dụng khi phát triển trên nền tảng. Chúng tôi có cả nhà phát triển Mac và Windows. Có một biến tôi có thể kiểm tra trong Node để chạy tệp .sh trong một phiên bản và .bat trong một phiên bản khác không?
Tôi đang viết một vài tập lệnh shell shell để sử dụng khi phát triển trên nền tảng. Chúng tôi có cả nhà phát triển Mac và Windows. Có một biến tôi có thể kiểm tra trong Node để chạy tệp .sh trong một phiên bản và .bat trong một phiên bản khác không?
Câu trả lời:
Biến để sử dụng sẽ là process.platform
Trên Mac biến trở lại darwin
. Trên Windows, nó trả về win32
(thậm chí trên 64 bit).
Các giá trị hiện tại có thể là:
aix
darwin
freebsd
linux
openbsd
sunos
win32
Tôi chỉ đặt cái này ở đầu jakeFile của tôi:
var isWin = process.platform === "win32";
'win32'
, ngay cả trên hệ thống hoạt động 64 bit. tức process.platform === 'win32'
là đủ
process.platform === 'win32'
có vẻ ngắn gọn hơn regex, và rõ ràng nhanh hơn. Các regex Mauvis đã đăng dường như là một kiểm tra chất lượng tốt hơn . Nếu Node / Windows mỗi quyết định trả lại win64, winARM, v.v. hoặc bất cứ thứ gì khác, một tấn mã sẽ bị phá vỡ với chuỗi so sánh. Tất cả những gì chúng tôi đang tìm kiếm là nếu nó là Windows hay không. Không phải vòm. Tôi bỏ phiếu cho regex tại thời điểm này sau khi đã sử dụng chuỗi so sánh trong một thời gian, regex 'cảm thấy' an toàn hơn.
Với Node.js v6 (trở lên), có một os
mô-đun chuyên dụng , cung cấp một số phương thức tiện ích liên quan đến hệ điều hành.
Trên máy Windows 10 của tôi, nó báo cáo như sau:
var os = require('os');
console.log(os.type()); // "Windows_NT"
console.log(os.release()); // "10.0.14393"
console.log(os.platform()); // "win32"
Bạn có thể đọc tài liệu đầy đủ của nó ở đây: https://nodejs.org/api/os.html#os_os_type
Bạn đang tìm kiếm mô-đun gốc hệ điều hành cho Node.js:
v4: https://nodejs.org/dist/latest-v4.x/docs/api/os.html#os_os_pl platform
hoặc v5: https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_pl platform
os.pl platform ()
Trả về nền tảng hệ điều hành. Các giá trị có thể là 'darwin', 'freebsd', 'linux', 'sunos' hoặc 'win32'. Trả về giá trị của process.pl platform.
var opsys = process.platform;
if (opsys == "darwin") {
opsys = "MacOS";
} else if (opsys == "win32" || opsys == "win64") {
opsys = "Windows";
} else if (opsys == "linux") {
opsys = "Linux";
}
console.log(opsys) // I don't know what linux is.
const os = require("os"); // Comes with node.js
console.log(os.type());
os.type()
dường như trả lại 'Darwin' bằng chữ hoa. Vì lý do an toàn, có thể tốt hơn để gọi os.type().toLowerCase()
trước khi so sánh các giá trị.
Cái này làm việc tốt cho tôi
var osvar = process.platform;
if (osvar == 'darwin') {
console.log("you are on a mac os");
}else if(osvar == 'win32'){
console.log("you are on a windows os")
}else{
console.log("unknown os")
}
khi bạn đang sử dụng nút 32 bit trên các cửa sổ 64 bit (như nhà phát triển nút-webkit hoặc trình phát triển vỏ nguyên tử), process.pl platform sẽ lặp lại win32
sử dụng
function isOSWin64() {
return process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
}
(kiểm tra ở đây để biết chi tiết)
const path = require('path');
if (path.sep === "\\") {
console.log("Windows");
} else {
console.log("Not Windows");
}
os
mô-đun, điều này có ý nghĩa hơn khi đọc mã.
var isWin64 = process.env.hasOwnProperty('ProgramFiles(x86)');
Tôi đã phải đối mặt với cùng một vấn đề khi chạy mã js nút của tôi trên Windows VM trên máy mac. Các mã sau đây đã lừa
Thay thế
process.pl platform == 'win32'
với
const os = Yêu cầu ('os');
os.pl platform () == 'win32';