@babel/cliと@babel/registerと@babel/preset-typescriptでTypeScriptを実行する
-
Babel ではバージョン 7 から @babel/preset-typescript を使うことで TypeScript のトランスパイルもできるようになりました。
今回は webpack と babel-loader は使わず、@babel/cli を使って TypeScript をビルドする、もしくは @babel/register を使って TypeScript を実行するという内容です。
実行環境
$ node -v
v10.14.1.
|-- .babelrc
|-- src
| |-- index.ts
| `-- register.js
`-- package.json.babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-typescript"
]
}package.json
"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.2.2",
"@babel/preset-env": "^7.2.3",
"@babel/register": "^7.0.0",
"typescript": "^3.2.2"
}実行するTypeScriptファイル
まず、TypeScript で書かれた src/index.ts を用意します。今回はこのファイルを対象とします。
src/index.ts
import * as path from 'path';
const add = (x: number, y: number) => x + y;
console.log(path.resolve(__dirname, '../'));
console.log(add(1, 4));@babel/cliでトランスパイル
package.json
"scripts": {
"build": "babel src -D -d build --extensions '.js,.ts'"
}build コマンドを追加します。src ディレクトリ下のファイルを変換して build に出力します。ポイントは拡張子オプション --extensions '.js,.ts' を指定することです。これがないと .ts は変換されません。.tsx を使う場合は --extensions '.js,.jsx,.ts,.tsx' で指定します。
ビルドして実行
$ npm run build
Successfully compiled 1 file with Babel.
$ node build/index.js
/app/sandbox/babel-cli-register-typescript
5エラーなく実行できました。
@babel/registerで実行
src/register.js
require('@babel/register')({
extensions: ['.js', '.ts'],
});
require('./index');node コマンドから TypeScript を実行します。ただし .ts ファイルを直接実行するのではなく、@babel/register をロードしている .js ファイルを実行します。
実行
$ node src/register.js
/app/sandbox/babel-cli-register-typescript
5動きました。
余談
開発中は @babel/register を、production の事前ビルドに @babel/cli を使っているサーバー環境に TypeScript を導入する機会がありました。
今回のように、@babel/preset-typescript と拡張子オプションを指定することで問題なく TypeScript に移行できそうです。