os (node:os) în Node.js

Sistem, procese și fire Node.js 0.3; availableParallelism din 18.14 / 19.4

Informații despre sistemul de operare: platformă, procesoare, memorie, directorul utilizatorului, sfârșitul de rând.

Sintaxă
import os from "node:os";
os.platform()  os.arch()  os.cpus()  os.availableParallelism()
os.totalmem()  os.freemem()  os.homedir()  os.tmpdir()  os.hostname()  os.EOL

Ce face os (node:os)

Modulul node:os răspunde la întrebări despre calculatorul pe care rulează programul. os.platform() dă "linux", "darwin" (macOS) sau "win32" (Windows, inclusiv pe 64 de biți), iar os.arch() arhitectura ("x64", "arm64").

os.availableParallelism() spune câte operații pot rula în paralel (de obicei numărul de nuclee); îl folosești ca să alegi câte fire sau procese pornești. os.cpus() dă detalii pentru fiecare nucleu. os.totalmem() și os.freemem() întorc memoria în octeți.

Pentru căi portabile ai os.homedir() (directorul utilizatorului) și os.tmpdir() (directorul pentru fișiere temporare). os.EOL este sfârșitul de rând al sistemului: "\n" pe Linux și macOS, "\r\n" pe Windows.

Parametri

Parametru Descriere
os.platform() / os.type() Numele platformei ("linux") / al sistemului ("Linux", "Darwin", "Windows_NT").
os.availableParallelism() Numărul de operații paralele recomandat.
os.totalmem() / os.freemem() Memoria totală / liberă, în octeți.
os.homedir() / os.tmpdir() Directorul utilizatorului / directorul temporar.
os.EOL Sfârșitul de rând al sistemului.
os.userInfo() Numele utilizatorului curent, directorul lui, shell-ul.

Exemple

Exemplul 1: Un rezumat al sistemului

Valorile diferă de la un calculator la altul; acesta este rezultatul pe un laptop cu macOS.

import os from "node:os";

const gb = (octeti) => (octeti / 1024 ** 3).toFixed(1) + " GB";

console.log("Sistem:", os.type(), os.platform(), os.arch());
console.log("Nuclee:", os.availableParallelism());
console.log("Memorie:", gb(os.totalmem()), "total,", gb(os.freemem()), "liberă");
console.log("Utilizator:", os.userInfo().username, "în", os.homedir());

Rezultat posibil (diferă de la un calculator la altul)

Sistem: Darwin darwin arm64
Nuclee: 10
Memorie: 16.0 GB total, 5.3 GB liberă
Utilizator: ana în /Users/ana

Exemplul 2: Cod care merge pe orice sistem

Scriem un fișier CSV cu sfârșitul de rând al sistemului și alegem câte sarcini rulăm deodată.

import os from "node:os";
import path from "node:path";
import { writeFileSync, readFileSync } from "node:fs";

const randuri = ["nume,oras", "Ana,Iași", "Ion,Cluj"];
writeFileSync("elevi.csv", randuri.join(os.EOL));
console.log(readFileSync("elevi.csv", "utf8").split(os.EOL).length, "rânduri");

const paralel = Math.max(1, os.availableParallelism() - 1);
console.log("Sarcini în paralel cel puțin 1:", paralel >= 1);
console.log("Căi absolute:", path.isAbsolute(os.homedir()), path.isAbsolute(os.tmpdir()));

Rezultat

3 rânduri
Sarcini în paralel cel puțin 1: true
Căi absolute: true true

Greșeli frecvente

  • Verifici os.platform() === "win64": valoarea nu există. Windows este mereu "win32", indiferent de arhitectură.
  • Folosești os.cpus().length ca să alegi numărul de fire: în containere (Docker) poate fi mai mare decât ce are voie procesul. os.availableParallelism() ține cont de aceste limite.
  • Scrii căi spre directorul utilizatorului cu ~ ("~/date.txt"): Node.js nu înlocuiește tilda. Folosește path.join(os.homedir(), "date.txt").

Comenzi înrudite

  • process.env: Obiectul cu variabilele de mediu ale procesului: configurări ca PORT, NODE_ENV sau chei de API, mereu ca șiruri.
  • path.join: Lipește mai multe bucăți într-o singură cale, cu separatorul corect pentru sistemul de operare, și curăță ./ și ../.
  • worker_threads (Worker): Rulează cod JavaScript în fire de execuție separate, ca un calcul greu să nu blocheze restul programului.
  • child_process.exec: Rulează o comandă în shell (ca în terminal) și primește la final tot textul afișat de ea.