Skip to content

Commit 1ddf5f7

Browse files
committed
Reflect treeshaking, only in plugin currently
1 parent 9b9c2ca commit 1ddf5f7

3 files changed

Lines changed: 61 additions & 26 deletions

File tree

index.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,19 @@ const analyze = (bundle, opts = {}, format = false) => {
1818
let { root, limit, filter } = opts;
1919
let deps = {};
2020
let bundleSize = 0;
21+
let bundleModules = bundle.modules;
2122

2223
return new Promise((resolve, reject) => {
23-
let modules = bundle.modules.map((m, i) => {
24+
if (bundleModules && !Array.isArray(bundleModules)) {
25+
bundleModules = Object.entries(bundleModules).map(([id, obj]) => {
26+
let { originalLength, renderedLength } = obj;
27+
return {id, dependencies: [], originalLength, renderedLength}
28+
});
29+
}
30+
31+
let modules = bundleModules.map((m, i) => {
2432
let id = m.id.replace(root, '');
25-
let size = Buffer.byteLength(m.code, 'utf8') || 0;
33+
let size = m.renderedLength || Buffer.byteLength(m.code, 'utf8') || 0;
2634
bundleSize += size;
2735

2836
if (Array.isArray(filter) && !filter.some((f) => id.match(f))) return null
@@ -68,12 +76,20 @@ const analyze = (bundle, opts = {}, format = false) => {
6876
const formatted = (bndl, opts) => analyze(bndl, opts, true);
6977

7078
const plugin = (opts = {}) => {
71-
let log = opts.writeTo || (opts.stdout ? console.log : console.error);
79+
let cb = opts.writeTo || (opts.stdout ? console.log : console.error);
80+
if (opts.onAnalysis) cb = opts.onAnalysis;
81+
let written;
82+
83+
let runAnalysis = (outputOptions, bundle, isWrite) => {
84+
if (written) return
85+
if (outputOptions.bundle) bundle = outputOptions.bundle;
86+
written = true;
87+
return analyze(bundle, opts, !opts.onAnalysis).then(cb)
88+
};
7289
return {
7390
name: 'rollup-analyzer-plugin',
74-
ongenerate: ({bundle}) => {
75-
return formatted(bundle, opts).then(log)
76-
}
91+
generateBundle: runAnalysis,
92+
ongenerate: runAnalysis
7793
}
7894
};
7995

module.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,19 @@ export const analyze = (bundle, opts = {}, format = false) => {
1616
let { root, limit, filter } = opts
1717
let deps = {}
1818
let bundleSize = 0
19+
let bundleModules = bundle.modules
1920

2021
return new Promise((resolve, reject) => {
21-
let modules = bundle.modules.map((m, i) => {
22+
if (bundleModules && !Array.isArray(bundleModules)) {
23+
bundleModules = Object.entries(bundleModules).map(([id, obj]) => {
24+
let { originalLength, renderedLength } = obj
25+
return {id, dependencies: [], originalLength, renderedLength}
26+
})
27+
}
28+
29+
let modules = bundleModules.map((m, i) => {
2230
let id = m.id.replace(root, '')
23-
let size = Buffer.byteLength(m.code, 'utf8') || 0
31+
let size = m.renderedLength || Buffer.byteLength(m.code, 'utf8') || 0
2432
bundleSize += size
2533

2634
if (Array.isArray(filter) && !filter.some((f) => id.match(f))) return null
@@ -66,11 +74,19 @@ export const analyze = (bundle, opts = {}, format = false) => {
6674
export const formatted = (bndl, opts) => analyze(bndl, opts, true)
6775

6876
export const plugin = (opts = {}) => {
69-
let log = opts.writeTo || (opts.stdout ? console.log : console.error)
77+
let cb = opts.writeTo || (opts.stdout ? console.log : console.error)
78+
if (opts.onAnalysis) cb = opts.onAnalysis
79+
let written
80+
81+
let runAnalysis = (outputOptions, bundle, isWrite) => {
82+
if (written) return
83+
if (outputOptions.bundle) bundle = outputOptions.bundle
84+
written = true
85+
return analyze(bundle, opts, !opts.onAnalysis).then(cb)
86+
}
7087
return {
7188
name: 'rollup-analyzer-plugin',
72-
ongenerate: ({bundle}) => {
73-
return formatted(bundle, opts).then(log)
74-
}
89+
generateBundle: runAnalysis,
90+
ongenerate: runAnalysis
7591
}
7692
}

test/index.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ Rollup File Analysis
2929
const rollers = [
3030
{rollup: rollupLatest, version: 'latest', opts: baseOpts},
3131
{rollup: rollup60, version: '0.60.x', opts: baseOpts},
32-
{rollup: rollup55, version: '0.55.x', opts: baseOpts},
33-
{rollup: rollup50, version: '0.50.x', opts: baseOpts},
34-
{rollup: rollup45, version: '0.45.x', opts: oldOpts},
35-
{rollup: rollup40, version: '0.40.x', opts: oldOpts}
32+
{rollup: rollup55, version: '0.55.x', opts: baseOpts, noTreeshake: true},
33+
{rollup: rollup50, version: '0.50.x', opts: baseOpts, noTreeshake: true},
34+
{rollup: rollup45, version: '0.45.x', opts: oldOpts, noTreeshake: true},
35+
{rollup: rollup40, version: '0.40.x', opts: oldOpts, noTreeshake: true}
3636
]
3737

3838
// main
39-
rollers.forEach(({rollup, version, opts}) => {
39+
rollers.forEach(({rollup, version, opts, noTreeshake}) => {
4040
test(`${version}: formatted returns string`, async (assert) => {
4141
let bundle = await rollup(opts)
4242
let results = await formatted(bundle)
@@ -96,9 +96,7 @@ rollers.forEach(({rollup, version, opts}) => {
9696
assert.is(typeof results, 'string')
9797
})
9898

99-
let shouldFailPlugin = {latest: true, '0.60.x': true}
100-
let pluginTest = shouldFailPlugin[version] ? test.failing : test
101-
pluginTest(`${version}: plugin writes expected results`, async (assert) => {
99+
test(`${version}: plugin writes expected results`, async (assert) => {
102100
let results
103101
let writeTo = (r) => { results = r }
104102
let rollOpts = Object.assign({plugins: [plugin({writeTo})]}, opts)
@@ -107,10 +105,15 @@ rollers.forEach(({rollup, version, opts}) => {
107105
assert.is(results.substr(0, expectHeader.length), expectHeader)
108106
})
109107

110-
test.failing(`${version}: tree shaking is accounted for`, async (assert) => {
111-
let bundle = await rollup(opts)
112-
let results = await analyze(bundle)
113-
let imported = results.find((r) => r.id.match('importme'))
114-
assert.is(imported.size, 4)
115-
})
108+
if (!noTreeshake) {
109+
test(`${version}: tree shaking is accounted for`, async (assert) => {
110+
let results
111+
let onAnalysis = (r) => { results = r }
112+
let rollOpts = Object.assign({plugins: [plugin({onAnalysis})]}, opts)
113+
let bundle = await rollup(rollOpts)
114+
await bundle.generate({format: 'cjs'})
115+
let imported = results.find((r) => r.id.indexOf('import-a') !== -1)
116+
assert.is(imported.size, 27)
117+
})
118+
}
116119
})

0 commit comments

Comments
 (0)