TypeScript dosyaları komut satırından nasıl çalıştırılır?


210

Buna bir cevap bulmakta şaşırtıcı derecede zorlanıyorum. Düz Node.JS ile, herhangi bir js dosyasını node path/to/file.js, olduğu coffee hello.coffeeve ES6'nın sahip olduğu CoffeeScript ile çalıştırabilirsiniz babel-node hello.js. Aynı şeyi Typescript ile nasıl yaparım?

Projem bir sahiptir tsconfig.jsontarayıcısı için güzel bir paket oluşturmak için WebPack / ts-yükleyici tarafından kullanılan. Konsoldan çalıştırmak için bir derleme adımına ihtiyacım var, bununla birlikte, .tsbir şema oluşturmak için projede kullanılan dosyaların bazılarını kullanır , ancak derlemeden tek bir daktilo dosyası çalıştırmak mümkün görünmüyor tüm proje.

Yanıtlar:


277

Aynı şeyi Typescript ile nasıl yaparım?

tscKullanarak izleme modunda çalışmaya devam edebilirsiniz tsc -w -p .ve .jssizin için canlı bir şekilde dosya oluşturur , böylece node foo.jsnormal gibi çalışabilirsiniz

TS Düğümü

Ts-node var: https://github.com/TypeStrong/ts-node kodu anında derleyecek ve düğüm yoluyla çalıştıracak.

npx ts-node src/foo.ts

14
tsc js'yi diske yazar. ts-node bunu yapmak zorunda değildir ve ts anında çalışır
basarat

1
sadece hatırlatmak ts-düğüm ithal modüller günlük tutmuyor. Örn: ts-node fil1.ts iseniz ve file1.ts dahili olarak file2.ts kullanıyorsa, file2.ts dosyasındaki konsol günlükleri günlüğe kaydedilmez.
Shadab Faiz

1
Bir kırmızı ringa, onunla karşılaştığım ve beni şaşırttığım için dikkatli olmalıydı. test.tsAsla aktarılan ve tek bir kod satırı vardı adında basit bir TypeScript dosyası vardı: console.log('hello');içinde. Koşuyordum node test.tskomut satırından ve işe yaradı bana kafa karıştırıcı çıkışı 'hello`. Dosyasıdır Eh eğer tamamen JavaScript geçerli ve çalıştırmak node myFile.tso hala çalışıyor. Ancak bu tip TypeScript kodu eklediğim gibi iyi bir kullanım durumu değil, beklediğim gibi çalıştırmak için çalışırken bir hata var. Düğüm .ts dosyaları çalıştırıldığında uyarı / hata isterdim.
19'da atconway

3
ts-düğümü FTW. bir esinti npm install -g ts-nodeyapar ts-node your-script.ts.
AlwaysLearning


41

Aşağıdaki adımlar var

  1. Önce daktilo yazmanız gerekiyor

    npm install -g dizesi

2. bir dosya oluşturun helloworld.ts

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

3. Komut istemini açın ve aşağıdaki komutu yazın

tsc Instagram Hesabındaki Resim ve Videoları helloworld.ts

  1. Komutu tekrar çalıştırın

düğüm helloworld.js

  1. Sonuç konsolda görüntülenecek

2
Sizin durumunuzda, .ts dosyasını değil .js dosyasını çalıştırıyoruz.
Menai Ala Eddine - Aladdin

20

Yukarıdaki @Aamod yanıtına eklemek için Kodunuzu derlemek ve çalıştırmak üzere bir komut satırı kullanmak istiyorsanız, aşağıdakileri kullanabilirsiniz:

Pencereler:

tsc main.ts | node main.js

Linux / macOS:

tsc main.ts && node main.js

2
npm install typescript -gyüklemek için tscCLI
s2t2

1
Ah pencereler 'boru'
Rocky Li

Yazı tipi kaynak satır satır hata ayıklamak istiyorsanız, bu işe yaramaz.
Paramvir Singh Karwal

20

Aşağıdaki komutları çalıştırın ve gerekli paketleri global olarak yükleyin:

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

Şimdi bir daktilo dosyasını yürütmek için aşağıdaki komutu çalıştırın:

ts-node typescript-file.ts

2
bu IMHO yapmanın en iyi yoludur ve ts-nodeTypeScript REPL de sağlar.
tromgy

1
Genel npx ts-node yourscript.tssürümü kullanmak istemiyorsanız da güvenebilirsiniz .
rafaelpivato


7

Sadece yararlı bilgiler - İşte en yeni TypeScript / JavaScript çalışma zamanı Deno .

Düğüm yaratıcısı Ryan Dahl tarafından, yeni başlayabilseydi ne yapacağına bağlı olarak yaratıldı.


1
İşte bir örnek:deno run https://deno.land/std/examples/welcome.ts
mozey

5

Kendinize basit bir bash sarıcı yardımcı olabilir yazın.

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

5

Diğer yanıtların hiçbiri, modülleri ve özellikle modern ES Modüllerini kullanan bir TypeScript betiğinin nasıl çalıştırılacağını tartışmaz.

Öncelikle, ts-düğüm çalışmıyor için biz razı edeceğiz Yani Mart 2020 tarihi itibariyle, bu senaryoda tscizledi node.

İkinci olarak, TypeScript yine de .mjsdosya çıktısı alamıyor . Bu yüzden razı edeceğiz .jsdosya ve "type": "module"içinde package.json.

Üçüncüsü, uzantıyı importbelirtmeden .js( .tsdosyalarda kafa karıştırıcı olurdu) temiz satırlar istiyorsunuz :

import { Lib } from './Lib';

Bu önemsiz değil. Bayrağı kullanmadığınız sürece düğüm , içe aktarmalarda uzantı belirtmeyi gerektirirexperimental-specifier-resolution=node . Bu durumda, aramaya Düğüm sağlayacak Lib.jsya Lib/index.jsaçtığınızda yalnızca belirtmek ./Libüzerinde importçizgi.

Dördüncüsü, hala bir engel var: paketinizdekinden farklı bir maindosya index.jsadınız varsa, Düğüm bulamaz .

Transpiling, işleri vanilya düğümü çalıştırmaktan çok daha karışık yapar.

İşte ES Modül kodu üreten modern bir TypeScript proje yapısına sahip örnek bir repo .


1
Çok teşekkürler, bugün bunu yapmaya çalışırken karşılaştığım sorunların neredeyse zinciri!
dgellow

1
@Simon_Weaver: cevap, repo kullan :)
Dan Dascalescu

3

Gibi Zeeshan Ahmed'in cevap , ben de düşünüyorum ts-nodegitmek yoludur. Ben de bir shebang eklemek ve çalıştırılabilir yapmak, böylece sadece doğrudan çalıştırabilirsiniz.

  1. Dünya çapında daktilo ve ts düğümünü kurun:

    npm install -g ts-node typescript

    veya

    yarn global add ts-node typescript
  2. helloBu içeriğe sahip bir dosya oluşturun :

    #!/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)}`)

    Gördüğünüz gibi, birinci satır ts-node için mesele var

  3. Yalnızca dosyayı yürüterek doğrudan çalıştırın

    $ ./hello
    Result: Hello, root

Bazı notlar:


Güncelleme 2020-04-06: Yorumlarda büyük girdiden sonra bazı değişiklikler: Güncellemeyi kullanmak ts-node-scriptyerine, ts-nodedüğüm düğümündeki sorunlara bağlantı olarak kullanın.



1
Bu yaklaşımla birçok problemle karşılaşabilirsiniz. Bu konuda potansiyel çözümleri belgeledim . Özellikle, shebang #!/usr/bin/env ts-node-script(ayrıca bir parçası ts-node) bu amaç için üstün görünüyor. Senaryonuzu bağlamak istiyorsanız (örn. İle npm link), senaryo modunun ts-nodesembolik bağlantıları takip etmediği için işler daha da karmaşıklaşır . #!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.jsonSonunda davamda gittim .
Kaspar Etter

0

Herkes benim gibi deli ve sadece bir .js betiği gibi typescript betiği çalıştırmak istiyorsa, bunu deneyebilirsiniz. Düğüm kullanarak .ts komut dosyasını yürütmek için görünen bir hacky komut dosyası yazdım.

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

Bunu yapabilir veya kendiniz yazabilirsiniz, ancak esas olarak .js dosyasını oluşturur ve daha sonra bu şekilde çalıştırmak için düğümü kullanır:

# tsrun myscript.ts

Basit. Betiğinizde yalnızca bir tane "" olduğundan emin olun. aksi takdirde JSFILE'nizi gösterdiğimden farklı bir şekilde değiştirmeniz gerekir.


0
  1. ts-nodeDüğüm modülünü global olarak kurun .
  2. Düğüm çalışma zamanı yapılandırması oluşturun (IDE için) veya nodedosya jsdosyasının altında çalıştırmak için komut satırında kullanın (Yol windows içindir, ancak linux için de yapabilirsiniz) ~\AppData\Roaming\npm\node_modules\ts-node\dist\bin.js
  3. tsDosya yolunuzu komut satırı bağımsız değişkeni olarak verin .
  4. İstediğiniz gibi çalıştırın veya hata ayıklayın.

0

Gibi ortamlar için WebStormnode komutu ile değiştirilemez ts-nodeveya npx:

  1. npm install ts-node typescript (Bağımlılıkları yükleyin)
  2. node --require ts-node/register src/foo.ts( --require ts-node/register"Düğüm parametreleri" ne ekleyin )

0

Bu cevap erken olabilir, ancak deno hem TS'nin hem de JS'nin kutudan çıkmasını destekler.

Geliştirme ortamınıza bağlı olarak, Deno'ya geçmek (ve bunu öğrenmek) çok fazla olabilir, ancak umarım bu cevap gelecekte birisine yardımcı olur.


-28

Bu soru 2018 yılında 2015 yılında gönderilmiş, düğüm hem tanır .js ve ts . Yani node file.tskoşmak da koşacak.


20
Düğüm herhangi bir dosyayı javascript olarak yorumlar, bu nedenle yalnızca söz konusu typescript dosyası geçerli bir javascript dosyasının kendisi ise çalışır.
Preda7 veya

Dosya içeriği geçerli bir javascript, ancak uzantı ts ise, bu işe yarar. İçerik geçerli javascript olduğu sürece düğüm, uzantının ne olduğunu umursamaz.
snnsnn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.