Security News
Introducing the Socket Python SDK
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
@swc-node/register
Advanced tools
@swc-node/register is an npm package that allows you to use SWC (a super-fast TypeScript/JavaScript compiler) to transpile your code on-the-fly when running Node.js applications. This package is particularly useful for developers who want to leverage the speed of SWC for TypeScript or modern JavaScript features without needing to precompile their code.
On-the-fly TypeScript Compilation
This feature allows you to run TypeScript code directly in Node.js without precompiling it. The code sample demonstrates how to require the @swc-node/register package and run TypeScript code on-the-fly.
require('@swc-node/register');
const tsCode = `const greet = (name: string): string => `Hello, ${name}`;`;
console.log(greet('World'));
Modern JavaScript Syntax Support
This feature allows you to use modern JavaScript syntax (like ES6 arrow functions) in Node.js applications. The code sample shows how to require the @swc-node/register package and run modern JavaScript code on-the-fly.
require('@swc-node/register');
const es6Code = `const add = (a, b) => a + b; console.log(add(2, 3));`;
eval(es6Code);
Configuration Options
This feature allows you to customize the SWC compiler options. The code sample demonstrates how to pass configuration options to the @swc-node/register package to set the JavaScript target version.
require('@swc-node/register')({
swc: {
jsc: {
target: 'es2017'
}
}
});
const code = `const x = async () => await Promise.resolve('done'); x().then(console.log);`;
eval(code);
ts-node is a TypeScript execution environment for Node.js. It allows you to run TypeScript code directly without precompiling. Compared to @swc-node/register, ts-node is slower because it uses the TypeScript compiler (tsc) instead of SWC.
babel-register is a package that hooks into Node.js require to compile files on the fly using Babel. It supports a wide range of JavaScript syntax and features. Compared to @swc-node/register, babel-register is slower because Babel is not as fast as SWC.
esbuild-register is a package that allows you to use esbuild to compile JavaScript and TypeScript code on-the-fly in Node.js. It is similar to @swc-node/register in terms of speed, as esbuild is also a very fast compiler.
@swc-node/register
🚀 Help me to become a full-time open-source developer by sponsoring me on Github
const { register } = require('@swc-node/register/register')
register({
...
})
node -r @swc-node/register index.ts
mocha --require @swc-node/register --watch-extensions ts,tsx "test/**/*.{ts,tsx}" [...args]
// package.json
{
"ava": {
"extensions": ["ts", "tsx"],
"require": ["@swc-node/register"],
"files": ["packages/**/*.spec.{ts,tsx}"]
}
}
tsconfig.json
set SWC_NODE_PROJECT
or TS_NODE_PROJECT
env:
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
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.ES2021:
case ts.ScriptTarget.ES2022:
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
.
notes, if
compilerOptions.module
higher thanes2020
, thedynamicImport
inswc config
will be set totrue
.
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')
}
Respect the boolean value in tsconfig
.
Respect the boolean value in tsconfig
.
Respect the boolean value in tsconfig
.
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.
FAQs
SWC node register
The npm package @swc-node/register receives a total of 811,693 weekly downloads. As such, @swc-node/register popularity was classified as popular.
We found that @swc-node/register demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
Security News
Floating dependency ranges in npm can introduce instability and security risks into your project by allowing unverified or incompatible versions to be installed automatically, leading to unpredictable behavior and potential conflicts.
Security News
A new Rust RFC proposes "Trusted Publishing" for Crates.io, introducing short-lived access tokens via OIDC to improve security and reduce risks associated with long-lived API tokens.