vite-node
https://github.com/vitest-dev/vitest/raw/main/packages/vite-node/assets/vite-node.svg?raw=true
https://www.npmjs.com/package/vite-node
Vitest でも使用されている Vite のビルドスタックを使って Node.js をアプリを直接実行する仕組み。
ゼロコンフィグ で トランスパイルの必要な JavaScript TypeScript を Node.js アプリとして実行できる
TypeScript を直接実行できる ts-node の仕組みに近い。
基本的な使い方
Express.js の 公式サンプル より拝借。
require を使用している箇所を import に変更し、一応 package.json の type を module に変更している。
code:index.ts
import express from 'express'
const app = express()
const port = 3000
app.get('/', (_, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(Example app listening on port ${port})
})
vite-node を使った起動は以下のようにする。 (scriptsから実行するかglobalに入れるかはおまかせ)
code:sh
vite-node ./index.ts
差分検知による再起動
--watch がオプションとしてサポートされており nodemon 相当の動作を期待できる。
PortをListenするタイプのアプリケーションの場合、Portが取れなくて落ちたりするので適宜調整が必要になるかも。
code:sh
vite-node --watch ./index.ts
応用的な使い方
READMEの「Programatic Usage」を参考ください
速度的な部分
以下の hoge を出力するだけのコードで ts-node と vite-node の速度の比較を行う。
どちらも最小構成で実行した。
ts-node はデフォルトで型チェックを行うが、vite-node では型チェックを行わない
ts-node をトランスパイルのみにした場合、大きく速度が改善された。
型チェックを無効にした状態で比較しても若干 vite-node のほうが早かった。
code:ts
console.log('hoge')
ts-node-esm (ts-node の ESM版) の速度は以下。(概ね 1.1 から 1.2 秒)
code:sh
❯ time yarn run ts-node-esm ./console.ts
yarn run v1.22.17
$ ./node_modules/.bin/ts-node-esm ./console.ts
hoge
✨ Done in 1.16s.
________________________________________________________
Executed in 1.45 secs fish external
usr time 1.67 secs 0.14 millis 1.67 secs
sys time 0.23 secs 1.02 millis 0.23 secs
ts-node-esm でトランスパイルのみにした場合は以下。(概ね 0.45 から 0.5 秒)
code:sh
❯ time yarn run ts-node-esm -T ./console.ts
yarn run v1.22.17
$ ./node_modules/.bin/ts-node-esm -T ./console.ts
hoge
✨ Done in 0.46s.
________________________________________________________
Executed in 760.64 millis fish external
usr time 480.98 millis 0.10 millis 480.88 millis
sys time 177.38 millis 1.17 millis 176.22 millis
vite-node の速度は以下。 (概ね 0.35 から 0.40 秒)
code:sh
❯ time yarn run vite-node ./console.ts
yarn run v1.22.17
$ ./node_modules/.bin/vite-node ./console.ts
hoge
✨ Done in 0.39s.
________________________________________________________
Executed in 688.70 millis fish external
usr time 397.09 millis 0.20 millis 396.90 millis
sys time 159.68 millis 1.28 millis 158.40 millis