The version 4.0.0 is not covered by your current version range.
If you donât accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.
It might be worth looking into these changes and trying to get this project onto the latest version of webpack.
If you have a solid test suite and good coverage, a passing build is a strong indicator that you can take advantage of these changes directly by merging the proposed change into your project. If the build fails or you donât have such unconditional trust in your tests, this branch is a great starting point for you to work on the update.
Release Notesv4.0.0
Big changes
Environment
Node.js 4 is no longer supported. Source Code was upgraded to a higher ecmascript version.
Usage
You have to choose (mode or --mode) between two modes now: production or development
production enables all kind of optimizations to generate optimized bundles
development enables comments and hint for development and enables the eval devtool
production doesn't support watching, development is optimized for fast incremental rebuilds
production also enables module concatenating (Scope Hoisting)
You can configure this in detail with the flags in optimization.* (build your custom mode)
process.env.NODE_ENV are set to production or development (only in built code, not in config)
There is a hidden none mode which disables everything
Syntax
import() always returns a namespace object. CommonJS modules are wrapped into the default export
This probably breaks your code, if you used to import CommonJs with import()
Configuration
You no longer need to use these plugins:
NoEmitOnErrorsPlugin -> optimization.noEmitOnErrors (on by default in production mode)
ModuleConcatenationPlugin -> optimization.concatenateModules (on by default in production mode)
NamedModulesPlugin -> optimization.namedModules (on by default in develoment mode)
CommonsChunkPlugin was removed -> optimization.splitChunks, optimization.runtimeChunk
JSON
webpack now handles JSON natively
You may need to add type: "javascript/auto" when transforming JSON via loader to JS
Just using JSON without loader should still work
allows to import JSON via ESM syntax
unused exports elimination for JSON modules
Optimization
Upgrade uglifyjs-webpack-plugin to v1
ES15 support
Big features
Modules
webpack now supports these module types:
javascript/auto: (The default one in webpack 3) Javascript module with all module systems enabled: CommonJS, AMD, ESM
javascript/esm: EcmaScript modules, all other module system are not available
javascript/dynamic: Only CommonJS and, EcmaScript modules are not available
json: JSON data, it's available via require and import
Now: webpack removes the dead code (in some cases)
This prevents crashing when import() occur in a dead branch
Syntax
webpackInclude and webpackExclude are supported by the magic comment for import(). They allow to filter files when using a dynamic expression.
Using System.import() now emits a warning
You can disable the warning with Rule.parser.system: true
You can disable System.import with Rule.parser.system: false
Configuration
Resolving can now be configured with module.rules[].resolve. It's merged with the global configuration.
optimization.minimize has been added to switch minimizing on/off
By default: on in production mode, off in development mode
optimization.minimizer has been added to configurate minimizers and options
Usage
Some Plugin options are now validated
CLI has been move to webpack-cli, you need to install webpack-cli to use the CLI
The ProgressPlugin (--progress) now displays plugin names
At least for plugins migrated to the new plugin system
Performance
UglifyJs now caches and parallizes by default
Multiple performance improvements, especially for faster incremental rebuilds
performance improvement for RemoveParentModulesPlugin
Stats
Stats can display modules nested in concatenated modules
Features
Configuration
Module type is automatically choosen for mjs, json and wasm extensions. Other extensions need to be configured via module.rules[].type
Incorrect options.dependencies configurations now throw error
sideEffects can be overriden via module.rules
output.hashFunction can now be a Constructor to a custom hash function
You can provide a non-cryto hash function for performance reasons
add output.globalObject config option to allow to choose the global object reference in runtime exitCode
Runtime
Error for chunk loading now includes more information and two new properties type and request.
Devtool
remove comment footer from SourceMaps and eval
add support for includetest and exclude to the eval source map devtool plugin
Performance
webpacks AST can be passed directly from loader to webpack to avoid extra parsing
Unused modules are no longer unnecessarly concatenated
Add a ProfilingPlugin which write a (Chrome) profile file which includes timings of plugins
Migrate to using for of instead of forEach
Migrate to using Map and Set instead of Objects
Migrate to using includes instead of indexOf
Replaced some RegExp with string methods
Queue don't enqueues the same job twice
Use faster md4 hash for hashing by default
Optimization
When using more than 25 exports mangled export names are shorter.
script tags are no longer text/javascript and async as this are the default values (saves a few bytes)
The concatenated module now generates a bit less code
constant replacements now don't need __webpack_require__ and argument is omitted
Defaults
webpack now looks for the .wasm, .mjs, .js and .json extensions in this order
output.pathinfo is now on by default in develoment mode
in-memory caching is now off by default in production
entry defaults to ./src
output.path defaults to ./dist
Use production defaults when omiting the mode option
Usage
Add detailed progress reporting to SourceMapDevToolPlugin
removed plugins now give a useful error message
Stats
Sizes are now shown in kiB instead of kB in Stats
entrypoints are now shows by default in Stats
chunks now display <{parents}>>{children}< and ={siblings}= in Stats
add buildAt time to stats
stats json now includes the output path
Syntax
A resource query is supported in context
Referencing entry point name in import() now emits a error instead of a warning
Upgraded to acorn 5 and support ES 2018
Plugins
done is now an async hook
Bugfixes
Generated comments no longer break on */
webpack no longer modifies the passed options object
Compiler "watch-run" hook now has the Compiler as first parameter
add output.chunkCallbackName to the schema to allow configurating WebWorker template
Using module.id/loaded now correctly bails out of Module Concatentation (Scope Hoisting)
OccurenceOrderPlugin now sorts modules in correct order (instead of reversed)
timestamps for files are read from watcher when calling Watching.invalidate
fix incorrect -! behavior with post loaders
add run and watchRun hooks for MultiCompiler
this is now undefined in ESM
VariableDeclaration are correctly identified as var, const or let
Parser now parse the source code with the correct source type (module/script) when the module type javascript/dynamic or javascript/module is used.
don't crash on missing modules with buildMeta of null
add original-fs module for electron targets
HMRPlugin can be added to the Compiler outside of plugins
Internal changes
Replaced plugin calls with tap calls (new plugin system)
Migrated many deprecated plugins to new plugin system API
added buildMeta.exportsType: "default" for json modules
Remove unused methods from Parser (parserStringArray, parserCalculatedStringArray)
Remove ability to clear BasicEvaluatedExpression and to have multiple types
Buffer.from instead of new Buffer
Avoid using forEach and use for of instead
Use neo-async instead of async
Update tapable and enhanced-resolve dependencies to new major versions
Use prettier
Removed features
removed module.loaders
removed loaderContext.options
removed Compilation.notCacheable flag
removed NoErrorsPlugin
removed Dependency.isEqualResource
removed NewWatchingPlugin
removed CommonsChunkPlugin
Breaking changes for plugins/loaders
new plugin system
plugin method is backward-compatible
Plugins should use Compiler.hooks.xxx.tap(<plugin name>, fn) now
New major version of enhanced-resolve
Templates for chunks may now generate multiple assets
Chunk.chunks/parents/blocks are no longer Arrays. A Set is used internally and there are methods to access it.
Parser.scope.renames and Parser.scope.definitions are no longer Objects/Arrays, but Map/Sets.
Parser uses StackedSetMap (LevelDB-like datastructure) instead of Arrays
Compiler.options is no longer set while applying plugins
Harmony Dependencies has changed because of refactoring
Dependency.getReference() may now return a weak property. Dependency.weak is now used by the Dependency base class and returned in the base impl of getReference()
Constructor arguments changed for all Modules
Merged options into options object for ContextModule and resolveDependencies
Changed and renamed dependencies for `import()
Moved Compiler.resolvers into Compiler.resolverFactory accessible with plugins
Dependency.isEqualResource has been replaced with Dependency.getResourceIdentifier
Methods on Template are now static
A new RuntimeTemplate class has been added and outputOptions and requestShortener has been moved to this class
Many methods has been updated to use the RuntimeTemplate instead
We plan to move code which accesses the runtime to this new class
Module.meta has been replaced with Module.buildMeta
Module.buildInfo and Module.factoryMeta have been added
Some properties of Module have been moved into the new objects
added loaderContext.rootContext which points to the context options. Loaders may use it to make stuff relative to the application root.
add this.hot flag to loader context when HMR is enabled
buildMeta.harmony has been replaced with buildMeta.exportsType: "namespace
The chunk graph has changed:
Before: Chunks were connected with parent-child-relationships.
Now: ChunkGroups are connected with parent-child-relationships. ChunkGroups contain Chunks in order.
Before: AsyncDependenciesBlocks reference a list of Chunks in order.
Now: AsyncDependenciesBlocks reference a single ChunkGroup.
file/contextTimestamps are Maps now
map/foreachChunks/Modules/Parents methods are now deprecated/removed
NormalModule accept options object in Constructor
Added required generator argument for NormalModule
Added createGenerator and generator hooks for NormalModuleFactory to customize code generation
Allow to customize render manifest for Chunks via hooks
FAQ and help
There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those donât help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new).
âď¸ Greenkeeperâs updated Terms of Service will come into effect on April 6th, 2018.
Version 4.0.0 of webpack was just published.
The version 4.0.0 is not covered by your current version range.
If you donât accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.
It might be worth looking into these changes and trying to get this project onto the latest version of webpack.
If you have a solid test suite and good coverage, a passing build is a strong indicator that you can take advantage of these changes directly by merging the proposed change into your project. If the build fails or you donât have such unconditional trust in your tests, this branch is a great starting point for you to work on the update.
Release Notes
v4.0.0Big changes
mode
or--mode
) between two modes now: production or developmentoptimization.*
(build your custom mode)process.env.NODE_ENV
are set to production or development (only in built code, not in config)none
mode which disables everythingimport()
always returns a namespace object. CommonJS modules are wrapped into the default exportimport()
NoEmitOnErrorsPlugin
->optimization.noEmitOnErrors
(on by default in production mode)ModuleConcatenationPlugin
->optimization.concatenateModules
(on by default in production mode)NamedModulesPlugin
->optimization.namedModules
(on by default in develoment mode)CommonsChunkPlugin
was removed ->optimization.splitChunks
,optimization.runtimeChunk
type: "javascript/auto"
when transforming JSON via loader to JSBig features
javascript/esm
handles ESM more strictly compared tojavascript/auto
:default
import, everything else (including namespace import) emit errors.mjs
modules arejavascript/esm
by defaultimport()
sideEffects: false
is now supported in package.jsonsideEffects
in package.json also supports glob expressions and arrays of glob expressionsoptimization.splitChunks
option was introducedDetails: https://gist.github.com/sokra/1522d586b8e5c0f5072d7565c2bee693
import()
occur in a dead branchwebpackInclude
andwebpackExclude
are supported by the magic comment forimport()
. They allow to filter files when using a dynamic expression.System.import()
now emits a warningRule.parser.system: true
System.import
withRule.parser.system: false
module.rules[].resolve
. It's merged with the global configuration.optimization.minimize
has been added to switch minimizing on/offoptimization.minimizer
has been added to configurate minimizers and optionswebpack-cli
to use the CLI--progress
) now displays plugin namesFeatures
module.rules[].type
options.dependencies
configurations now throw errorsideEffects
can be overriden via module.rulesoutput.hashFunction
can now be a Constructor to a custom hash functionoutput.globalObject
config option to allow to choose the global object reference in runtime exitCodetype
andrequest
.include
test
andexclude
to the eval source map devtool pluginfor of
instead offorEach
Map
andSet
instead of Objectsincludes
instead ofindexOf
text/javascript
andasync
as this are the default values (saves a few bytes)__webpack_require__
and argument is omitted.wasm
,.mjs
,.js
and.json
extensions in this orderoutput.pathinfo
is now on by default in develoment modeentry
defaults to./src
output.path
defaults to./dist
production
defaults when omiting themode
option<{parents}>
>{children}<
and={siblings}=
in StatsbuildAt
time to statsimport()
now emits a error instead of a warningdone
is now an async hookBugfixes
*/
output.chunkCallbackName
to the schema to allow configurating WebWorker templatemodule.id/loaded
now correctly bails out of Module Concatentation (Scope Hoisting)Watching.invalidate
-!
behavior with post loadersrun
andwatchRun
hooks forMultiCompiler
this
is now undefined in ESMvar
,const
orlet
javascript/dynamic
orjavascript/module
is used.buildMeta
of nulloriginal-fs
module for electron targetsplugins
Internal changes
plugin
calls withtap
calls (new plugin system)buildMeta.exportsType: "default"
for json modulesneo-async
instead ofasync
Removed features
module.loaders
loaderContext.options
Compilation.notCacheable
flagNoErrorsPlugin
Dependency.isEqualResource
NewWatchingPlugin
CommonsChunkPlugin
Breaking changes for plugins/loaders
plugin
method is backward-compatibleCompiler.hooks.xxx.tap(<plugin name>, fn)
nowChunk.chunks/parents/blocks
are no longer Arrays. A Set is used internally and there are methods to access it.Parser.scope.renames
andParser.scope.definitions
are no longer Objects/Arrays, but Map/Sets.StackedSetMap
(LevelDB-like datastructure) instead of ArraysCompiler.options
is no longer set while applying pluginsDependency.getReference()
may now return aweak
property.Dependency.weak
is now used by theDependency
base class and returned in the base impl ofgetReference()
Module
sContextModule
andresolveDependencies
Compiler.resolvers
intoCompiler.resolverFactory
accessible with pluginsDependency.isEqualResource
has been replaced withDependency.getResourceIdentifier
Template
are now staticoutputOptions
andrequestShortener
has been moved to this classModule.meta
has been replaced withModule.buildMeta
Module.buildInfo
andModule.factoryMeta
have been addedModule
have been moved into the new objectsloaderContext.rootContext
which points to thecontext
options. Loaders may use it to make stuff relative to the application root.this.hot
flag to loader context when HMR is enabledbuildMeta.harmony
has been replaced withbuildMeta.exportsType: "namespace
map/foreach
Chunks/Modules/Parents
methods are now deprecated/removedcreateGenerator
andgenerator
hooks for NormalModuleFactory to customize code generationCommits
The new version differs by 838 commits.
213226e
4.0.0
fde0183
Merge pull request #6081 from webpack/formating/prettier
b6396e7
update stats
f32bd41
fix linting
5238159
run prettier on existing code
518d1e0
replace js-beautify with prettier
4c25bfb
4.0.0-beta.3
dd93716
Merge pull request #6296 from shellscape/fix/hmr-before-node-stuff
7a07901
Merge pull request #6563 from webpack/performance/assign-depth
c7eb895
Merge pull request #6452 from webpack/update_acorn
9179980
Merge pull request #6551 from nveenjain/fix/templatemd
e52f323
optimize performance of assignDepth
6bf5df5
Fixed template.md
90ab23a
Merge branch 'master' into fix/hmr-before-node-stuff
b0949cb
add integration test for spread operator
There are 250 commits in total.
See the full diff
FAQ and help
There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those donât help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new).Your Greenkeeper bot :palm_tree: