Skip to content

Commit 12512c9

Browse files
committed
Handle bundles with multiple outputs, 2.0.4
1 parent 8813ec7 commit 12512c9

5 files changed

Lines changed: 42 additions & 41 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ dependents: 1
159159
- **unusedExports** *(Array)* - list of unused named exports
160160

161161

162+
## Other considerations
163+
164+
Rollup allows you to output to multiple files. If you are outputting to multiple
165+
files you will get a distinct analysis for each output file. Each analysis
166+
will contain data on the files imported by the respective target.
167+
162168
## License
163169

164170
MIT © [Andrew Carpenter](https://github.com/doesdev)

index.js

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -114,28 +114,23 @@ const formatted = (bndl, opts) => analyze(bndl, opts, true);
114114
const plugin = (opts = {}) => {
115115
let cb = opts.writeTo || (opts.stdout ? console.log : console.error);
116116
if (opts.onAnalysis) cb = opts.onAnalysis;
117-
let written;
118-
let modules;
117+
let depMap = {};
119118

120119
let runAnalysis = (out, bundle, isWrite) => new Promise((resolve, reject) => {
121120
resolve();
122-
if (written) return
123-
written = true;
124121
if (out.bundle) bundle = out.bundle;
122+
let modules = bundle.modules;
125123

126-
if (!Array.isArray(bundle.modules)) {
127-
modules.forEach((m) => {
128-
let bm = bundle.modules[m.id];
129-
bm.id = bm.id || m.id;
130-
bm.usedExports = bm.renderedExports || m.renderedExports;
131-
bm.unusedExports = bm.removedExports || m.removedExports;
132-
bm.dependencies = m.dependencies || [];
133-
});
134-
modules = Object.keys(bundle.modules).map((k) => bundle.modules[k]);
135-
} else {
136-
modules = bundle.modules;
124+
if (Array.isArray(modules)) {
125+
return analyze({modules}, opts, !opts.onAnalysis).then(cb)
137126
}
138127

128+
modules = Object.keys(modules).map((k) => {
129+
let module = Object.assign(modules[k], depMap[k] || {});
130+
module.usedExports = module.renderedExports;
131+
module.unusedExports = module.removedExports;
132+
return module
133+
});
139134
return analyze({modules}, opts, !opts.onAnalysis).then(cb)
140135
});
141136

@@ -144,8 +139,8 @@ const plugin = (opts = {}) => {
144139
transformChunk: (_a, _b, chunk) => new Promise((resolve, reject) => {
145140
resolve(null);
146141
if (!chunk || !chunk.orderedModules) return
147-
modules = chunk.orderedModules.map((m) => {
148-
return {id: m.id, dependencies: m.dependencies.map((d) => d.id)}
142+
chunk.orderedModules.forEach(({id, dependencies}) => {
143+
depMap[id] = {id, dependencies: dependencies.map((d) => d.id)};
149144
});
150145
}),
151146
generateBundle: runAnalysis,

module.js

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,28 +112,23 @@ export const formatted = (bndl, opts) => analyze(bndl, opts, true)
112112
export const plugin = (opts = {}) => {
113113
let cb = opts.writeTo || (opts.stdout ? console.log : console.error)
114114
if (opts.onAnalysis) cb = opts.onAnalysis
115-
let written
116-
let modules
115+
let depMap = {}
117116

118117
let runAnalysis = (out, bundle, isWrite) => new Promise((resolve, reject) => {
119118
resolve()
120-
if (written) return
121-
written = true
122119
if (out.bundle) bundle = out.bundle
120+
let modules = bundle.modules
123121

124-
if (!Array.isArray(bundle.modules)) {
125-
modules.forEach((m) => {
126-
let bm = bundle.modules[m.id]
127-
bm.id = bm.id || m.id
128-
bm.usedExports = bm.renderedExports || m.renderedExports
129-
bm.unusedExports = bm.removedExports || m.removedExports
130-
bm.dependencies = m.dependencies || []
131-
})
132-
modules = Object.keys(bundle.modules).map((k) => bundle.modules[k])
133-
} else {
134-
modules = bundle.modules
122+
if (Array.isArray(modules)) {
123+
return analyze({modules}, opts, !opts.onAnalysis).then(cb)
135124
}
136125

126+
modules = Object.keys(modules).map((k) => {
127+
let module = Object.assign(modules[k], depMap[k] || {})
128+
module.usedExports = module.renderedExports
129+
module.unusedExports = module.removedExports
130+
return module
131+
})
137132
return analyze({modules}, opts, !opts.onAnalysis).then(cb)
138133
})
139134

@@ -142,8 +137,8 @@ export const plugin = (opts = {}) => {
142137
transformChunk: (_a, _b, chunk) => new Promise((resolve, reject) => {
143138
resolve(null)
144139
if (!chunk || !chunk.orderedModules) return
145-
modules = chunk.orderedModules.map((m) => {
146-
return {id: m.id, dependencies: m.dependencies.map((d) => d.id)}
140+
chunk.orderedModules.forEach(({id, dependencies}) => {
141+
depMap[id] = {id, dependencies: dependencies.map((d) => d.id)}
147142
})
148143
}),
149144
generateBundle: runAnalysis,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rollup-plugin-analyzer",
3-
"version": "2.0.3",
3+
"version": "2.0.4",
44
"description": "Mad metrics for your rollup bundles, know all the things",
55
"main": "index.js",
66
"module": "module.js",

test/test.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ rollers.forEach(({rollup, version, opts, noTreeshake}) => {
158158

159159
if (version === '0.60.x') {
160160
let split1 = `${version}: writes expected heading with experimentalCodeSplitting`
161-
test.skip(split1, async (assert) => {
161+
test(split1, async (assert) => {
162162
let results
163163
let writeTo = (r) => { results = r }
164164
let rollOpts = Object.assign({plugins: [plugin({writeTo})]}, multiInputOpts)
@@ -169,16 +169,21 @@ rollers.forEach(({rollup, version, opts, noTreeshake}) => {
169169
})
170170

171171
let split2 = `${version}: data as expected with experimentalCodeSplitting`
172-
test.skip(split2, async (assert) => {
173-
let results
174-
let onAnalysis = (r) => { results = r.modules }
172+
test(split2, async (assert) => {
173+
let results = []
174+
let onAnalysis = (r) => { results.push(r.modules) }
175175
let plugins = [plugin({onAnalysis})]
176176
let rollOpts = Object.assign({}, multiInputOpts, {plugins})
177177
rollOpts.experimentalCodeSplitting = true
178178
let bundle = await rollup(rollOpts)
179179
await bundle.write(rollOpts.output)
180-
let imported = results.find((r) => r.id.indexOf('import-a') !== -1)
181-
assert.is(imported.size, 27)
180+
181+
let imports = [{id: 'import-a', size: 8238}, {id: 'import-b', size: 33}]
182+
imports.forEach((imp, i) => {
183+
let result = results[i]
184+
let imported = result.find((r) => r.id.indexOf(imp.id) !== -1)
185+
assert.is(imported.size, imp.size)
186+
})
182187
})
183188
}
184189
})

0 commit comments

Comments
 (0)