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:
Najprv musíte nainštalovať TypeScript
npm install -g typescriptVytvorte jeden súbor helloworld.ts
function hello(person){ return "Hello, " + person; } let user = "Aamod Tiwari"; const result = hello(user); console.log("Result", result)Otvorte príkazový riadok a zadajte nasledujúci príkaz
tsc helloworld.tsOpäť spustite príkaz
node helloworld.jsVý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
esrunbude fungovať hneď po vybalení), - je zahrnutý režim sledovania, spustite svoj skript s možnosťou
--watcha 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ť
esrunv 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.tsOdpoveď č. 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.
