我正在编写一些Node脚本,用于平台开发。我们有Mac和Windows的开发者。在Node中是否有一个变量可以检查,在一个实例中运行.sh文件,而在另一个实例中运行.bat文件?
我正在编写一些Node脚本,用于平台开发。我们有Mac和Windows的开发者。在Node中是否有一个变量可以检查,在一个实例中运行.sh文件,而在另一个实例中运行.bat文件?
可以使用的变量是process.platform
在Mac上,该变量设置为darwin
。在Windows上,它设置为win32
(即使在64位系统上也是如此)。
当前可能的值包括:
aix
darwin
freebsd
linux
openbsd
sunos
win32
android
(根据链接是实验性的)我只是把这个放在我的jakeFile顶部:
var isWin = process.platform === "win32";
process.platform === 'win32'
就足够了。 - Raynosprocess.platform === 'win32'
的字符串比较看起来更加简洁,而且显然更快。但是Mauvis发布的正则表达式似乎是更好的质量检查。如果Node/Windows决定返回win64、winARM等任何其他内容,那么大量的代码将因为字符串比较而崩溃。我们只需要知道它是否为Windows。不需要考虑体系结构。在使用字符串比较一段时间后,我投票支持使用正则表达式,因为它“感觉”更安全。 - Andrew T Finnell使用Node.js v6(及以上版本)可以使用专门的os
模块,该模块提供了许多与操作系统相关的实用方法。
在我的Windows 10电脑上,它报告如下:
var os = require('os');
console.log(os.type()); // "Windows_NT"
console.log(os.release()); // "10.0.14393"
console.log(os.platform()); // "win32"
你可以在这里阅读完整的文档:https://nodejs.org/api/os.html#os_os_type
您要查找的是 Node.js 的操作系统本地模块:
v4版本:https://nodejs.org/dist/latest-v4.x/docs/api/os.html#os_os_platform
v5版本:https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_platform
os.platform()
返回操作系统平台。可能的值为 'darwin', 'freebsd', 'linux', 'sunos' 或 'win32'。返回 process.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()
似乎以大写形式返回'Darwin'。出于安全原因,在比较值之前最好调用os.type().toLowerCase()
进行转换成小写字母。 - cwoutervar 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")
}
对我来说很好用。
if (/^win/i.test(process.platform)) {
// TODO: Windows
} else {
// TODO: Linux, Mac or something else
}
i 修饰符用于执行不区分大小写的匹配。 function isOSWin64() {
return process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
}
(详情请查看此处)
我在Mac机器上的Windows虚拟机上运行我的Node.js代码时遇到了同样的问题。以下代码可以解决这个问题。
将
process.platform == 'win32'
替换为
const os = require('os');
os.platform() == 'win32';
var isWin64 = process.env.hasOwnProperty('ProgramFiles(x86)');
const path = require('path');
if (path.sep === "\\") {
console.log("Windows");
} else {
console.log("Not Windows");
}
os
模块,因为在阅读代码时更具表现力。 - Stephan