@swc-node/register
Version:
SWC node register
124 lines (91 loc) • 2.78 kB
Markdown
# `@swc-node/register`
## Usage
```ts
const register = require('@swc-node/register')
register({
...
})
```
### CLI
```
node -r @swc-node/register index.ts
```
### Mocha
```
mocha --require @swc-node/register --watch-extensions ts,tsx "test/**/*.{ts,tsx}" [...args]
```
### ava
```json
// package.json
{
"ava": {
"extensions": ["ts", "tsx"],
"require": ["@swc-node/register"],
"files": ["packages/**/*.spec.{ts,tsx}"]
}
}
```
## Read `tsconfig.json`
set `SWC_NODE_PROJECT` or `TS_NODE_PROJECT` env:
```bash
SWC_NODE_PROJECT=./tsconfig.test.json mocha --require @swc-node/register --watch-extensions ts,tsx "test/**/*.{ts,tsx}" [...args]
```
`@swc-node/register` respect the following option in `tsconfig`:
### `extends`
`@swc-node/register` respect the extends key in `tsconfig.json`, and use the **merged** values.
### `compilerOptions.target`
```ts
switch (target) {
case ts.ScriptTarget.ES3:
return 'es3'
case ts.ScriptTarget.ES5:
return 'es5'
case ts.ScriptTarget.ES2015:
return 'es2015'
case ts.ScriptTarget.ES2016:
return 'es2016'
case ts.ScriptTarget.ES2017:
return 'es2017'
case ts.ScriptTarget.ES2018:
return 'es2018'
case ts.ScriptTarget.ES2019:
return 'es2019'
case ts.ScriptTarget.ES2020:
case ts.ScriptTarget.ESNext:
case ts.ScriptTarget.Latest:
return 'es2020'
case ts.ScriptTarget.JSON:
return 'es5'
}
```
### `compilerOptions.jsx`
If `filename` endsWith `.jsx` or `.tsx`, always set the `jsx: true` in `swc config` regards the `jsx` option in `tsconfig`.
If `filename` not endsWith `.jsx` or `.tsx`, set the `jsx: Boolean(tsconfig.compilerOptions.jsx)` in `swc config`.
### compilerOptions.module
> notes, if `compilerOptions.module` higher than `es2020`, the `dynamicImport` in `swc config` will be set to `true`.
```ts
switch (moduleKind) {
case ts.ModuleKind.CommonJS:
return 'commonjs'
case ts.ModuleKind.UMD:
return 'umd'
case ts.ModuleKind.AMD:
return 'amd'
case ts.ModuleKind.ES2015:
case ts.ModuleKind.ES2020:
case ts.ModuleKind.ESNext:
case ts.ModuleKind.None:
return 'es6'
case ts.ModuleKind.System:
throw new TypeError('Do not support system kind module')
}
```
### compilerOptions.experimentalDecorators
Respect the boolean value in `tsconfig`.
### compilerOptions.emitDecoratorMetadata
Respect the boolean value in `tsconfig`.
### compilerOptions.esModuleInterop
Respect the boolean value in `tsconfig`.
### include/exclude
`TypeScript` gives files list to `@swc-node/register`, if parse `tsconfig.json` failed or files list empty, `@swc-node/register` will transform all files which were required.
And if failed to parse `tsconfig.json`, `@swc-node/register` will print warning which contains failed reason.