From 12701bbf05f137d6ce0882f8f2e594557273ed16 Mon Sep 17 00:00:00 2001 From: Markus Felten Date: Wed, 30 Oct 2019 15:12:58 +0100 Subject: [PATCH 1/3] feat: support *.mjs as config file extension see #3189 --- cli/run/loadConfigFile.ts | 22 +++++++++++-------- test/cli/samples/config-mjs/_config.js | 5 +++++ test/cli/samples/config-mjs/main.js | 1 + test/cli/samples/config-mjs/rollup.config.mjs | 11 ++++++++++ 4 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 test/cli/samples/config-mjs/_config.js create mode 100644 test/cli/samples/config-mjs/main.js create mode 100644 test/cli/samples/config-mjs/rollup.config.mjs diff --git a/cli/run/loadConfigFile.ts b/cli/run/loadConfigFile.ts index cbebf4d8c62..d7fea6143ef 100644 --- a/cli/run/loadConfigFile.ts +++ b/cli/run/loadConfigFile.ts @@ -39,14 +39,18 @@ export default function loadConfigFile( }) .then(({ output: [{ code }] }: RollupOutput) => { // temporarily override require - const defaultLoader = require.extensions['.js']; - require.extensions['.js'] = (module: NodeModule, filename: string) => { - if (filename === configFile) { - (module as NodeModuleWithCompile)._compile(code, filename); - } else { - defaultLoader(module, filename); - } - }; + const extensions = ['.js','.mjs']; + const defaultLoaders = extensions.map(e => { + const defaultLoader = require.extensions[e]; + require.extensions[e] = (module: NodeModule, filename: string) => { + if (filename === configFile) { + (module as NodeModuleWithCompile)._compile(code, filename); + } else { + defaultLoader(module, filename); + } + }; + return defaultLoader; + }); delete require.cache[configFile]; @@ -67,7 +71,7 @@ export default function loadConfigFile( }); } - require.extensions['.js'] = defaultLoader; + extensions.forEach((extension,index) => require.extensions[extension] = defaultLoaders[index]); return Array.isArray(configs) ? configs : [configs]; }); diff --git a/test/cli/samples/config-mjs/_config.js b/test/cli/samples/config-mjs/_config.js new file mode 100644 index 00000000000..bd9fe8544ed --- /dev/null +++ b/test/cli/samples/config-mjs/_config.js @@ -0,0 +1,5 @@ +module.exports = { + description: 'uses config file (.mjs)', + command: 'rollup --config rollup.config.mjs', + execute: true +}; diff --git a/test/cli/samples/config-mjs/main.js b/test/cli/samples/config-mjs/main.js new file mode 100644 index 00000000000..df16c1b06b9 --- /dev/null +++ b/test/cli/samples/config-mjs/main.js @@ -0,0 +1 @@ +assert.equal( ANSWER, 42 ); diff --git a/test/cli/samples/config-mjs/rollup.config.mjs b/test/cli/samples/config-mjs/rollup.config.mjs new file mode 100644 index 00000000000..22bbdf2e99b --- /dev/null +++ b/test/cli/samples/config-mjs/rollup.config.mjs @@ -0,0 +1,11 @@ +import replace from 'rollup-plugin-replace'; + +export default { + input: 'main.js', + output: { + format: 'cjs' + }, + plugins: [ + replace( { 'ANSWER': 42 } ) + ] +}; From 5b70bef75db30a3c9364c58495c9ac4c84055a8b Mon Sep 17 00:00:00 2001 From: Markus Felten Date: Wed, 30 Oct 2019 15:20:27 +0100 Subject: [PATCH 2/3] docs: add *.mjs cli example --- docs/01-command-line-reference.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/01-command-line-reference.md b/docs/01-command-line-reference.md index f2f9f0addc1..8970e765fa4 100755 --- a/docs/01-command-line-reference.md +++ b/docs/01-command-line-reference.md @@ -164,6 +164,9 @@ $ rollup --config # alternatively, specify a custom config file location $ rollup --config my.config.js + +# .js and .mjs are supported +$ rollup --config my.config.mjs ``` You can also export a function that returns any of the above configuration formats. This function will be passed the current command line arguments so that you can dynamically adapt your configuration to respect e.g. [`--silent`](guide/en/#--silent). You can even define your own command line options if you prefix them with `config`: From 8f8bbfbee0eb365607fd83f00c9dc16652b25d55 Mon Sep 17 00:00:00 2001 From: Markus Felten Date: Thu, 31 Oct 2019 09:43:03 +0100 Subject: [PATCH 3/3] fix: overwrite loder for the extension of the actual config file --- cli/run/loadConfigFile.ts | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/cli/run/loadConfigFile.ts b/cli/run/loadConfigFile.ts index d7fea6143ef..da7a911fc95 100644 --- a/cli/run/loadConfigFile.ts +++ b/cli/run/loadConfigFile.ts @@ -39,18 +39,15 @@ export default function loadConfigFile( }) .then(({ output: [{ code }] }: RollupOutput) => { // temporarily override require - const extensions = ['.js','.mjs']; - const defaultLoaders = extensions.map(e => { - const defaultLoader = require.extensions[e]; - require.extensions[e] = (module: NodeModule, filename: string) => { - if (filename === configFile) { - (module as NodeModuleWithCompile)._compile(code, filename); - } else { - defaultLoader(module, filename); - } - }; - return defaultLoader; - }); + const extension = path.extname(configFile); + const defaultLoader = require.extensions[extension]; + require.extensions[extension] = (module: NodeModule, filename: string) => { + if (filename === configFile) { + (module as NodeModuleWithCompile)._compile(code, filename); + } else { + defaultLoader(module, filename); + } + }; delete require.cache[configFile]; @@ -71,9 +68,9 @@ export default function loadConfigFile( }); } - extensions.forEach((extension,index) => require.extensions[extension] = defaultLoaders[index]); + require.extensions[extension] = defaultLoader; return Array.isArray(configs) ? configs : [configs]; }); }); -} +} \ No newline at end of file