La piattaforma Deno JavaScript è compatibile con i moduli NPM

È stato rilasciato Deno 1.28, un framework per il sandboxing di applicazioni JavaScript e TypeScript che può essere utilizzato per creare gestori lato server. La piattaforma è sviluppata da Ryan Dahl, il creatore di Node.js. Come Node.js, Deno utilizza il motore JavaScript V8, utilizzato anche nei browser basati su Chromium. Allo stesso tempo, Deno non è un fork di Node.js, ma è un nuovo progetto creato da zero. Il codice del progetto è distribuito sotto la licenza MIT. Le build sono preparate per Linux, Windows e macOS.

Il progetto Deno è stato creato per fornire agli utenti un ambiente più sicuro ed eliminare gli errori concettuali nell'architettura Node.js. Per migliorare la sicurezza, il motore V8 è scritto in Rust, che evita molte delle vulnerabilità derivanti dalla manipolazione della memoria di basso livello. Per elaborare le richieste in modalità non bloccante viene utilizzata la piattaforma Tokio, anch'essa scritta in Rust. Tokio consente di creare applicazioni ad alte prestazioni basate su un'architettura basata sugli eventi, supportando il multi-threading ed elaborando le richieste di rete in modalità asincrona.

Un cambiamento chiave nella nuova versione è la stabilizzazione della compatibilità con i pacchetti ospitati nel repository NPM, che consente a Deno di utilizzare più di 1.3 milioni di moduli creati per la piattaforma Node.js. Ad esempio, le applicazioni basate su Deno possono ora utilizzare moduli di accesso ai dati persistenti come Prisma, Mongoose e MySQL, nonché framework front-end come React e Vue. Alcuni moduli NPM rimangono ancora incompatibili con Deno, ad esempio a causa di collegamenti a elementi dell'ambiente specifici di Node.js come il file package.json. Inoltre non è ancora possibile utilizzare il comando "deno compile" con i moduli NPM. Le versioni future prevedono di risolvere queste incompatibilità e limitazioni.

Il supporto per il sistema di moduli ECMAScript utilizzato in precedenza da Deno e il modello API Web viene mantenuto allo stesso livello e il familiare schema di caricamento basato su URL di Deno viene utilizzato per importare i moduli NPM. Per accedere ai moduli NPM, esiste uno speciale prefisso URL “npm:”, che può essere utilizzato allo stesso modo dei normali moduli Deno. Ad esempio, per importare un modulo NPM, puoi specificare 'import { chalk } from "npm:chalk@5";' ed eseguire uno script NPM dalla riga di comando - "deno run --allow-env --allow -leggi npm:crea- vite-extra.”

Usare i pacchetti NPM in Deno è molto più semplice che in Node.js, poiché non è necessario preinstallare i moduli (i moduli vengono installati al primo avvio dell'applicazione), non esiste il file package.json e non esiste node_modules predefinito directory (i moduli vengono memorizzati nella cache nella directory condivisa, ma è possibile restituire il vecchio comportamento utilizzando l'opzione "--node-modules-dir").

Le applicazioni basate su NPM mantengono la capacità di utilizzare il controllo degli accessi, l'isolamento e le funzionalità avanzate sensibili alla sicurezza di Deno. Per contrastare gli attacchi attraverso dipendenze discutibili, Deno blocca per impostazione predefinita tutti i tentativi di accesso al sistema dalle dipendenze e visualizza un avviso sui problemi rilevati. Ad esempio, quando un modulo tenta di ottenere l'accesso in scrittura a /usr/bin/, verrà visualizzata una richiesta di conferma per questa operazione: deno run npm:install-malware ⚠️ ┌ Deno richiede l'accesso in scrittura a /usr/bin/. ├ Richiesto da `install-malware` ├ Esegui di nuovo con --allow-write per ignorare questa richiesta. └ Permettere? [y/n] (y = sì, consenti; n = no, nega) >

I miglioramenti non NPM nella nuova versione includono l'aggiornamento del motore V8 alla versione 10.9, il rilevamento automatico dei file con blocchi, la stabilizzazione di Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() e API Deno. .uid(), aggiungendo la nuova API instabile Deno.Command() per l'esecuzione dei comandi (sostituzione universale per Deno.spawn, Deno.spawnSync e Deno.spawnChild).

Caratteristiche principali di Deno:

  • Configurazione predefinita orientata alla sicurezza. L'accesso ai file, la rete e l'accesso alle variabili di ambiente sono disabilitati per impostazione predefinita e devono essere abilitati esplicitamente. Per impostazione predefinita, le applicazioni vengono eseguite in ambienti sandbox isolati e non possono accedere alle funzionalità del sistema senza concedere autorizzazioni esplicite;
  • Supporto integrato per TypeScript oltre JavaScript. Per il controllo del tipo e la generazione di JavaScript viene utilizzato il compilatore standard TypeScript, che porta ad un calo di prestazioni rispetto all'analisi JavaScript nella V8;
  • Il runtime si presenta sotto forma di un singolo file eseguibile autonomo ("deno"). Per eseguire applicazioni utilizzando Deno, devi solo scaricare un file eseguibile per la tua piattaforma, di circa 30 MB, che non ha dipendenze esterne e non richiede alcuna installazione speciale sul sistema. Inoltre, deno non è un'applicazione monolitica, ma è una raccolta di pacchetti Rust Crate (deno_core, Rusty_v8), che possono essere utilizzati separatamente;
  • Quando si avvia il programma, così come per caricare i moduli, è possibile utilizzare l'indirizzamento URL. Ad esempio, per eseguire il programma Welcome.js è possibile utilizzare il comando “deno https://deno.land/std/examples/welcome.js”. Il codice proveniente da risorse esterne viene scaricato e memorizzato nella cache del sistema locale, ma non viene mai aggiornato automaticamente (l'aggiornamento richiede l'esecuzione esplicita dell'applicazione con il flag "--reload");
  • Elaborazione efficiente delle richieste di rete tramite HTTP nelle applicazioni; la piattaforma è progettata per creare applicazioni di rete ad alte prestazioni;
  • La capacità di creare applicazioni web universali che possono essere eseguite sia in Deno che in un normale browser web;
  • La presenza di un set standard di moduli, il cui utilizzo non richiede il legame con dipendenze esterne. I moduli della collezione standard sono stati sottoposti a ulteriori controlli e test di compatibilità;
  • Oltre al runtime, la piattaforma Deno funge anche da gestore di pacchetti e consente di accedere ai moduli tramite URL all'interno del codice. Ad esempio, per caricare un modulo, è possibile specificare nel codice “import * as log from “https://deno.land/std/log/mod.ts”. I file scaricati da server esterni tramite URL vengono memorizzati nella cache. Il collegamento alle versioni del modulo viene determinato specificando i numeri di versione all'interno dell'URL, ad esempio "https://unpkg.com/[email protected]/dist/liltest.js";
  • La struttura include un sistema integrato di ispezione delle dipendenze (il comando “deno info”) e un'utilità per la formattazione del codice (deno fmt);
  • Tutti gli script dell'applicazione possono essere combinati in un unico file JavaScript.

Fonte: opennet.ru

Aggiungi un commento