4.0.0
2023-10-05
BREAKING CHANGES
General Changes
- The minimal required Node version is now 18.0.0 (#5142)
- The browser build now relies on a WASM artifact that needs to be provided as well (#5073)
- The NodeJS build now relies on an optional native binary; for unsupported platforms, users can use the
@rollup/wasm-node
package that has the same interface as Rollup but relies on WASM artifacts (#5073) - The "with" syntax for import attributes is not yet supported, awaiting support in SWC (#5073)
- The
INVALID_IMPORT_ASSERTION
error code has been replaced withINVALID_IMPORT_ATTRIBUTE
(#5073) - Rollup will now warn for
@__PURE__
and@__NO_SIDE_EFFECTS__
annotations in invalid locations (#5165) - If an entry module starts with a shebang comment
#!...
, this comment will be prepended to the output fores
andcjs
formats (#5163) - File hashes will now use url-safe base64 encoded hashes (#5155)
- The maximum hash length has been reduced to 22 characters (#5155)
- The
RollupWarning
type has been removed in favor of theRollupLog
type (#5147)
Changes to Rollup Options
- Acorn plugins are no longer supported, the
acornInjectPlugins
option has been removed (#5073) - The
acorn
option has been removed (#5073) output.externalImportAssertions
has been deprecated in favor ofoutput.externalImportAttributes
(#5073)inlineDynamicImports
,manualChunks
andpreserveModules
have been removed on input option level: Please use the corresponding output options of the same names (#5143)- Removed output options (#5143):
output.experimentalDeepDynamicChunkOptimization
: This option is no longer needed as Rollup now always runs the full chunking algorithmoutput.dynamicImportFunction
: Use therenderDynamicImport
plugin hook insteadoutput.namespaceToStringTag
: Useoutput.generatedCode.symbols
insteadoutput.preferConst
: Useoutput.generatedCode.constBindings
instead
Plugin API Changes
- For
this.resolve
, the default of theskipSelf
option is nowtrue
(#5142) this.parse
now only supports theallowReturnOutsideFunction
option for now (#5073)- Import assertions now use the new import attribute AST structure (#5073)
- "assertions" have been replaced with "attributes" in various places of the plugin interface (#5073)
- If the import of a module id is handled by the
load
hook of a plugin,rollup.watch
no longer watches the actual file if the module id corresponds to a real path; if this is intended, then the plugin is responsible for callingthis.addWatchFile
for any dependency files (#5150) - The normalized input options provided by
buildStart
and other hooks no longer contain anonwarn
handler; plugins should useonLog
instead (#5147) this.moduleIds
has been removed from the plugin context: Usethis.getModuleIds()
instead (#5143)- The
hasModuleSideEffects
flag has been removed from theModuleInfo
returned bythi s.getModuleInfo()
: UsemoduleSideEffects
on theModuleInfo
instead (#5143)
Features
- Improve parsing speed by switching to a native SWC-based parser (#5073)
- Rollup will now warn for
@__PURE__
and@__NO_SIDE_EFFECTS__
annotations in invalid locations (#5165) - The parser is now exposed as a separate export
parseAst
(#5169)
Bug Fixes
- Rollup no longer tries to watch virtual files if their name corresponds to an actual file name; instead, plugins handle watching via
this.addWatchFile()
(#5150)
Pull Requests
- #5073: [v4.0] Switch parser to SWC and introduce native/WASM code (@lukastaegert)
- #5142: [v4.0] Set the default of skipSelf to true (@TrickyPi)
- #5143: [v4.0] Remove deprecated features (@lukastaegert)
- #5144: [v4.0] Imporve the performance of generating ast and rollup ast nodes (@TrickyPi)
- #5147: [v4.0] Remove onwarn from normalized input options (@lukastaegert)
- #5150: [v4.0] feat: Do not watch files anymore if their content is returned by the load hook (@TrickyPi)
- #5154: [v4.0] Add parse option to allow return outside function (@lukastaegert)
- #5155: [v4.0] feat: implement hashing content in Rust (@TrickyPi)
- #5157: [v4.0] Handle empty exports (@lukastaegert)
- #5160: chore(deps): lock file maintenance minor/patch updates (@renovate[bot])
- #5163: [v4.0] feat: preserve shebang in entry module for CJS and ESM outputs (@TrickyPi)
- #5164: [v4.0] fix: also strip BOM from code strings in JS (@TrickyPi)
- #5165: [v4.0] warn for invalid annotations (@lukastaegert)
- #5168: [v4.0] Ensure we support new import attribute "with" syntax (@lukastaegert)
- #5169: [v4.0] Expose parser (@lukastaegert)