rollup-timer
v0.3.4
Published
Times Rollup plugins by monkey-patching plugin API functions.
Downloads
175
Readme
rollup-timer
Times Rollup plugins by monkey-patching plugin API functions.
Warning: At the time of this writing, the latest version of rollup-plugin-commonjs is incompatible with rollup-timer. Until this issue is resolved, timings for rollup-plugin-commonjs will be incomplete.
Installation
npm i --save-dev rollup-timer
Usage
import rollup from 'rollup'
import time from 'rollup-timer'
// Monkey-patch rollup.rollup and plugin API functions
time(rollup)
const options = {
// ... Your Rollup options here ...
}
rollup.rollup(options)
.then(function () {
console.info('Done!')
})
.catch(function (err) {
console.error(err)
})
Advanced
The time
function returns a patched version of its input. Instead of passing
the full rollup
exports, you can also just pass rollup.rollup
. The code
above can therefore also be written as:
import {rollup} from 'rollup' // ← Named import of rollup.rollup
import time from 'rollup-timer'
// Obtain a patched rollup function
const timedRollup = time(rollup)
// Use the patched function instead of the original
timedRollup(options)
.then(function () {
console.info('Done!')
})
.catch(function (err) {
console.error(err)
})
Additionally, if the function that you pass to time
returns a stream rather
than a promise, reporting will occur on the stream's end
event. This allows
you to use rollup-stream directly
as well.
API
If you want more control, you can use the timer API directly. To do so, you
import the RollupTimer
class instead of the default export time()
. The class
has two member functions: time(plugins)
and report()
.
Although rollup-stream is supported out of the box, here's an example that uses those two functions:
// 1. Import rollup-stream and some plugins
import rollupStream from 'rollup-stream'
import nodeResolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs'
// 2. Import RollupTimer
import {RollupTimer} from 'rollup-timer'
// 3. Create timer
const timer = new RollupTimer()
const options = {
plugins: timer.time([ // ← 4. Wrap your plugins in timer.time()
nodeResolve({jsnext: true, main: true}),
commonjs({include: 'node_modules/**'})
])
// ... Add other Rollup options as usual ...
}
rollupStream(options)
.once('end', function () {
// 5. Write the timing report to the console
timer.report()
console.info('Done!')
})
Caveat
Rollup version 0.33.0 introduced the name
property for plugins, which is used
in the report generated by rollup-timer. If a plugin has not been updated to
supply this property, the report will fall back to the numeric index of the
plugin, which doesn't look that great. In this case, you are encouraged to
submit a pull request for the plugin that adds its name.
Author
License
MIT