web-dev-qa-db-ja.com

npmスクリプトを使用してtsc -watch && nodemon --watchを実行する方法はありますか?

Npmスクリプトを使用してtsc --watch && nodemon --watchを同時に実行する方法を探しています。このコマンドを個別に実行できますが、両方を実行する場合は、最初のコマンドのみが実行されます。例えば。このスクリプトがある場合:

"scripts": {    
    "runDeb": "set NODE_ENV=development&& tsc --watch && nodemon --watch"
  }

tsc --watchは実行されますが、nodemonは呼び出されません。逆も同様です。

29

あなたが望むのは次のようなものだと思います(私の現在の設定):

"scripts": {
    "compile": "tsc && node app.js",
    "dev": "./node_modules/nodemon/bin/nodemon.js -e ts  --exec \"npm run compile\""
}

2つのスクリプト「compile」と「dev」を作成しました。開発を開始するには、nodemonを起動して.tsファイルを監視するnpm run devを実行するだけです(-eフラグを使用)。その後、.tsファイルが変更されるたびに、nodemonは、基本的にノードアプリをコンパイルして実行するコンパイルタスクをexecします。

同時使用は良いオプションですが、私のセットアップでは、tscの作業が結果の.jsファイルの実行を試みる前に行われることを保証しています。

72
AlterX

私はしばらくの間AlterXのソリューションを使用してきましたが、完全に機能しましたが、かなり遅いことがわかりました。代わりに、今では tsc-watch を使用しています。 tscが-wフラグと同様のインクリメンタルコンパイルを使用するようにし、アプリケーションの再起動をより高速にします。

Package.jsonに次のようなものを入れるのと同じくらい簡単です。

"scripts": {
  "start": "./node_modules/.bin/tsc-watch --onSuccess \"node .\""
}
27
Borre Mosch

これをpackage.jsonに追加してみてください:

"scripts": {
  "start": "concurrently --kill-others \"tsc -w\" \"nodemon dist/app.js\"",
}

また、このnpmパッケージ(同時に、nodemon、TypeScript)をpackage.jsonに追加します。

"devDependencies": {
  "concurrently": "^2.2.0",
  "TypeScript": "^1.8.10",
  "nodemon": "^1.9.2",
}
20

最新バージョンのnodemonを使用した10月2018での私のソリューション.

最初:
install nodemonnpm install nodemon --save-dev)およびts-nodenpm install ts-node --save-dev

second:
nodemon.jsonを作成します。 npmスクリプトを少し読みやすくするために、nodemonの設定をseperat nodemon.jsonに保持するのが好きです。そのため、プロジェクトのルートに次の内容のnodemon.jsonを作成します。

{
    "ignore": ["**/*.test.ts", "**/*.spec.ts", ".git", "node_modules"],
    "watch": ["src"], // your .ts src folder
    "exec": "npm start", // your npm script created in package.json
    "ext": "ts"
}

次に、次のようなnpm startスクリプトを作成します。

"scripts": {
    ...
    "start": "ts-node src/server.ts",
    "dev:ts": "nodemon",
    ...
  }

次に、npm run dev:tsまたはyarn dev:tsを実行し、TypeScriptサーバーコードをrunおよびwatchします。

Jest単体テストなどの設定については、 this の記事をご覧ください。

3
billyjov

TypeScript-Node-Starterは高速です

https://github.com/Microsoft/TypeScript-Node-Starter/blob/master/package.json

"dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch-ts\" \"nodemon ./dist/app.js\"",
"watch-ts": "tsc -w"

ここでは、npm run watch-tsTypeScript名を付け(concurrently -nを使用)、yellow.boldを使用して色concurrently -cを追加しています。

そのため、各プロセスのメッセージは非常に簡単に認識できます。

1
Coyolero

どうしたの

問題は、すべてのファイルに2つのウォッチャーがいることです。 1つはtsc -wで、もう1つはnodemonです。

.tsファイルに変更が加えられると、tscがそれを検出、コンパイルし、目的のフォルダーに.jsバージョンを作成します。

Nodemonの観点からは、(少なくとも).ts.jsの2つの変更を検出します。最初の変更では自動的に再起動しますが、2番目の変更では別の「開始」が既に行われていることを認識していないため、再起動を試みて失敗します。私にとっては、nodemonのバグです。 https://github.com/remy/nodemon/issues/76 を参照してください。

解決策

1)tsc-watch --onSuccessを使用

tsc-watch にはnodeを配置できる--onSuccessがあります。この方法では、ウォッチャーは1人だけになります。

2)nodemonの遅延

Nodemonの再起動を簡単に遅らせることができます( -delay を参照)。最小限の設定変更が必要です。

3)nodemonにTSCの宛先フォルダーのみを監視させる

設定できませんでしたが、nodemonはこの方法で1つの変更のみを検出することを望んでいます。将来またはtscが複数のファイルを生成するときに問題が発生する可能性があります。

0
Aidin