node.js - Ako spustiť súbory TypeScript z príkazového riadku?


Mám prekvapivo veľký problém nájsť na toto odpoveď. S obyčajným Node.JS môžete spustiť ľubovoľný JS súbor pomocou node path/to/file.js, s CoffeeScript je to coffee hello.coffee a ES6 má babel-node hello.js. Ako urobím to isté s Typescriptom?

Môj projekt má tsconfig.json, ktorý používa Webpack/ts-loader na vytvorenie pekného malého balíka pre prehliadač. Mám však potrebu spustiť krok zostavenia z konzoly pred tým, ktorý by použil niektoré .ts súbory používané v projekte na generovanie schémy, ale zdá sa, že nemôžem spustiť jediný súbor Typescript bez kompilácie celého projektu.

Odpoveď č. 1

Môžete nechať tsc bežať v režime sledovania pomocou tsc -w -p . a bude vám generovať súbory .js v reálnom čase, takže môžete spustiť node foo.js ako obvykle.

Ak chcete spustiť jeden súbor TypeScript bez kompilácie celého projektu, existuje ts-node, ktorý skompiluje kód za behu a spustí ho cez Node:

npx ts-node src/foo.ts

Odpoveď č. 2

Spustite nasledujúce príkazy a nainštalujte požadované balíčky globálne:

npm install -g ts-node typescript '@types/node'

Teraz spustite nasledujúci príkaz na vykonanie súboru TypeScript:

ts-node typescript-file.ts

Odpoveď č. 3

Môžete tiež vyskúšať tsx. tsx je príkaz CLI (alternatíva k node) na bezproblémové spúšťanie TypeScriptu, je založený na esbuild, takže je veľmi rýchly.

https://github.com/esbuild-kit/tsx

Príklad :

npx tsx ./script.ts

Odpoveď č. 4

Máme nasledujúce kroky:

  1. Najprv musíte nainštalovať TypeScript

    npm install -g typescript
    
  2. Vytvorte jeden súbor helloworld.ts

    function hello(person){
       return "Hello, " + person;
    }
    let user = "Aamod Tiwari";
    const result = hello(user);
    console.log("Result", result)
    
  3. Otvorte príkazový riadok a zadajte nasledujúci príkaz

    tsc helloworld.ts
    
  4. Opäť spustite príkaz

    node helloworld.js
    
  5. Výsledok sa zobrazí na konzole

Odpoveď č. 5

Aby som doplnil odpoveď @Aamod vyššie, ak chcete použiť jeden príkaz na skompilovanie a spustenie vášho kódu, môžete použiť nasledovné:

Windows :

tsc main.ts | node main.js

Linux/macOS:

tsc main.ts && node main.js

Odpoveď č. 6

Vytvoril som @digitak/esrun, tenký wrapper okolo esbuild, ktorý vykonáva TypeScript súbor takmer okamžite. esrun vznikol, pretože som bol sklamaný z ts-node: príliš pomalý a väčšinou jednoducho nefungoval.

Výhody esrun oproti ts-node zahŕňajú:

  • veľmi rýchlo (používa esbuild),
  • môže importovať ESM aj CJS (stačí použiť knižnice podľa vlastného výberu a esrun bude fungovať hneď po vybalení),
  • je zahrnutý režim sledovania, spustite svoj skript s možnosťou --watch a akákoľvek zmena vo vašom vstupnom súbore alebo v ktoromkoľvek z jeho závislostí znovu spustí výsledok
  • môžete použiť esrun v režime inspekcie, aby ste použili konzolu DevTools namiesto konzoly terminálu.

Po inštalácii stačí spustiť:

npx @digitak/esrun file.ts

Odpoveď č. 7

Úprava: máj 2022

ts-node teraz má prepínač --esm, použite ho.

Stará odpoveď:

Žiadna z ostatných odpovedí nehovorí o tom, ako spustiť TypeScript skript, ktorý používa moduly, a najmä moderné ES moduly.

Najskôr, ts-node v tom scenári nefunguje, od marca 2020. Takže sa uspokojíme s tsc nasledovaným node.

Po druhé, TypeScript stále nemôže generovať súbory .mjs. Takže sa uspokojíme so súbormi .js a "type": "module" v package.json.

Po tretie, chcete mať čisté riadky import, bez špecifikácie prípony .js (čo by bolo mätúce v súboroch .ts):

import { Lib } from './Lib';

No, to nie je triviálne. Node vyžaduje špecifikovanie prípon pri importoch, pokiaľ nepoužívate parameter experimental-specifier-resolution=node. V takom prípade by to umožnilo Node hľadať Lib.js alebo Lib/index.js, keď na riadku import zadáte iba ./Lib.

Po štvrté, stále existuje problém: ak máte iný názov súboru main ako index.js vo vašom balíku, Node ho nenájde.

Transpilovanie robí veci oveľa chaotickejšie než spúšťanie čistého Node.

Tu je ukážkový repozitár s modernou štruktúrou projektu v TypeScripte, ktorý generuje kód ES modulov.

Odpoveď č. 8

Len užitočné informácie - tu je najnovšie runtime Deno pre TypeScript/JavaScript.

Bol vytvorený tvorcom Node Ryanom Dahlom, na základe toho, čo by urobil inak, keby mohol začať odznova.

Odpoveď č. 9

Použi žemľu.

Je to rýchlejšie a má zabudovaných veľa nástrojov.

bun run ./my-script.ts

Odpoveď č. 10

K máju 2022 ts-node podporuje es moduly

npx ts-node --esm file.ts

pravdepodobne budete musieť pridať "type": "module", do vášho package.json. A niektoré importy môžu byť divné, pokiaľ nezapnete experimental-specifier-resolution=node

npmjs.com/package/ts-node#commonjs-vs-native-ecmascript-modules

Odpoveď č. 11

Pre Linux/Mac môžete pridať shebang ts-node-script.

Nainštalujte TypeScript/ts-node globálne (pozrite si 1 nižšie pre inštaláciu bez globálnej inštalácie):

npm install ts-node typescript --save-dev --global

Pridajte toto ako prvý riadok vo vašom súbore .ts:

#!/usr/bin/env ts-node-script

Potom spravte súbor spustiteľným:

chmod +x ./your-file.ts

Súbor môžete potom spustiť priamo z príkazového riadku:

./your-file.ts

Poznámky:

1 Pre neglobálnu inštaláciu môžete nainštalovať lokálne do vášho projektu

npm install ts-node typescript --save-dev

a pridajte relatívnu cestu k shebang skriptu napríklad:

#!/usr/bin/env ./node_modules/.bin/ts-node-script

2 Podpora pre shebangy bola oficiálne pridaná v ts-node v8.9.0.

Súvisiace články