Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Update dependency webpack to v4 #768

Closed
wants to merge 1 commit into from
Closed

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Mar 27, 2018

This Pull Request updates dependency webpack from ^3.10.0 to ^4.0.0

Release Notes

v4.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
      • webassembly/experimental: WebAssembly modules (currently experimental)
    • javascript/esm handles ESM more strictly compared to javascript/auto:
      • Imported names need to exist on imported module
      • Dynamic modules (non-esm, i. e. CommonJs) can only imported via default import, everything else (including namespace import) emit errors
    • In .mjs modules are javascript/esm by default
    • WebAssembly modules
      • can import other modules (JS and WASM)
      • Exports from WebAssembly modules are validated by ESM import
        • You'll get a warning/error when trying to import a non-existing export from WASM
      • can only be used in async chunks. They doesn't work in initial chunks (would be bad for web performance)
        • Import modules using WASM via import()
      • This is an experimental feature and subject of change
  • Optimization
    • sideEffects: false is now supported in package.json
      • sideEffects in package.json also supports glob expressions and arrays of glob expressions
    • Instead of a JSONP function a JSONP array is used -> async script tag support, order no longer matter
    • New optimization.splitChunks option was introduced
      Details: https://gist.github.com/sokra/1522d586b8e5c0f5072d7565c2bee693
    • Dead branches are now removed by webpack itself
      • Before: Uglify removed the dead code
      • 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 include test 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/foreach Chunks/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

v4.0.1

Features

  • add version property to webpack exports

Bugfixes

  • import() with CJS now gives correct exports
  • Module concatenation bailout messages now point to correct module

v4.1.0

Features

  • add filename option to optimization.splitChunks to modify the filename template for splitted chunks
  • allow modules which doesn't emit code into the bundle

Bugfixes

  • watchpack updated to 1.5.0
  • performance fix for Module Concatenation (v8 bug)
  • fix using this.xxx in ProvidePlugin

v4.1.1

Features

  • Stats now displays the number of assets of a module

Bugfixes

  • sourceMap option of the default UglifyJsPlugin now defaults to true when the SourceMapDevToolPlugin is used
  • module.assets is now working again in the Stats
  • chunk ids are not stringified on target node
  • devtoolNamespace default works now also for arrays passed to output.library
  • Format date with 2 digits in Stats for Build At
  • fix a bug renaming classes incorrectly
  • fix a bug where modules ignore the chunks option of optimization.splitChunks

v4.2.0

Features

  • add splitChunks.automaticNameDelimiter to configure the name separator for automatic names
  • stats.excludeModules now also accept booleans
  • webpack throws an error when trying to run in twice at a time
  • performance is disabled by default in non-web targets
  • AMD parser plugins can now be extended by inheriting

Bugfixes

  • Fix a race condition when writing events.json in ProfilingPlugin
  • HMR runtime code is reverted to ES5 style
  • script timeout is not correctly in seconds
  • reexporting JSON exports works correctly now
  • fix a bug when combining ProfilingPlugin with SourceMapDevToolPlugin
  • add a missing semicolon to the runtime code

v4.3.0

Features

  • add support for [contenthash] placeholder

Bugfixes

  • browser field is used for target electron-renderer
  • set devtoolNamespace default correctly when passing an object to output.library

v4.4.0

Features

  • When webpack-cli is not installed it will ask to install it
  • splitChunks.chunks supports a custom function now
  • Better warning when omitting mode

Bugfixes

  • disallow functions for chunkFilename, because it's not working
  • generate correct code when using export default (function xxx() {})

Performance

  • Performance improvements for sorting by identifier

v4.4.1

Bugfixes

  • fix yarn/npm install script on windows

v4.5.0

Features

  • Performance improvements
  • Improve readablility of error messages with long loader string

Bugfixes

  • Sort child compilations for consistent compilation hash
  • Fix bug causing all symbols to be renamed when concatenating modules

Contributing

  • add yarn setup script for bootstrapping local development

v4.6.0

Features

  • improve stats output alignment
  • improve stats text output when all exports are used
  • add webpackPrefetch/webpackPreload magic comments to import()
  • add stats.entrypoints[].children and stats.entrypoints[].childAssets to stats json
  • add prefetched/preloaded chunks and assets to stats text output
  • Performance improvements

Bugfixes

  • Escape chunk ids for target: "webworker"
  • fix this to undefined ESM replacement in function default values
  • new require(...) is weird, but now behaves like in node.js
  • fix behavior of export * from "commonjs" with partial override
  • fixed build time output in current locale in stats text output
  • fixed ChunkModuleIdRangePlugin and add tests
  • avoid race condition when using the loadModule loader API
  • fix default value of output.globalObject in target: "node-webkit"
  • fix a bug with loadModules and dependencies in these modules
  • fix hot.accept parser plugin to allow defined values as argument
  • print unknown size when size is unknown
  • fix a bug where some chunks were missing in the "single" runtime chunk
  • fix cloning of optimization configuration

Internal changes

  • Set up infrastructure for linting typings with TypeScript

Commits

v4.6.0

  • 37ff424 Pass undefined as locale
  • fac3424 Simplify cachedMerge
  • 269a911 Define missing fields on AMD classes
  • fe73712 Remove unecessary _this binding
  • 30da6c5 Merge pull request #​6989 from mohsen1/extend-Template
  • 25f8637 Merge pull request #​7010 from webpack/fix/context_dependency_init
  • 5401381 Merge pull request #​7011 from webpack/fix/object_shapes
  • 15ac4e8 Merge pull request #​7012 from webpack/refactor/remove_this
  • a41974d Merge pull request #​7013 from webpack/refactor/cachedmerge
  • e320290 Merge pull request #​7014 from webpack/refactor/amd_missing_fields
  • 6e154f6 Avoid deopt when cache is set
  • 5be4026 Merge pull request #​7015 from webpack/refactor/source_map_deopt
  • 0b1e9d8 Merge pull request #​6982 from mohsen1/json-and-date-api-fixes
  • 589f40b Add missing class member initializations found by TypeScript
  • 4f3e414 chore: rm useless checking
  • 1c76133 Avoid type mismatch assignment of number to string in HotModuleReplacementPlugin
  • dd484c3 init details
  • b203091 s/const/let
  • 581d19b actually const is fine
  • 13ac6a1 Merge pull request #​7020 from mohsen1/avoid-type-mismatch-assignments
  • b5b6506 remove unneeded message assignment
  • b6c282f fix unit test
  • eca7bad Merge pull request #​6910 from mohsen1/more-inits
  • b8b95cf Use compilation instead of this
  • 4d9eb7c Merge pull request #​6974 from mohsen1/webpack-error-refactor
  • 36d576c Update ChunkModuleIdRangePlugin to webpack 4 API
  • b715475 Add integration tests
  • 397f51f Merge pull request #​7019 from Aladdin-ADD/patch-2
  • 0e88e8a Merge pull request #​6954 from webpack/fix/ChunkModuleIdRangePlugin
  • 868d3b2 Add infrastructure
  • cf8ec0f Add WebAssembly global
  • 84f68b3 Install typescript
  • d00d44c Use nightly build of TS for now
  • 5bb5af6 Some type fixes using JSDoc comments
  • 3ac4f21 More comments to help ts compiler be happy
  • 09cdcb0 More comment based type fixes
  • 0ced385 Comment fixes
  • 6a9ee8f more comment types and one actual code change
  • 2367a7d More comments
  • 70f9a5f upgrade ts
  • 5adc491 Add more globals and comments
  • 8398411 Add types for comment method
  • 836d06e up ts
  • 0fa8cd9 Use ts nightly and enable tsc as lint in travis
  • d677bdd pretty
  • 2267906 Fix lint issues
  • 5b236e5 More type fixes (these changes should be merged as separate PRs
  • 2295c83 Add ts-ignore comments with link to issue
  • c7429a6 Fixed all type errors!
  • 724987a set correct type in ContextDependency
  • 0ea9b98 Use ts nightly and fix JSDoc for comment method in RuntimeTemplate
  • 2b66263 TS now understands module.exports assignments
  • 2adf5c2 Better JSDocs for makeNewProfiledTapFn
  • 8de3b9b add types to Module
  • ebc4b00 add type linting to normal linting in package.json
  • a4e8c07 fix jsdoc comments to make eslint happy
  • 3677e25 add a separate class for HotUpdateChunk
  • 5f0a99e declare types for chrome-trace-event
  • 6063276 remove $WebAssembly global
  • 9dafa97 TS now understands exports assignments
  • a3df74b remove unneeded member isImportEmitted
  • 985e6fb fix race condition when using loadModule
  • 40a089c Merge pull request #​7027 from webpack/bugfix/load-module-race
  • 10282ea Merge pull request #​6862 from mohsen1/ts
  • 58b387b enable strictFunctionTypes
  • 2e3f4ff enable strictPropertyInitialization
  • 0d50f94 enable alwaysStrict
  • 3565cc1 enable noUnusedLocals
  • ddb4b9e ASCII is art
  • 236b1d8 Revert "enable noUnusedLocals"
  • 74559e3 Diable strictPropertyInitialization until null check is enabled
  • ec0dad4 Merge remote-tracking branch 'upstream/master' into peer-dependencies-4
  • 6294313 Merge pull request #​7033 from mohsen1/strict
  • 0be0d1f Merge pull request #​7039 from hedgepigdaniel/peer-dependencies-4
  • 70d4825 Fix output.globalObject value in node-webkit
  • e656231 Move prepareOptions to test helpers
  • 1313300 Merge pull request #​7049 from bastimeyer/bugfix/output-globalobject-node-webkit
  • e54af0d Merge pull request #​7048 from webpack/refactor/prepareOptions
  • 9cb1a66 add support for link preload/prefetch
  • 014e65e rename webpackPrefetchPriority to webpackPrefetch
  • 57e09a6 add test for prefetch, preload and script loading jsonp runtime
  • 17eb5b4 rename priority to order
  • 2a7fdc4 hot.accept tap interceptor returns T/F based on the number of args
  • 3417da5 preload in parallel to script download
  • e1930c2 Fix LoaderPlugin not resolving recursively
  • 873d7d4 show preload and prefetch in stats
  • be79d6d add mixed test case which also tests equal order sorting
  • babc8a4 Merge pull request #​7059 from bastimeyer/bugfix/loaderplugin-recursive
  • 205ca62 fix reversed order in Chunk.compareTo
  • 8e2e19b fix unstable sorting of ChunkGroups and add test
  • 946c4df add test case for comments in import()
  • 58ba91d fix bug which prevented some chunks to show up in Chunk.getAllAsyncChunks
  • 0ff2901 Merge pull request #​7060 from webpack/test/any-comment-in-import
  • ec4ec8e Merge pull request #​7056 from webpack/feature/preload
  • aee2491 Merge pull request #​6962 from justinhelmer/bug/6919
  • 3f99517 Merge pull request #​6905 from xtuc/fix-handle-unknown-size
  • c47150c Clone optimization config in Defaulter
  • 3a5fda9 Merge pull request #​7062 from webpack/bugfix/issue-6931
  • 941be29 Merge pull request #​7063 from webpack/bugfix/clone-optimization
  • e7c8fa4 4.6.0

This PR has been generated by Renovate Bot.

@edmorley edmorley added this to the v9 milestone Apr 16, 2018
@renovate renovate bot changed the title Update dependency webpack to ^4.0.0 Update dependency webpack to v4 Apr 17, 2018
@edmorley edmorley mentioned this pull request Apr 20, 2018
4 tasks
edmorley added a commit that referenced this pull request Apr 25, 2018
Notable changes:
* Major version updates of `webpack`, `webpack-dev-server` and `optimize-css-assets-webpack-plugin`
* Uses the new webpack 4 `mode` option
* Removed `@neutrinojs/chunk` in favour of the `splitChunks` feature
* Removed `@neutrinojs/babel-minify` in favour of the faster `uglify-es`
* Removed redundant `ModuleConcatenationPlugin` usage
* Removed default of `NODE_ENV` from `@neutrinojs/env`
* Replaced `extract-text-webpack-plugin` with `mini-css-extract-plugin`
* Stopped pinning `webpack-sources` to v1.0.1
* Added checks to warn about changed web preset `minify` options
* Added checks to enforce that users remove any legacy `vendor` entrypoints

For more details on the webpack changes, see:
https://github.com/webpack/webpack/releases/tag/v4.0.0

Fixes #737.
Fixes #802.
Closes #748.
Closes #768.
Closes #769.
Closes #766.
@renovate renovate bot deleted the renovate/webpack-4.x branch April 25, 2018 15:20
@edmorley edmorley self-assigned this Jul 13, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Development

Successfully merging this pull request may close these issues.

2 participants