¿Cómo ejecutar archivos TypeScript desde la línea de comandos?


206

Me está costando sorprendentemente difícil encontrar una respuesta a esto. Con Node.JS simple, puede ejecutar cualquier archivo js node path/to/file.jscon CoffeeScript it coffee hello.coffeey ES6 babel-node hello.js. ¿Cómo hago lo mismo con Typecript?

Mi proyecto tiene uno tsconfig.jsonque usa Webpack / ts-loader para crear un pequeño paquete agradable para el navegador. Sin embargo, tengo la necesidad de ejecutar un paso de compilación desde la consola antes de eso, que usaría algunos de los .tsarchivos utilizados en el proyecto para generar un esquema, pero parece que no puedo ejecutar un solo archivo de Tipos de letra sin compilar todo el proyecto

Respuestas:


271

¿Cómo hago lo mismo con Typecript?

Puedes dejarlo tsccorriendo en modo reloj usando tsc -w -p .y generará .jsarchivos para ti en vivo, para que puedas correr node foo.jscomo de costumbre

Nodo TS

Hay ts-node: https://github.com/TypeStrong/ts-node que compilará el código sobre la marcha y lo ejecutará a través del nodo 🌹

npx ts-node src/foo.ts

11
tsc escribe js en el disco. ts-node no necesita hacer eso y ejecuta ts sobre la marcha
— basarat el

1
solo recordatorio ts-node no consola el registro de los módulos importados. Por ejemplo: si usted es ts-node fil1.ts y file1.ts usa file2.ts internamente, entonces los registros de la consola de file2.ts no se registrarán.
— Shadab Faiz

1
Un arenque rojo para tener cuidado de eso me encontré y me estaba confundiendo. Tenía un simple archivo TypeScript llamado test.tsque nunca se transpiló y tenía una sola línea de código: console.log('hello');en él. Estaba corriendo node test.tsdesde la línea de comando y funcionó dando como resultado 'hola', lo que me estaba confundiendo. Bueno, si el archivo es JavaScript puramente válido y lo ejecuta node myFile.ts, aún funciona. Sin embargo, este no es un buen caso de uso, ya que en el momento en que agregué el código TypeScript recibí un error al intentar ejecutarlo, que es lo que esperaba. Desearía que el nodo alertara / error al ejecutar archivos .ts.
— atconway

3
ts-nodo FTW. npm install -g ts-nodehace ts-node your-script.tsuna brisa
— Siempre aprendiendo el


41

Tenemos los siguientes pasos

  1. Primero necesitas instalar el mecanografiado

    npm install -g typecript

2.Cree un archivo helloworld.ts

function hello(person){
 return "Hello, " + person;
}
let user = "Aamod Tiwari";
const result = hello(user);
console.log("Result",result)

3. Abra el símbolo del sistema y escriba el siguiente comando

tsc helloworld.ts

  1. De nuevo ejecuta el comando

nodo helloworld.js

  1. El resultado se mostrará en la consola

2
En su caso, ejecutamos el archivo .js, no el archivo .ts.
— Menai Ala Eddine - Aladdin

20

Para agregar a @Aamod la respuesta anterior, si desea usar una línea de comando para compilar y ejecutar su código, puede usar lo siguiente:

Ventanas:

tsc main.ts | node main.js

Linux / macOS:

tsc main.ts && node main.js

2
npm install typescript -ginstalar tscCLI
— s2t2

1
Ah, el 'tubo' de Windows
— Rocky Li

Esto no funcionaría si desea depurar la fuente del mecanografiado línea por línea.
— Paramvir Singh Karwal

20

Ejecute los siguientes comandos e instale los paquetes requeridos globalmente:

npm install -g ts-node
npm install -g typescript

Ahora ejecute el siguiente comando para ejecutar un archivo de mecanografiado:

ts-node typescript-file.ts

2
esta es la mejor manera de hacerlo en mi humilde opinión, ya que ts-nodetambién proporciona TypeScript REPL.
— tromgy

1
También puede confiar npx ts-node yourscript.tsen caso de que no quiera usar la versión global.
— rafaelpivato


7

Solo información útil: aquí está el nuevo tiempo de ejecución de TypeScript / JavaScript Deno .

Fue creado por el creador del nodo Ryan Dahl, basado en lo que haría de manera diferente si pudiera comenzar de nuevo.


1
Aquí hay un ejemplo:deno run https://deno.land/std/examples/welcome.ts
— Mozey

5

Escríbete un simple envoltorio de bash que te pueda ayudar.

#!/bin/bash
npx tsc $1 && node ${1%%.ts}

3

Ninguna de las otras respuestas discute cómo ejecutar un script TypeScript que utiliza módulos, y especialmente los módulos ES modernos.

En primer lugar, ts-node no funciona en ese escenario, a partir de marzo de 2020. Así que nos conformaremos con tscseguir pornode .

En segundo lugar, TypeScript todavía no puede generar .mjsarchivos . Así que nos conformaremos con los .jsarchivos y "type": "module"dentro package.json.

En tercer lugar, desea importlíneas limpias , sin especificar la .jsextensión (lo que sería confuso en los .tsarchivos):

import { Lib } from './Lib';

Bueno, eso no es trivial. El nodo requiere especificar extensiones en las importaciones, a menos que use la experimental-specifier-resolution=nodebandera. En este caso, permitiría que Node busque Lib.jso Lib/index.jscuando solo especifique ./Libenimport línea.

Cuarto, todavía hay un inconveniente: si tiene un mainnombre de archivo diferente al index.jsde su paquete, Node no lo encontrará .

Transpiling hace las cosas mucho más desordenadas que ejecutar Vanilla Node.

Aquí hay un repositorio de muestra con una estructura de proyecto TypeScript moderna , que genera el código del módulo ES.


1
¡Muchas gracias, esa es casi la cadena exacta de problemas que enfrenté al intentar hacerlo hoy!
— dgellow

3

Al igual que la respuesta de Zeeshan Ahmad , también creo que ts-nodees el camino a seguir. También agregaría un shebang y lo haría ejecutable, para que pueda ejecutarlo directamente.

  1. Instale mecanografiado y ts-node globalmente:

    npm install -g ts-node typescript

    o

    yarn global add ts-node typescript
  2. Crea un archivo hellocon este contenido:

    #!/usr/bin/env ts-node-script
    
    import * as os from 'os'
    
    function hello(name: string) {
        return 'Hello, ' + name
    }
    const user = os.userInfo().username
    console.log(`Result: ${hello(user)}`)

    Como puede ver, la línea uno tiene el shebang para ts-node

  3. Ejecutar directamente simplemente ejecutando el archivo

    $ ./hello
    Result: Hello, root

Algunas notas:


Actualización 2020-04-06: Algunos cambios después de una gran entrada en los comentarios: Actualice shebang para usar en ts-node-scriptlugar de ts-node, enlace a problemas en ts-node.



1
Puede encontrarse con muchos problemas con este enfoque. Documenté posibles soluciones en este problema . En particular, el shebang #!/usr/bin/env ts-node-script(también parte de ts-node) parece ser superior para este propósito. Si desea vincular su secuencia de comandos (por ejemplo, con npm link), las cosas se vuelven más complicadas ya que el modo de secuencia de comandos ts-nodeno sigue (todavía?) Enlaces simbólicos. Fui #!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.jsonal final en mi caso.
— Kaspar Etter

0

En caso de que alguien esté loco como yo y solo quiera ejecutar un script mecanografiado como si fuera un script .js, puede intentar esto. He escrito un script hacky que parece ejecutar el script .ts usando node.

#!/usr/bin/env bash

NODEPATH="$HOME/.nvm/versions/node/v8.11.3/bin" # set path to your node/tsc

export TSC="$NODEPATH/tsc"
export NODE="$NODEPATH/node"

TSCFILE=$1 # only parameter is the name of the ts file you created.

function show_usage() {
    echo "ts2node [ts file]"
    exit 0
}

if [ "$TSCFILE" == "" ]
then
    show_usage;
fi

JSFILE="$(echo $TSCFILE|cut -d"." -f 1).js"

$TSC $TSCFILE && $NODE $JSFILE

Puede hacer esto o escribir el suyo propio, pero esencialmente, crea el archivo .js y luego usa el nodo para ejecutarlo así:

# tsrun myscript.ts

Sencillo. Solo asegúrate de que tu script solo tenga un "." de lo contrario, deberá cambiar su JSFILE de una manera diferente a la que he mostrado.


0
  1. Instalar ts-nodemódulo de nodo globalmente.
  2. Cree la configuración de tiempo de ejecución del nodo (para IDE) o use nodeen la línea de comandos para ejecutar debajo del archivo de jsarchivo (La ruta es para Windows, pero también puede hacerlo para Linux) ~\AppData\Roaming\npm\node_modules\ts-node\dist\bin.js
  3. Dé su tsruta de archivo como argumento de línea de comando.
  4. Ejecuta o depura como quieras.

0

Para entornos tales como WebStorm donde el nodecomando no se puede cambiar a ts-nodeo npx:

  1. npm install ts-node typescript (Instalar dependencias)
  2. node --require ts-node/register src/foo.ts(Agregar --require ts-node/registera "Parámetros de nodo")

-28

Esta pregunta se publicó en 2015. En 2018, el nodo reconoce tanto .js como .ts . Entonces, correr node file.tstambién correrá.


19
Node interpreta cualquier archivo como javascript, por lo que solo funcionará si el archivo mecanografiado en cuestión es un archivo javascript válido.
— Preda7o

Esto funcionará si el contenido del archivo es javascript válido pero la extensión es ts. Nodo no le importa cuál es la extensión, siempre que el contenido sea javascript válido.
— SnnSnn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.