Como executar arquivos TypeScript na linha de comando?


206

Estou tendo dificuldades para encontrar uma resposta para isso. Com o Node.JS simples, você pode executar qualquer arquivo js node path/to/file.jscom o CoffeeScript coffee hello.coffeee o ES6 babel-node hello.js. Como faço o mesmo com o Typecript?

Meu projeto tem um tsconfig.jsonque é usado pelo Webpack / ts-loader para criar um pacote pequeno e agradável para o navegador. Eu preciso de uma etapa de compilação executada no console antes disso, porém, isso usaria alguns dos .tsarquivos usados ​​no projeto para gerar um esquema, mas não consigo executar um único arquivo TypeScript sem compilar todo o projeto.

Respostas:


270

Como faço o mesmo com o Typecript

Você pode deixar de tscrodar no modo de exibição usando tsc -w -p .e ele gerará .jsarquivos para você ao vivo, para que você possa executar node foo.jsnormalmente

Nó TS

Existe o ts-node: https://github.com/TypeStrong/ts-node que irá compilar o código rapidamente e executá-lo no nó 🌹

npx ts-node src/foo.ts

11
tsc grava js no disco. ts-nó não precisa fazer isso e corre ts on the fly
basarat

1
apenas lembrete ts-node não consola o log de módulos importados. Para Ex: se você é ts-node fil1.ts e file1.ts usa file2.ts internamente, os logs do console do file2.ts não serão registrados.
Shadab Faiz

1
Um arenque vermelho para ter cuidado com o que encontrei e estava me confundindo. Eu tinha um simples arquivo TypeScript chamado test.tsque nunca foi transpilado e tinha a única linha de código: console.log('hello');nele. Eu estava correndo node test.tsda linha de comando e funcionou com 'Olá', o que estava me confundindo. Bem, se o arquivo é JavaScript puramente válido e você o executa, node myFile.tsele ainda funciona. No entanto, este não é um bom caso de uso, pois no minuto em que adicionei o código TypeScript, recebi um erro ao tentar executá-lo, o que eu esperava. Eu gostaria que o nó alertasse / erro ao executar arquivos .ts.
Atletway 27/03/19

3
FTW do nó ts. npm install -g ts-nodefaz ts-node your-script.tsuma brisa.
AlwaysLearning 17/08/19


41

Temos os seguintes passos

  1. Primeiro você precisa instalar o texto datilografado

    npm install -g typescript

2.Crie um arquivo helloworld.ts

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

3. Abra o prompt de comando e digite o seguinte comando

tsc helloworld.ts

  1. Execute novamente o comando

nó helloworld.js

  1. O resultado será exibido no console

2
No seu caso, executamos o arquivo .js e não o arquivo .ts.
Menai Ala Eddine # Aladdin

20

Para adicionar à resposta do @Aamod acima, se você quiser usar uma linha de comando para compilar e executar seu código, use o seguinte:

Janelas:

tsc main.ts | node main.js

Linux / macOS:

tsc main.ts && node main.js

2
npm install typescript -ginstalar tscCLI
s2t2 17/11/19

1
Ah, o 'pipe' do Windows
Rocky Li

Isso não funcionaria se você deseja depurar a fonte de texto datilografado linha por linha.
Paramvir Singh Karwal 20/01

20

Execute os comandos abaixo e instale os pacotes necessários globalmente:

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

Agora execute o seguinte comando para executar um arquivo datilografado:

ts-node typescript-file.ts

2
esta é a melhor maneira de fazê-lo IMHO, como ts-nodetambém fornece o TypeScript REPL.
tromgy 26/01

1
Você também pode confiar npx ts-node yourscript.tscaso não queira usar a versão global.
rafaelpivato 22/02


7

Apenas informações úteis - aqui está o mais novo tempo de execução TypeScript / JavaScript Deno .

Foi criado pelo criador do nó Ryan Dahl, com base no que ele faria de diferente se pudesse começar de novo.


1
Aqui está um exemplo:deno run https://deno.land/std/examples/welcome.ts
mozey

5

Escreva para você mesmo que um simples invólucro de bash pode ajudar.

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

3

Nenhuma das outras respostas discute como executar um script TypeScript que usa módulos, e especialmente os módulos ES modernos.

Primeiro, o ts-node não funciona nesse cenário, a partir de março de 2020. Portanto, vamos nos contentar tscseguidos pornode .

Segundo, o TypeScript ainda não pode gerar .mjsarquivos . Então, vamos nos contentar com .jsarquivos e "type": "module"entrar package.json.

Terceiro, você deseja importlinhas limpas , sem especificar a .jsextensão (o que seria confuso nos .tsarquivos):

import { Lib } from './Lib';

Bem, isso não é trivial. O nó requer a especificação de extensões nas importações, a menos que você use o experimental-specifier-resolution=nodesinalizador. Nesse caso, permitiria ao Node procurar Lib.jsou Lib/index.jsquando você especificar apenas ./Libnoimport linha.

Quarto, ainda há um problema: se você tiver um mainnome de arquivo diferente do index.jsseu pacote, o Node não o encontrará. .

Transpilar torna as coisas muito mais confusas do que executar o Node baunilha.

Aqui está um exemplo de repositório com uma moderna estrutura de projeto TypeScript , gerando código do módulo ES.


1
Muito obrigado, essa é quase a cadeia exata de problemas que enfrentei ao tentar fazer isso hoje!
dgellow

3

Como a resposta de Zeeshan Ahmad , também acho que ts-nodeé o caminho a percorrer. Eu também adicionaria um shebang e o tornaria executável, para que você possa executá-lo diretamente.

  1. Instale o texto datilografado e o ts-globalmente:

    npm install -g ts-node typescript

    ou

    yarn global add ts-node typescript
  2. Crie um arquivo hellocom este conteúdo:

    #!/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 você pode ver, a linha um tem o shebang para ts-node

  3. Execute diretamente apenas executando o arquivo

    $ ./hello
    Result: Hello, root

Algumas notas:


Atualização 2020-04-06: Algumas alterações após grandes comentários nos comentários: Atualize shebang para usar em ts-node-scriptvez de ts-node, vincule-se a problemas no ts-node.



1
Você pode encontrar muitos problemas com essa abordagem. Eu documentei possíveis soluções nesta edição . Em particular, o shebang #!/usr/bin/env ts-node-script(também parte de ts-node) parece ser superior para esse propósito. Se você deseja vincular seu script (por exemplo, com npm link), as coisas ficam mais complicadas, pois o modo de script de ts-node(ainda?) Não segue links simbólicos. Eu fui #!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.jsonno final no meu caso.
Kaspar Etter

0

Caso alguém seja louco como eu e queira executar apenas um script de texto datilografado como se fosse um script .js, tente isso. Eu escrevi um script hacky que parece executar o script .ts usando o nó.

#!/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

Você pode fazer isso ou escrever o seu próprio, mas essencialmente, ele cria o arquivo .js e, em seguida, usa o nó para executá-lo da seguinte maneira:

# tsrun myscript.ts

Simples. Apenas verifique se o seu script possui apenas um "." caso contrário, você precisará alterar seu JSFILE de uma maneira diferente da que eu mostrei.


0
  1. Instalar ts-node módulo do nó globalmente.
  2. Crie uma configuração de tempo de execução do nó (para IDE) ou use nodena linha de comandos para executar abaixo do arquivojs arquivo (O caminho é para o Windows, mas você também pode fazê-lo no Linux) ~\AppData\Roaming\npm\node_modules\ts-node\dist\bin.js
  3. Dê o seu ts caminho do arquivo como argumento da linha de comando.
  4. Execute ou depure como desejar.

0

Para ambientes como Webstorm em que o nodecomando não pode ser alterado para ts-nodeou npx:

  1. npm install ts-node typescript (Instalar dependências)
  2. node --require ts-node/register src/foo.ts(Adicione --require ts-node/registeraos "Parâmetros do nó")

-28

Esta pergunta foi publicada em 2015. Em 2018, o nó reconhece .js e .ts . Portanto, a execução node file.tstambém será executada.


19
O nó interpreta qualquer arquivo como javascript, portanto, ele funcionará apenas se o arquivo de texto datilografado em questão for um arquivo javascript válido.
Preda7or

Isso funcionará se o conteúdo do arquivo for javascript válido, mas a extensão for ts. O nó não se importa com a extensão, desde que o conteúdo seja javascript válido.
SnnSnn 29/04
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.