diff --git a/README.md b/README.md index 148c4577..2dc796d5 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ Run on a directory: sucrase ./srcDir -d ./outDir --transforms typescript,imports ``` -Register a require hook with some [reasonable defaults](src/register.ts): +Compile on-the-fly via a require hook with some [reasonable defaults](src/register.ts): ```js // Register just one extension. @@ -110,6 +110,12 @@ import "sucrase/register/ts"; import "sucrase/register"; ``` +Compile on-the-fly via a drop-in replacement for node: + +``` +sucrase-node index.ts +``` + Call from JS directly: ```js diff --git a/bin/sucrase-node b/bin/sucrase-node new file mode 100755 index 00000000..8dbdcb36 --- /dev/null +++ b/bin/sucrase-node @@ -0,0 +1,18 @@ +#!/usr/bin/env node +const Module = require("module"); +const {resolve} = require("path"); + +/* + * Simple wrapper around node that first registers Sucrase with default settings. + * + * This is meant for simple use cases, and doesn't support custom Node/V8 args, + * executing a code snippet, a REPL, or other things that you might find in + * node, babel-node, or ts-node. For more advanced use cases, you can use + * `node -r sucrase/register` or register a require hook programmatically from + * your own code. + */ +require("../register"); + +process.argv.splice(1, 1); +process.argv[1] = resolve(process.argv[1]); +Module.runMain(); diff --git a/package.json b/package.json index 0b8de382..d4f5d1e6 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "module": "dist/index.mjs", "types": "dist/index.d.ts", "bin": { - "sucrase": "./bin/sucrase" + "sucrase": "./bin/sucrase", + "sucrase-node": "./bin/sucrase-node" }, "scripts": { "build": "script/sucrase-node script/build.ts", diff --git a/script/sucrase-node b/script/sucrase-node index 87829f5b..c61a3b4d 100755 --- a/script/sucrase-node +++ b/script/sucrase-node @@ -1,10 +1,18 @@ #!/usr/bin/env node +const Module = require("module"); +const {resolve} = require("path"); -// Hacky wrapper around Sucrase for internal scripts. Not yet part of the -// published package since that requires more work to get right. +/* + * Simple wrapper around node that first registers Sucrase with default settings. + * + * This is meant for simple use cases, and doesn't support custom Node/V8 args, + * executing a code snippet, a REPL, or other things that you might find in + * node, babel-node, or ts-node. For more advanced use cases, you can use + * `node -r sucrase/register` or register a require hook programmatically from + * your own code. + */ require("sucrase/register"); -const file = process.argv[2]; process.argv.splice(1, 1); -// eslint-disable-next-line import/no-dynamic-require -require(`../${file}`); +process.argv[1] = resolve(process.argv[1]); +Module.runMain();