diff --git a/packages/babel-cli/src/babel/dir.js b/packages/babel-cli/src/babel/dir.js index 4ecd17cfc8..35d813c9f3 100644 --- a/packages/babel-cli/src/babel/dir.js +++ b/packages/babel-cli/src/babel/dir.js @@ -13,7 +13,7 @@ export default function(commander, filenames, opts) { } // remove extension and then append back on .js - relative = relative.replace(/\.(\w*?)$/, "") + ".js"; + relative = util.adjustRelative(relative, commander.keepFileExtension); const dest = getDest(commander, relative, base); diff --git a/packages/babel-cli/src/babel/index.js b/packages/babel-cli/src/babel/index.js index 76c8208fd3..9651416608 100755 --- a/packages/babel-cli/src/babel/index.js +++ b/packages/babel-cli/src/babel/index.js @@ -129,6 +129,10 @@ commander.option( "List of extensions to compile when a directory has been input [.es6,.js,.es,.jsx,.mjs]", collect, ); +commander.option( + "--keep-file-extension", + "Preserve the file extensions of the input files", +); commander.option("-w, --watch", "Recompile files on changes"); commander.option( "--skip-initial-build", @@ -232,6 +236,7 @@ delete opts.copyFiles; delete opts.quiet; delete opts.configFile; delete opts.deleteDirOnStart; +delete opts.keepFileExtension; // Commander will default the "--no-" arguments to true, but we want to leave them undefined so that // babel-core can handle the default-assignment logic on its own. diff --git a/packages/babel-cli/src/babel/util.js b/packages/babel-cli/src/babel/util.js index 1ab9550a64..cf7304d59f 100644 --- a/packages/babel-cli/src/babel/util.js +++ b/packages/babel-cli/src/babel/util.js @@ -98,3 +98,10 @@ export function requireChokidar() { throw err; } } + +export function adjustRelative(relative, keepFileExtension) { + if (keepFileExtension) { + return relative; + } + return relative.replace(/\.(\w*?)$/, "") + ".js"; +} diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/in-files/src/bar.mjs b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/in-files/src/bar.mjs new file mode 100644 index 0000000000..7c1178b8d6 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-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 --keep-file-extension/in-files/src/foo.js b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/in-files/src/foo.js new file mode 100644 index 0000000000..4bc9539528 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/in-files/src/foo.js @@ -0,0 +1 @@ +arr.map(x => x * MULTIPLIER); diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/options.json b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/options.json new file mode 100644 index 0000000000..887810a2b8 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/options.json @@ -0,0 +1,3 @@ +{ + "args": ["src", "--out-dir", "lib", "--keep-file-extension"] +} diff --git a/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/out-files/lib/bar.mjs b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/out-files/lib/bar.mjs new file mode 100644 index 0000000000..5d02843681 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-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 --keep-file-extension/out-files/lib/foo.js b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/out-files/lib/foo.js new file mode 100644 index 0000000000..ae4557e57b --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/out-files/lib/foo.js @@ -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 --keep-file-extension/stdout.txt b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/stdout.txt new file mode 100644 index 0000000000..9d19a99d25 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/stdout.txt @@ -0,0 +1,2 @@ +src/bar.mjs -> lib/bar.mjs +src/foo.js -> lib/foo.js