diff --git a/CHANGELOG.md b/CHANGELOG.md
index e4ab2e523fa..f11c9077400 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# rollup changelog
+## 2.0.6
+*2020-03-13*
+
+### Bug Fixes
+* Do not use file names from different outputs when generating sourcemaps using the `dir` option (#3440)
+
+### Pull Requests
+* [#3440](https://github.com/rollup/rollup/pull/3440): Use correct file names when writing sourcemaps for multiple outputs (@lukastaegert)
+
## 2.0.5
*2020-03-12*
diff --git a/docs/05-plugin-development.md b/docs/05-plugin-development.md
index 0ae2b48fb7f..51544787d48 100644
--- a/docs/05-plugin-development.md
+++ b/docs/05-plugin-development.md
@@ -413,7 +413,7 @@ resolveImportMeta(property, {moduleId}) {
Note that since this hook has access to the filename of the current chunk, its return value will not be considered when generating the hash of this chunk.
#### `writeBundle`
-Type: `( bundle: { [fileName: string]: AssetInfo | ChunkInfo }) => void`
+Type: `(options: OutputOptions, bundle: { [fileName: string]: AssetInfo | ChunkInfo }) => void`
Kind: `async, parallel`
Previous Hook: [`generateBundle`](guide/en/#generatebundle)
Next Hook: If it is called, this is the last hook of the output generation phase and may again be followed by [`outputOptions`](guide/en/#outputoptions) if another output is generated.
diff --git a/package-lock.json b/package-lock.json
index 742a10ad83a..405683a6844 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "rollup",
- "version": "2.0.5",
+ "version": "2.0.6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index bdc7936a829..44e415d1394 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rollup",
- "version": "2.0.5",
+ "version": "2.0.6",
"description": "Next-generation ES module bundler",
"main": "dist/rollup.js",
"module": "dist/es/rollup.js",
diff --git a/src/Chunk.ts b/src/Chunk.ts
index ecd64cbc207..4c126ef256e 100644
--- a/src/Chunk.ts
+++ b/src/Chunk.ts
@@ -509,6 +509,7 @@ export default class Chunk {
) {
timeStart('render format', 3);
+ const chunkId = this.id!;
const format = options.format as string;
const finalise = finalisers[format];
if (options.dynamicImportFunction && format !== 'es') {
@@ -602,12 +603,12 @@ export default class Chunk {
let file: string;
if (options.file) file = resolve(options.sourcemapFile || options.file);
- else if (options.dir) file = resolve(options.dir, this.id!);
- else file = resolve(this.id!);
+ else if (options.dir) file = resolve(options.dir, chunkId);
+ else file = resolve(chunkId);
const decodedMap = magicString.generateDecodedMap({});
map = collapseSourcemaps(
- this,
+ this.graph,
file,
decodedMap,
this.usedModules,
diff --git a/src/utils/collapseSourcemaps.ts b/src/utils/collapseSourcemaps.ts
index 8e310f7362a..b347bcde603 100644
--- a/src/utils/collapseSourcemaps.ts
+++ b/src/utils/collapseSourcemaps.ts
@@ -1,5 +1,4 @@
import { DecodedSourceMap, SourceMap } from 'magic-string';
-import Chunk from '../Chunk';
import Graph from '../Graph';
import Module from '../Module';
import {
@@ -200,14 +199,14 @@ function getCollapsedSourcemap(
}
export function collapseSourcemaps(
- bundle: Chunk,
+ graph: Graph,
file: string,
map: DecodedSourceMap,
modules: Module[],
bundleSourcemapChain: DecodedSourceMapOrMissing[],
excludeContent: boolean | undefined
) {
- const linkMap = getLinkMap(bundle.graph);
+ const linkMap = getLinkMap(graph);
const moduleSources = modules
.filter(module => !module.excludeFromSourcemap)
.map(module =>
diff --git a/test/cli/samples/config-multiple-source-maps/_config.js b/test/cli/samples/config-multiple-source-maps/_config.js
new file mode 100644
index 00000000000..a91d466ccdc
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/_config.js
@@ -0,0 +1,4 @@
+module.exports = {
+ description: 'correctly generates sourcemaps for multiple outputs',
+ command: 'rollup -c'
+};
diff --git a/test/cli/samples/config-multiple-source-maps/_expected/main-cjs.js b/test/cli/samples/config-multiple-source-maps/_expected/main-cjs.js
new file mode 100644
index 00000000000..a93f480e14c
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/_expected/main-cjs.js
@@ -0,0 +1,4 @@
+'use strict';
+
+assert.equal( ANSWER, 42 );
+//# sourceMappingURL=main-cjs.js.map
diff --git a/test/cli/samples/config-multiple-source-maps/_expected/main-cjs.js.map b/test/cli/samples/config-multiple-source-maps/_expected/main-cjs.js.map
new file mode 100644
index 00000000000..086c5841cee
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/_expected/main-cjs.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main-cjs.js","sources":["../main.js"],"sourcesContent":["assert.equal( ANSWER, 42 );\n"],"names":[],"mappings":";;AAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE"}
\ No newline at end of file
diff --git a/test/cli/samples/config-multiple-source-maps/_expected/main-es.js b/test/cli/samples/config-multiple-source-maps/_expected/main-es.js
new file mode 100644
index 00000000000..8d97b6cf48d
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/_expected/main-es.js
@@ -0,0 +1,2 @@
+assert.equal( ANSWER, 42 );
+//# sourceMappingURL=main-es.js.map
diff --git a/test/cli/samples/config-multiple-source-maps/_expected/main-es.js.map b/test/cli/samples/config-multiple-source-maps/_expected/main-es.js.map
new file mode 100644
index 00000000000..931e92a9cde
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/_expected/main-es.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main-es.js","sources":["../main.js"],"sourcesContent":["assert.equal( ANSWER, 42 );\n"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE"}
\ No newline at end of file
diff --git a/test/cli/samples/config-multiple-source-maps/main.js b/test/cli/samples/config-multiple-source-maps/main.js
new file mode 100644
index 00000000000..df16c1b06b9
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/main.js
@@ -0,0 +1 @@
+assert.equal( ANSWER, 42 );
diff --git a/test/cli/samples/config-multiple-source-maps/rollup.config.js b/test/cli/samples/config-multiple-source-maps/rollup.config.js
new file mode 100644
index 00000000000..db2092f239e
--- /dev/null
+++ b/test/cli/samples/config-multiple-source-maps/rollup.config.js
@@ -0,0 +1,17 @@
+export default {
+ input: 'main.js',
+ output: [
+ {
+ format: 'cjs',
+ dir: '_actual',
+ entryFileNames: '[name]-[format].js',
+ sourcemap: true,
+ },
+ {
+ format: 'es',
+ dir: '_actual',
+ entryFileNames: '[name]-[format].js',
+ sourcemap: true
+ }
+ ]
+};