From 31a2c2a9210ca75df71d2f70d701c678158fa2b3 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 29 Oct 2019 14:00:55 +0100 Subject: [PATCH] Make the CLI run generate/output in serial As a temporary workaround for concurrency issues in the plugin driver. See issue #3174 --- cli/run/build.ts | 7 ++++--- .../samples/emit-file-multiple-dirs/_config.js | 4 ++++ .../_expected/dist1/main.js | 3 +++ .../_expected/dist1/myfile | 1 + .../_expected/dist2/main.js | 1 + .../_expected/dist2/myfile | 1 + .../samples/emit-file-multiple-dirs/main.js | 1 + .../emit-file-multiple-dirs/rollup.config.js | 18 ++++++++++++++++++ 8 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 test/cli/samples/emit-file-multiple-dirs/_config.js create mode 100644 test/cli/samples/emit-file-multiple-dirs/_expected/dist1/main.js create mode 100644 test/cli/samples/emit-file-multiple-dirs/_expected/dist1/myfile create mode 100644 test/cli/samples/emit-file-multiple-dirs/_expected/dist2/main.js create mode 100644 test/cli/samples/emit-file-multiple-dirs/_expected/dist2/myfile create mode 100644 test/cli/samples/emit-file-multiple-dirs/main.js create mode 100644 test/cli/samples/emit-file-multiple-dirs/rollup.config.js diff --git a/cli/run/build.ts b/cli/run/build.ts index ec2e5abe104..a744bec485e 100644 --- a/cli/run/build.ts +++ b/cli/run/build.ts @@ -66,9 +66,10 @@ export default function build( }); } - return Promise.all(outputOptions.map(output => bundle.write(output) as Promise)).then( - () => bundle - ); + return outputOptions.reduce( + (prev, output) => prev.then(() => bundle.write(output) as Promise), + Promise.resolve() + ).then(() => bundle) }) .then((bundle: RollupBuild | null) => { if (!silent) { diff --git a/test/cli/samples/emit-file-multiple-dirs/_config.js b/test/cli/samples/emit-file-multiple-dirs/_config.js new file mode 100644 index 00000000000..34c81bf123b --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/_config.js @@ -0,0 +1,4 @@ +module.exports = { + description: 'writes files emitted by plugins in different output dirs', + command: 'rollup -c' +}; diff --git a/test/cli/samples/emit-file-multiple-dirs/_expected/dist1/main.js b/test/cli/samples/emit-file-multiple-dirs/_expected/dist1/main.js new file mode 100644 index 00000000000..9a6286fb5f8 --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/_expected/dist1/main.js @@ -0,0 +1,3 @@ +'use strict'; + +assert.equal( ANSWER, 42 ); diff --git a/test/cli/samples/emit-file-multiple-dirs/_expected/dist1/myfile b/test/cli/samples/emit-file-multiple-dirs/_expected/dist1/myfile new file mode 100644 index 00000000000..f2ba8f84ab5 --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/_expected/dist1/myfile @@ -0,0 +1 @@ +abc \ No newline at end of file diff --git a/test/cli/samples/emit-file-multiple-dirs/_expected/dist2/main.js b/test/cli/samples/emit-file-multiple-dirs/_expected/dist2/main.js new file mode 100644 index 00000000000..df16c1b06b9 --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/_expected/dist2/main.js @@ -0,0 +1 @@ +assert.equal( ANSWER, 42 ); diff --git a/test/cli/samples/emit-file-multiple-dirs/_expected/dist2/myfile b/test/cli/samples/emit-file-multiple-dirs/_expected/dist2/myfile new file mode 100644 index 00000000000..f2ba8f84ab5 --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/_expected/dist2/myfile @@ -0,0 +1 @@ +abc \ No newline at end of file diff --git a/test/cli/samples/emit-file-multiple-dirs/main.js b/test/cli/samples/emit-file-multiple-dirs/main.js new file mode 100644 index 00000000000..df16c1b06b9 --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/main.js @@ -0,0 +1 @@ +assert.equal( ANSWER, 42 ); diff --git a/test/cli/samples/emit-file-multiple-dirs/rollup.config.js b/test/cli/samples/emit-file-multiple-dirs/rollup.config.js new file mode 100644 index 00000000000..5131be2d2f9 --- /dev/null +++ b/test/cli/samples/emit-file-multiple-dirs/rollup.config.js @@ -0,0 +1,18 @@ +export default { + input: "main.js", + output: [ + { + dir: "_actual/dist1", + format: "cjs" + }, + { + dir: "_actual/dist2", + format: "esm" + } + ], + plugins: [{ + generateBundle() { + this.emitFile({type: "asset", fileName: "myfile", source: "abc"}) + } + }] +}