From cce3797654886e0b7b51a633ca302e653b2abdad Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Fri, 7 Dec 2018 12:22:22 +0100 Subject: [PATCH] Add --use-file-extension option to babel-cli --- packages/babel-cli/src/babel/dir.js | 8 ++++++-- packages/babel-cli/src/babel/options.js | 5 +++++ packages/babel-cli/src/babel/util.js | 4 ++-- .../in-files/src/bar.mjs | 1 + .../in-files/src/foo.jsx | 1 + .../dir --out-dir --use-file-extension/options.json | 12 ++++++++++++ .../out-files/lib/bar.mjs | 5 +++++ .../out-files/lib/foo.mjs | 5 +++++ .../dir --out-dir --use-file-extension/stdout.txt | 3 +++ 9 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/bar.mjs create mode 100644 packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/foo.jsx create mode 100644 packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/options.json create mode 100644 packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/bar.mjs create mode 100644 packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/foo.mjs create mode 100644 packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/stdout.txt diff --git a/packages/babel-cli/src/babel/dir.js b/packages/babel-cli/src/babel/dir.js index 2eaca85750f8..6b60f3c8f39e 100644 --- a/packages/babel-cli/src/babel/dir.js +++ b/packages/babel-cli/src/babel/dir.js @@ -17,8 +17,12 @@ export default async function({ cliOptions, babelOptions }) { return false; } - // remove extension and then append back on .js - relative = util.adjustRelative(relative, cliOptions.keepFileExtension); + // remove extension and then append back on the configured extension + relative = util.adjustRelative( + relative, + cliOptions.keepFileExtension, + cliOptions.useFileExtension, + ); const dest = getDest(relative, base); diff --git a/packages/babel-cli/src/babel/options.js b/packages/babel-cli/src/babel/options.js index 41cc0fb83e7f..d775491d130d 100644 --- a/packages/babel-cli/src/babel/options.js +++ b/packages/babel-cli/src/babel/options.js @@ -147,6 +147,10 @@ commander.option( "--delete-dir-on-start", "Delete the out directory before compilation", ); +commander.option( + "--use-file-extension [string]", + "Use a specific extension for the output files", +); commander.version(pkg.version + " (@babel/core " + version + ")"); commander.usage("[options] "); @@ -267,6 +271,7 @@ export default function parseArgv(args: Array) { filenames, extensions: opts.extensions, keepFileExtension: opts.keepFileExtension, + useFileExtension: opts.useFileExtension, watch: opts.watch, skipInitialBuild: opts.skipInitialBuild, outFile: opts.outFile, diff --git a/packages/babel-cli/src/babel/util.js b/packages/babel-cli/src/babel/util.js index 99c9ae9b00cd..17c52d2da280 100644 --- a/packages/babel-cli/src/babel/util.js +++ b/packages/babel-cli/src/babel/util.js @@ -118,9 +118,9 @@ export function requireChokidar() { } } -export function adjustRelative(relative, keepFileExtension) { +export function adjustRelative(relative, keepFileExtension, extension = ".js") { if (keepFileExtension) { return relative; } - return relative.replace(/\.(\w*?)$/, "") + ".js"; + return relative.replace(/\.(\w*?)$/, "") + extension; } diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/bar.mjs b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/bar.mjs new file mode 100644 index 000000000000..7c1178b8d64f --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/bar.mjs @@ -0,0 +1 @@ +arr.map(x => x / DIVIDER); diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/foo.jsx b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/foo.jsx new file mode 100644 index 000000000000..4bc9539528d4 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/in-files/src/foo.jsx @@ -0,0 +1 @@ +arr.map(x => x * MULTIPLIER); diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/options.json b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/options.json new file mode 100644 index 000000000000..3ff3a035408b --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/options.json @@ -0,0 +1,12 @@ +{ + "args": [ + "src", + "--out-dir", + "lib", + "--use-file-extension", + ".mjs", + "--extensions", + ".jsx,.mjs", + "--verbose" + ] +} diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/bar.mjs b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/bar.mjs new file mode 100644 index 000000000000..5d02843681e4 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/bar.mjs @@ -0,0 +1,5 @@ +"use strict"; + +arr.map(function (x) { + return x / DIVIDER; +}); diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/foo.mjs b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/foo.mjs new file mode 100644 index 000000000000..ae4557e57bc3 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/out-files/lib/foo.mjs @@ -0,0 +1,5 @@ +"use strict"; + +arr.map(function (x) { + return x * MULTIPLIER; +}); diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/stdout.txt b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/stdout.txt new file mode 100644 index 000000000000..24ba955afb2b --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --use-file-extension/stdout.txt @@ -0,0 +1,3 @@ +src/bar.mjs -> lib/bar.mjs +src/foo.jsx -> lib/foo.mjs +Successfully compiled 2 files with Babel.