TypeScriptファイルをコマンドラインから実行する方法


206

私はこれに対する答えを見つけるのに驚くほど苦労しています。プレーンなNode.JSを使用するとnode path/to/file.js、任意のjsファイルをで実行できます。CoffeeScriptを使用すると、coffee hello.coffeeES6を使用できbabel-node hello.jsます。Typescriptで同じことをするにはどうすればよいですか?

私のプロジェクトには、tsconfig.jsonWebpack / ts-loaderがブラウザ用の素敵な小さなバンドルを構築するために使用するがあります。その前にコンソールからビルドステップを実行する必要があり.tsますが、プロジェクトで使用されるファイルの一部を使用してスキーマを生成しますが、コンパイルしないと単一のTypescriptファイルを実行できないようです。プロジェクト全体。

回答:


270

Typescriptで同じことをするには

tscを使用してウォッチモードで実行したままにすると、ライブ形式でファイルtsc -w -p .が生成される.jsので、node foo.js通常のように実行できます

TSノード

ts-nodeがあります:https : //github.com/TypeStrong/ts-nodeは、コードをその場でコンパイルし、ノード全体で実行します🌹

npx ts-node src/foo.ts

10
tscはjsをディスクに書き込みます。ts-nodeはそれを行う必要がなく、オンザフライでtsを実行します
バサラト

1
リマインダーts-nodeはインポートされたモジュールからのログをコンソールしません。Exの場合:ts-nodeである場合、fil1.tsとfile1.tsが内部でfile2.tsを使用すると、file2.tsからのコンソールログは記録されません。
Shadab Faiz 2018

1
私が遭遇し、私を混乱させていたことに注意するための1つの赤いニシン。test.ts変換されないという名前のシンプルなTypeScriptファイルがあり、コードが1行含まconsole.log('hello');れていました。私は実行していたnode test.tsコマンドラインからとそれが働いた「私を混乱させたhello`を出力します。まあ、ファイルが純粋に有効なJavaScriptであり、実行したnode myFile.ts場合でも機能します。ただし、TypeScriptコードを追加したときに実行しようとしてエラーが発生したため、これは適切なユースケースではありません。.tsファイルの実行時にノードが警告/エラーを表示することを望みます。
atconway

3
tsノードFTW。そよ風をnpm install -g ts-node作りts-node your-script.tsます。
AlwaysLearning


41

次の手順があります

  1. 最初にtypescriptをインストールする必要があります

    npm install -g typescript

2. 1つのファイルhelloworld.tsを作成します。

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

3.コマンドプロンプトを開き、次のコマンドを入力します

tsc helloworld.ts

  1. もう一度コマンドを実行します

ノードhelloworld.js

  1. 結果はコンソールに表示されます

2
あなたの場合、.tsファイルではなく.jsファイルを実行します。
Menai Ala Eddine-アラジン

20

上記の@Aamod回答に追加するには、1つのコマンドラインを使用してコードをコンパイルおよび実行する場合は、以下を使用できます。

ウィンドウズ:

tsc main.ts | node main.js

Linux / macOS:

tsc main.ts && node main.js

2
npm install typescript -gtscCLI をインストールする
s2t2

1
ああ、窓の「パイプ」
ロッキー・リー

typescriptソースを1行ずつデバッグする場合、これは機能しません。
Paramvir Singh Karwal

20

以下のコマンドを実行して、必要なパッケージをグローバルにインストールします。

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

次のコマンドを実行して、typescriptファイルを実行します。

ts-node typescript-file.ts

2
ts-nodeTypeScript REPLも提供するので、これはIMHOを行うための最良の方法です。
トロミー

1
またnpx ts-node yourscript.ts、グローバルバージョンを使用したくない場合にも信頼できます。
rafaelpivato


6

役に立つ情報-ここに最新のTypeScript / JavaScriptランタイムDenoがあります。

これは、ノードライアンダールの作成者が、新たに始めることができるとしたら何をするかということに基づいて作成されました。


1
次に例を示します:deno run https://deno.land/std/examples/welcome.ts
mozey

5

簡単なbashラッパーを使用すると便利な場合があります。

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

3

他の回答では、モジュール、特に最新のESモジュールを使用するTypeScriptスクリプトの実行方法については説明されていません。

まず第一には、TS-ノードが動作しないために、我々は落ち着くだろうだから月2020のように、そのシナリオにtsc続きますnode

次に、TypeScriptは.mjsファイルを出力できません。したがって、.jsファイルと"type": "module"で解決しますpackage.json

3番目に、拡張子importを指定せずにきれいな行が必要です.js.tsファイルで混乱を招きます)。

import { Lib } from './Lib';

まあ、それは重要なことです。フラグを使用しない限り、ノードでインポート時に拡張子を指定する必要がありますexperimental-specifier-resolution=node。この場合、ノードが検索できるようにするLib.jsか、行でLib/index.jsのみ指定./Libしたときに有効になりますimport

第4に、問題がまだあります。パッケージ内のファイル名と異なる場合、Nodeはそれを見つけられませんmainindex.js

Transpilingは、バニラノードを実行するよりもはるかに面倒です。

以下は、ESモジュールコードを生成する最新のTypeScriptプロジェクト構造を持つサンプルリポジトリです。


1
どうもありがとうございました。これは、今日それを行おうとしたときに直面した問題の連鎖とほぼ同じです。
dgellow

3

ジーシャン・アフマドの答えと同様に、私もts-node行くべき道だと思います。また、シバンを追加して実行可能にするので、直接実行できます。

  1. typescriptとts-nodeをグローバルにインストールします。

    npm install -g ts-node typescript

    または

    yarn global add ts-node typescript
  2. hello次の内容のファイルを作成します。

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

    ご覧のとおり、1行目にはts-nodeのシバンがあります

  3. ファイルを実行するだけで直接実行

    $ ./hello
    Result: Hello, root

いくつかのメモ:


2020-04-06の更新:コメントへの大いなる入力後のいくつかの変更:ts-nodeの問題へのリンクのts-node-script代わりに使用するようにシバンを更新しts-nodeます。



1
このアプローチでは、多くの問題が発生する可能性があります。この問題の潜在的な解決策を文書化しました。特に、シバン#!/usr/bin/env ts-node-script(これもの一部ts-node)はこの目的に優れているようです。スクリプトを(たとえばでnpm link)リンクする場合、のスクリプトモードはts-nodeシンボリックリンクをたどらない(まだ?)ため、状況はさらに複雑になります。#!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.json私の場合は結局一緒に行きました。
Kaspar Etter

0

誰もが私のように気が狂っており、それが.jsスクリプトであるかのようにtypescriptスクリプトを実行したい場合に備えて、これを試すことができます。nodeを使用して.tsスクリプトを実行するように見えるハッキースクリプトを作成しました。

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

これを実行することも、独自に作成することもできますが、基本的には.jsファイルを作成し、nodeを使用して次のように実行します。

# tsrun myscript.ts

シンプル。スクリプトに「。」が1つだけ含まれていることを確認してください。それ以外の場合は、JSFILEを私が示した方法とは異なる方法で変更する必要があります。


0
  1. ts-nodeノードモジュールをグローバルにインストールします。
  2. ノードランタイム構成を作成する(IDEの場合)またはnodeコマンドラインで使用してファイルjsファイルの下を実行する(パスはWindows用ですが、Linuxの場合も実行できます) ~\AppData\Roaming\npm\node_modules\ts-node\dist\bin.js
  3. あなたの与えるtsコマンドライン引数としてファイルパスを。
  4. 必要に応じて実行またはデバッグします。

0

以下のような環境ではWebstormnodeコマンドに変更することはできませんts-nodenpx

  1. npm install ts-node typescript (インストール依存関係)
  2. node --require ts-node/register src/foo.ts--require ts-node/register「ノードパラメータ」に追加)

-28

この質問は2015年に投稿されました。2018年、nodeは.js.tsの両方を認識します。したがって、実行node file.tsも実行されます。


19
Nodeはファイルをjavascriptとして解釈するため、問題のtypescriptファイルが有効なjavascriptファイル自体である場合にのみ機能します。
Preda7または2018年

これは、ファイルのコンテンツが有効なJavaScriptで、拡張子がtsの場合に機能します。コンテンツが有効なJavaScriptである限り、ノードは拡張が何であるかを気にしません。
SnnSnn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.