2020-03-06
For the detailed release notes, see below.
After one year finally a new major:
🎉🕺💃 Welcome rollup@2.0.0! 🎇🎆
As any major, it is first and foremost about getting rid of old, deprecated, rotting and smelling stuff. But there are some cool things hidden as well…
Rollup has always been rather small, but we are now back to zero dependencies and 2.5 MB install size! This also means: No hidden TS type dependencies any more that smuggle Node types into your AMD setup. Sorry about this. Fixed.
Watch mode: Always not quite perfect in Rollup. So we decided to bundle chokidar as the watch option for everyone. This makes it simpler for us, but should bring improvements for everyone. Chokidar IS the gold standard here!
This is really the hidden gem here if you do code-splitting: Rollup now uses side-effect detection to not only avoid unnecessary empty imports, it will also create much better chunks. Check out the examples here: #3369
For those living in the future: Rollup can now be imported in Node as an ES-Module—without a bundler: #3391
And for all those Stencils out there who are rebundling Rollup: Rollup is now shipping ES2018 code and has also been restructured via code-splitting so that watch mode and CLI are nicely separate but reuse shared code so you only pull in what you really need.
🕵️♂️But here the details:
Breaking Changes
-
Rollup now requires at least Node 10 to run, or a sufficiently modern browser (#3346)
-
The file structure of Rollup's ESM builds has changed:
- The main ESM entry point is now at
rollup/dist/es/rollup.js
instead ofrollup/dist/rollup.es.js
- The ESM browser build is at
rollup/dist/es/rollup.browser.js
instead ofrollup/dist/rollup.browser.es.js
In general, the ESM builds now follow the same naming scheme as the CJS builds but are located in the
rollup/dist/es
subfolder instead ofrollup/dist
(#3391) - The main ESM entry point is now at
-
The "watch.chokidar" option no longer accepts a
boolean
value but only an object of parameters that is passed to the bundled Chokidar instance. Chokidar installations by the user will be ignored in favour of the bundled instance (#3331) -
Modules that are completely tree-shaken will no longer be listed as part of any chunks in
generateBundle
-
The
experimentalOptimizeChunks
andchunkGroupingSize
options have been removed -
acorn plugins can only be used if they accept a passed-in acorn instance instead of importing it themselves. See acornjs/acorn#870 (comment) for what needs to be done to make plugins compatible that do not support this yet (#3391)
-
Emitted chunks now have the TypeScript type
UInt8Array
instead ofBuffer
. ABuffer
can still be used, though (#3395) -
The TypeScript types no longer use ESTree types for AST nodes but a very generic type that does not contain information specific to certain node types (#3395)
-
The signature of the
writeBundle
plugin hook has been changed to matchgenerateBundle
: The bundle object is now passed as second parameter instead of first and the first parameter is the output options (#3361) -
The following plugin hooks have been removed:
- ongenerate: use
generateBundle
instead - onwrite: use
writeBundle
instead - transformBundle: use
renderChunk
instead - transformChunk: use
renderChunk
instead
- ongenerate: use
-
You can no longer access
this.watcher
on the plugin context. -
The
transform
hook can no longer returndependencies
. -
The
treeshake.pureExternalModules
option will now show a deprecation warning when used: usetreeshake.moduleSideEffects: 'no-external'
instead -
Using
import.meta.ROLLUP_ASSET_URL_<..>
andimport.meta.ROLLUP_CHUNK_URL_<..>
in code will now show warnings: useimport.meta.ROLLUP_FILE_URL_<..>
instead -
The
resolveAssetUrl
hook will now show a deprecation warning when used: useresolveFileUrl
instead -
The following plugin context functions will show warnings when used:
this.emitAsset
: usethis.emitFile
this.emitChunk
: usethis.emitFile
this.getAssetFileName
: usethis.getFileName
this.getChunkFileName
: usethis.getFileName
this.isExternal
: usethis.resolve
this.resolveId
: usethis.resolve
-
Directly adding properties to the bundle object in the
generateBundle
is deprecated will show a warning (removing properties is allowed, though): Usethis.emitFile
-
Accessing
chunk.isAsset
on the bundle is deprecated: Usechunk.type === 'asset'
instead -
The error code for a missing
name
property when targeting UMD has been changed toMISSING_NAME_OPTION_FOR_IIFE_EXPORT
to emphasize this is needed for the IIFE part of UMD (#3393)
Features
- Rollup now bundles Chokidar for a better watch experience (#3331)
- Rollup now bundles acorn again, removing its only external dependency (#3391)
- Do not consider empty imports from side-effect-free modules for chunking and hoist side-effect imports if necessary (#3369)
- Rollup can now be imported as an ES module in Node via
import {rollup} from 'rollup'
. Note that this relies on Node's experimental conditional package exports feature and is therefore itself experimental (#3391) systemjs
can be used as format alias forsystem
(#3381)
Bug Fixes
- Unknown output options now trigger a warning when using the JavaScript API (#3352)
- Rollup will no longer introduce Node types into TypeScript projects that do not use them (#3395)
- Generate correct sourcemaps when tree-shaking occurs in a multi-file bundle (#3423)
Pull Requests
- #3331: Bundle Chokidar (@lukastaegert)
- #3343: Remove experimentalOptimizeChunks (@lukastaegert)
- #3346: Update minimum required Node version to 10 (@lukastaegert)
- #3352: Remove active deprecations (@lukastaegert)
- #3361: Change writeBundle signature to match generateBundle (@lukastaegert)
- #3369: Avoid empty imports from side-effect-free chunks (@lukastaegert)
- #3381: Rename esm to es everywhere, add systemjs alias (@lukastaegert)
- #3391: Bundle acorn, allow importing Rollup as Node ES module, update dependencies (@lukastaegert)
- #3393: Better error code for name-less umd bundle (@rail44)
- #3395: Remove
@types
dependencies (@lukastaegert) - #3423: Update magic-string and fix sourcemaps (@lukastaegert)