Skip to content

v2.0.0

Compare
Choose a tag to compare
@lukastaegert lukastaegert released this 06 Mar 13:54
· 1498 commits to master since this release

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 of rollup/dist/rollup.es.js
    • The ESM browser build is at rollup/dist/es/rollup.browser.js instead of rollup/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 of rollup/dist (#3391)

  • 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 and chunkGroupingSize 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 of Buffer. A Buffer 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 match generateBundle: 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
  • You can no longer access this.watcher on the plugin context.

  • The transform hook can no longer return dependencies.

  • The treeshake.pureExternalModules option will now show a deprecation warning when used: use treeshake.moduleSideEffects: 'no-external' instead

  • Using import.meta.ROLLUP_ASSET_URL_<..> and import.meta.ROLLUP_CHUNK_URL_<..> in code will now show warnings: use import.meta.ROLLUP_FILE_URL_<..> instead

  • The resolveAssetUrl hook will now show a deprecation warning when used: use resolveFileUrl instead

  • The following plugin context functions will show warnings when used:

    • this.emitAsset: use this.emitFile
    • this.emitChunk: use this.emitFile
    • this.getAssetFileName: use this.getFileName
    • this.getChunkFileName: use this.getFileName
    • this.isExternal: use this.resolve
    • this.resolveId: use this.resolve
  • Directly adding properties to the bundle object in the generateBundle is deprecated will show a warning (removing properties is allowed, though): Use this.emitFile

  • Accessing chunk.isAsset on the bundle is deprecated: Use chunk.type === 'asset' instead

  • The error code for a missing name property when targeting UMD has been changed to MISSING_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 for system (#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