Newer changelogs are available in the main CHANGES file.
- Updated Inferno config for Inferno 5 -
inferno-*
packages (such asinferno-compat
) work again with Webpack 4 [#440]
- Added
prepublishOnly
to react-component and web-module project package.json scripts, which invokesnpm run build
prior to publishing [#436] [hanford] - Added
npm.umd.entry
config to specify a different entry point for the UMD build in npm module projects. Currently, the UMD build requires an entry point which must have adefault
export [#411]
- Always add
CopyPlugin
whenwebpack.copy
config is provided [#431] - Remove use of object destructuring from render shims - fixes output of quick build commands in IE11 [#453]
- autoprefixer: v8.1.0 → v9.0.2
- babel-core: v6.26.0 → v6.26.3
- babel-loader: v7.1.4 → v7.1.5
- babel-plugin-inferno: v4.0.0 → v5.0.1
- babel-plugin-istanbul: v4.1.5 → v4.1.6
- babel-plugin-transform-decorators-legacy: v1.3.4 → v1.3.5
- chalk: v2.3.2 → v2.4.1
- copy-template-dir: v1.3.0 → v1.4.0
- copy-webpack-plugin: v4.5.1 → v4.5.2
- css-loader: v0.28.10 → v1.0.0
- detect-port: v1.2.2 → v1.2.3
- filesize: v3.6.0 → v3.6.1
- fs-extra: v6.0.0 → v7.0.0
- gzip-size: v4.1.0 → v5.0.0 - dropped Node.js 4 support
- html-webpack-plugin: v3.0.6 → v3.2.0
- inquirer: v5.1.0 → v6.0.0
- karma: v2.0.0 → v2.0.5
- karma-coverage: v1.1.1 → v1.1.2
- karma-webpack: v2.0.13 → v3.0.0
- mini-css-extract-plugin v0.2.0 → v0.4.1
- mocha: v5.0.4 → v5.2.0
- opn: v5.2.0 → v5.3.0
- ora: v2.0.0 → v3.0.0
- postcss-loader: v2.1.1 → v2.1.6
- resolve: v1.5.0 → v1.8.1
- run-series: v1.1.6 → v1.1.8
- style-loader: v0.20.2 → v0.21.0
- uglifyjs-webpack-plugin: v1.2.3 → v1.2.7
- webpack: v4.1.1 → v4.16.4
- webpack-dev-middleware: v3.0.1 → v3.1.3
- webpack-dev-server: v3.1.1 → v3.1.5
- webpack-hot-middleware: v2.21.2 → v2.22.3
- webpack-merge: v4.1.2 → v4.1.4
- whatwg-fetch: v2.0.3 → v2.0.4
- Added instructions for debugging in VS Code to the FAQ [#445]
- Replaced references to "ES6" with plain old "ES"
- Node.js 4 is no longer supported; Node.js 6.11.5 is now the minimum required version, as per Webpack 4 [#400]
- Updated to Webpack 4 - if you were customising your build with
nwb.config.js
, some of the nwb config you depended on may have changed, and the options Webpack accepts may have changed [#409]- Webpack's new
mode
option is now set to activate Webpack 4's new defaults, which removes the need for a bunch of manual configuration nwb was doing:ModuleConcatenationPlugin
is now automatically enabled inproduction
mode instead of being explicitly configured, so nwb'swebpack.hoisting
config has been removed.NamedModulesPlugin
is now automatically used indevelopment
mode instead of being explicitly configured.- Development UMD builds for modules now use
production
mode with minimization disabled, as the newdevelopment
mode defaults are unsuitable for code which will be published to npm.
- Webpack's
optimization
options are now used for certain pieces of configuration:optimization.noEmitOnErrors
is used instead ofNoEmitOnErrorsPlugin
to prevent emission of assets when using Hot Module Replacement.- UglifyJS is now configured via
optimization.minimize
/optimization.minimizer
instead of just addingUglifyJsPlugin
directly toplugins
. CommonsChunkPlugin
has been removed in Webpack 4 -optimization.runtimeChunk
is now configured to create aruntime
chunk (which replaces the oldmanifest
chunk) andoptimization.splitChunks
is configured to create avendor
bundle.
- Replaced used of
ExtractTextPlugin
withMiniCssExtractPlugin
:- Separate CSS files are now created and loaded on-demand for code splits.
- Replaced
webpack.extractText
config withwebpack.extractCSS
config - this is not backwards-compatible, as plugin options differ.
- Webpack's default
performance
option size warnings have been disabled (for now).
- Webpack's new
- Updated Inferno config for Inferno 4 - see the Inferno v4 migration guide for breaking changes [#429]
nwb new inferno-app
now asks if you want to installinferno-compat
as it's no longer a single dependency, defaulting to not installing it.
nwb new preact-app
now asks if you want to installpreact-compat
, defaulting to not installing it.- Updated to Mocha 5, which dropped support for IE9 and IE10 and fixed some false positives.
- Removed support for deprecated
webpack.compat.enzyme
,webpack.compat.sinon
andwebpack.style = 'old'
config.
- Inferno is currently publishing
.mjs
files to npm, which is breakinginferno-*
packages with Webpack 4, so e.g.inferno-compat
won't work if you want to reuse React components.
- Added an
-f/--force
flag tonwb new
to accept defaults and skip questions.
- The dev server's fallback
index.html
serving can now be configured with dot arguments - e.g. pass--fallback.disableDotRule
if you need to use dots in your path when using the HTML5 History API. --no-polyfill
can now be used to disable default polyfills for app projects as well as quick commands.
- autoprefixer: v7.2.5 → v8.1.0
- babel-loader: v7.1.2 → v7.1.4
- babel-plugin-inferno: v3.3.1 → v4.0.0
- case-sensitive-paths-webpack-plugin: v2.1.1 → v2.1.2
- chalk: v2.3.0 → v2.3.2
- copy-webpack-plugin: v4.3.1 → v4.5.1
- cross-spawn: v6.0.4 → v6.0.5
- css-loader: v0.28.9 → v0.28.10
- extract-text-webpack-plugin v3.0.0 → mini-css-extract-plugin v0.2.0
- file-loader: v1.1.6 → v1.1.11
- filesize: v3.5.11 → v3.6.0
- html-webpack-plugin: v2.30.1 → v3.0.6
- inquirer: v3.3.0 → v5.1.0 - latest version requires Node.js 6
- karma-webpack: v2.0.9 → v2.0.13
- mocha: v4.1.0 → v5.0.4
- npm-install-webpack-plugin v4.0.5 → @insin/npm-install-webpack-plugin v5.0.0 - Webpack 4 compatibility
- ora: v1.3.0 → v2.0.0
- postcss-loader: v2.0.10 → v2.1.1
- style-loader: v0.20.1 → v0.20.2 - skip empty
url()
s - uglifyjs-webpack-plugin: v1.1.8 → v1.2.3
- url-loader: v0.6.2 → v1.0.1
- webpack: v3.10.0 → v4.1.1
- webpack-dev-middleware: v1.12.2 → v3.0.1
- webpack-dev-server: v2.9.7 → v3.1.1
- webpack-hot-middleware: v2.21.0 → v2.21.2
- webpack-merge: v4.1.1 → v4.1.2
- Updated
StatusPlugin
andInlineRuntimePlugin
to use the Use the new Webpack 4.hooks
plugin API.
- Fixed
publicPath
docs, as Webpack'soutput.publicPath
config can't benull
[#432] [stephenwf]
- cross-spawn: v6.0.3 → v6.0.4
- Fixed validation of
webpack.compat
locale properties [#425] - Fixed false negative when checking if the port is available when
devServer.port
is specified as aString
[#423]
- uglifyjs-webpack-plugin: v1.1.6 → v1.1.8 - reduce memory consumption
port
config indevServer
config will now be used if configured [#423]
- Fixed validation of
webpack.extractText = false
config, which disables extraction of imported stylesheets into.css
files [#418]
- Validation of the configuration object provided by
nwb.config.js
files has been expanded, so previously valid config files may now be invalid [#136]- Unexpected properties in top-level configuration or in
babel
,karma
,npm
andwebpack
configuration (i.e. anything that's not documented in the Configuration docs) are now treated as errors [#193] - Basic type checking is now performed for all documented configuration properties.
- After upgrading, run
nwb check-config
to check your configuration file.
- Unexpected properties in top-level configuration or in
- Updated to UglifyJSPlugin 1.x, which supports ES2015 syntax and adds options to enable filesystem caching and use multiple processes to improve build speed, which nwb enables by default [#412]
- Review any custom
webpack.uglify
config you have against the new version's options documentation - options for UglifyJS itself must now be passed as anuglifyOptions
object and some of UglifyJS' default options have changed.
- Review any custom
- Node.js 4.8.0 is now the minimum required version, based on the
engines
config of nwb's dependencies.
- Deprecated the
webpack.compat.sinon
flag for Sinon 1.x compatibility settings, as subsequent major versions since July 2017 support Webpack out of the box.
- Fixed testing React component/library and web module projects when using export extensions - the Babel stage preset wasn't being defaulted to preset-stage-1, which includes the export extensions plugin [#364]
- Added an
--open
flag to open the app in your default browser or in a named browser (e.g.--open="Google Chrome"
) after starting a Webpack dev server [#334] - You can now provide a
babel.config()
function which will be given the generated Babel config to do whatever it wants with. - You can now provide a
karma.config()
function which will be given the generated Karma config to do whatever it wants with [#408]
- Simplified configuration of locales in
webpack.compat
config
- autoprefixer: v7.1.6 → v7.2.4
- babel-plugin-inferno: v3.3.0 → v3.3.1
- copy-webpack-plugin: v4.2.1 → v4.3.1
- file-loader: v1.1.5 → v1.1.6
- gzip-size: v4.0.0 → v4.1.0
- karma: v1.7.1 → v2.0.0
- karma-webpack: v2.0.6 → v2.0.9
- mocha: v4.0.1 → v4.1.0
- postcss-loader: v2.0.8 → v2.0.9
- style-loader: v0.19.0 → v0.19.1
- webpack: v3.8.1 → v3.10.0
- webpack-dev-middleware: v1.12.0 → v1.12.2
- webpack-dev-server: v2.9.4 → v2.9.7
- webpack-hot-middleware: v2.20.0 → v2.21.0
- Added missing docs for
webpack.copy
config - Added more headings to the Commands docs to make them easier to browse, and to make feature flags such as
--copy-files
for component builds more visible [#407]
- Updated UMD build config to export the
default
export of the entry point, rather than an ES modules interop object which looks something like{__esModule: true, default: Getter}
, which was unintended behaviour. This will break any existing usage of UMD builds which depended on manually accessing the unintendeddefault
property [#402] - Updated to Mocha 4, which comes with a number of breaking changes. These are mostly related to dropping support for older versions of Node.js and non-ES5-compliant browsers.
- Bump the default React peerDependency version for react-component projects to
16.x
- fixes creating components with npm 2.
- copy-webpack-plugin: v4.2.0 → v4.2.1
- detect-port: v1.2.1 → v1.2.2
- karma-webpack: v2.0.5 → v2.0.6
- mocha: v3.4.2 → v4.0.1 - dropped support for old versions of Node.js and non-ES5-compliant browsers
- Documented
--unsafe-perm
workaround for PhantomJS' postinstall step failing on some OSes when installing globally with npm 5 [#383]
- Backed out use of
preact/debug
in favour ofpreact/devtools
, as the debug module tries to override the preact module's render export, which fails due to Webpack enforcing the read-only nature of ES module exports.
- Deprecated the
webpack.compat.enzyme
flag for Enzyme v2 compatibility settings. Upgrade to Enzyme v3 when you can, which supports React all the way back to v0.13.- An example of configuring Enzyme v3 has been added to the testing docs.
- Added
'createClass'
and'createReactClass'
to the factory function names React Transform looks for, so React component hot reloading will work for apps usingcreate-react-class
imported as one of those names.
- nwb is now also tested against Node 8 now that it's the Long Term Support version.
- Reverted the Webpack settings change for
webpack.compat.enzyme
config in v0.19.0, as it only applied while the version numbers of published React packages were out of sync. The compatibility settings assume Enzyme v2 and React >= v15.5. style-loader
's newhmr
option is set tofalse
when creating builds to prevent inclusion of its HMR code.
- autoprefixer: v7.1.4 → v7.1.6
- babel-plugin-inferno: v3.2.0 → v3.3.0
- babel-plugin-transform-react-remove-prop-types: v0.4.8 → v0.4.10
- babel-preset-env: v1.6.0 → v1.7.0
- chalk: v2.1.0 → v2.3.0
- copy-webpack-plugin: v4.1.0 → v4.2.0
- extract-text-webpack-plugin: v3.0.0 → v3.0.2
- file-loader: v1.1.4 → v1.1.5
- filesize: v3.5.10 → v3.5.11
- karma-mocha-reporter: v2.2.4 → v2.2.5
- karma-webpack: v2.0.4 → v2.0.5
- phantomjs-prebuilt: v2.1.15 → v2.1.16
- postcss-loader: v2.0.6 → v2.0.8
- resolve: v1.4.0 → v1.5.0
- style-loader: v0.18.2 → v0.19.0
- url-loader: v0.5.9 → v0.6.2
- webpack: v3.6.0 → v3.8.1
- webpack-dev-server: v2.9.1 → v2.9.4
- webpack-hot-middleware: v2.19.1 → v2.20.0
- webpack-merge: v4.1.0 → v4.1.1
- Removed hooking of React, Preact and Inferno
render()
functions in quick commands, as this won't work with ES modules builds (which are used by default in Webpack v3). This affected the current version of Preact at the time of writing.- If you're manually using
render()
with quick commands, you must now handle providing the target DOM node too -document.getElementById('app')
is available in the default HTML template.
- If you're manually using
- Added
babel.env
config to pass additional options forbabel-preset-env
. - Added additional Enzyme
webpack.compat
for recent versions of React 15.
- Now using
babel-preset-env
instead of deprecatedbabel-preset-es201X
presets [#375] - Use
beautify: true
forwebpack.debug
output so code split bundles are readable.
- autoprefixer: v7.1.2 → v7.1.4
- babel-cli: v6.24.1 → v6.26.0
- babel-core: v6.24.1 → v6.26.0
- babel-loader: v7.1.1 → v7.1.2
- babel-plugin-istanbul: v4.1.4 → v4.1.5
- babel-plugin-react-transform: v2.0.2 → v3.0.0 - add
React.PureComponent
to the list of default super classes - babel-plugin-transform-react-remove-prop-types: v0.4.6 → v0.4.8
- babel-polyfill: v6.23.0 → v6.26.0
- babel-runtime: v6.25.0 → v6.26.0
- chalk: v2.0.1 → v2.1.0
- copy-webpack-plugin: v4.0.1 → v4.1.0
- css-loader: v0.28.4 → v0.28.7
- file-loader: v0.11.2 → v1.1.4
- gzip-size: v3.0.0 → v4.0.0 - async interface now uses Promises
- html-webpack-plugin: v2.29.0 → v2.30.1
- inquirer: v3.2.1 → v3.3.0
- karma-mocha-reporter: v2.2.3 → v2.2.4
- karma: v1.7.0 → v1.7.1
- mocha: v3.4.2 → v3.5.3
- phantomjs-prebuilt: v2.1.14 → v2.1.15 - fix security issues with dependencies
- webpack-dev-middleware: v1.11.0 → v1.12.0
- webpack-dev-server: v2.6.1 → v2.9.1
- webpack-hot-middleware: v2.18.2 → v2.19.0
- webpack: v3.4.1 → v3.6.0
- Fix dev server HMR for people running on different hosts or a different localhost port [#356] [DethAriel]
- Now using preact/debug instead of preact/devtools in quick Preact commands and the Preact project skeleton - requires Preact >= 8.2.0
- inquirer: v3.2.0 → v3.2.1
- promise: v8.0.0 → v8.0.1
- webpack: v3.2.0 → v3.4.0 - bug fixes; now watches for missing directories being added; perf improvements
- webpack-dev-server: v2.5.1 → v2.6.1
- promise: v8.0.0 → v8.0.1
- webpack: v3.2.0 → v3.3.0 - bug fixes; now watches for missing directories being added
- You can now set
webpack.extractText
config tofalse
to disable extraction of stylesheets in builds [#343]
- extract-text-webpack-plugin: v3.0.0-rc.2 → v3.0.0
- webpack: v3.1.0 → v3.2.0 - bug fixes
- Documented default
webpack.extractText
config.
- extract-text-webpack-plugin: v3.0.0-rc.1 → v3.0.0-rc.2 - fix module sorting type error
- inquirer: v3.1.1 → v3.2.0
- extract-text-webpack-plugin: v3.0.0-beta.3 → v3.0.0-rc.1
- karma-webpack: v2.0.3 → v2.0.4 - Webpack 3 support
- webpack-dev-server: v2.5.0 → v2.5.1 - Webpack 3 support
- Fixed use of
@import
in CSS by addingident
back topostcss-loader
config [#311] - Fixed config validation error being thrown when using
webpack.styles
config for custom preprocessor plugin rules [#342] - Fixed display of valid properties when an invalid property is used when configuring a custom
webpack.styles
rule.
-
Added
webpack.debug
config to trigger creation of a more debuggable production build [#336]The recommended way to use this is via a config argument:
npm run build -- --webpack.debug
-
Added support for the following arguments when building a React component's demo:
--title
- set the generated demoindex.html
's<title>
--vendor
- enable creation of a vendor bundle for modules imported fromnode_modules/
[#335]
- autoprefixer: v7.1.1 → v7.1.2
- babel-loader: v7.1.0 → v7.1.1 - don't read
.babelrc
for cache identifier whenbabelrc=false
(nwb uses this option) - chalk: v1.1.3 → v2.0.1
- extract-text-webpack-plugin: v2.1.2 → v3.0.0-beta.3 - Webpack 3 support
- html-webpack-plugin: v2.28.0 → v2.29.0 - Webpack 3 support
- karma-chrome-launcher: v2.1.1 → v2.2.0
- webpack: v3.0.0 → v3.1.0 - perf boost; fix ordering in
ExtractTextPlugin
- webpack-hot-middleware: v2.18.0 → v2.18.2
- Quick
build
command config was being created before the defaultNODE_ENV = production
was applied, so output filenames didn't include a chunkhash by default.
- webpack-dev-middleware: v1.10.2 → v1.11.0 - Webpack 3 support
- Fixed clearing the console by default when running the development server.
- babel-loader: v7.0.0 → v7.1.0 - Webpack 3 support
- Updated Quick Development with nwb for v0.18.
- npm-install-webpack2-plugin: v5.0.0 → v5.0.1 - fix Webpack 3 support
-
Updated to Webpack 3 - potentially breaking for some plugins [#326]
See the official release post for changes.
-
Removed support for configuration which was deprecated in nwb v0.15.0.
- Fixed display of user config errors when running the dev server.
-
Added
webpack.hoisting
config to enable use of Webpack 3's newModuleConcatenationPlugin
for scope hoisting in production builds [#326] -
babel
,webpack
,devServer
,karma
andnpm
configuration can now be provided via arguments using dotted paths [#327]nwb react build app.js \ --babel.plugins=react-html-attrs \ --babel.stage=2 \ --webpack.hoisting
If you have a config file, arguments will override properties in it. This is primarily intended for one-off feature toggles without having to edit your config file, and to provide some level of configuration for quick development commands without needing a config file.
babel.plugins
,babel.presets
and locales inwebpack.compat
config now also accept single configuration as a String to make them usable via arguments [#327]
- inquirer: v3.1.0 → v3.1.1
- npm-install-webpack2-plugin: v4.1.1 → v5.0.0 - drop Webpack 1 and add Webpack 3 to peerDeps
- promise: v7.3.0 → v8.0.0
- webpack: v2.6.1 → v3.0.0
- webpack-dev-server: v2.4.5 → v2.5.0
Backported fixes from 0.18:
- Fixed use of
@import
in CSS by addingident
back topostcss-loader
config [#311] - Fixed display of valid properties when an invalid property is used when configuring a custom
webpack.styles
rule.
Backported fixes from 0.18:
- Fixed display of user config errors when running the development server.
- Fixed clearing the console by default when running the development server.
- Quick build command config was being created before the default
NODE_ENV = production
was applied, so output filenames didn't include a chunkhash by default. - Fixed config validation error when running the development server and using
webpack.styles
config for custom preprocessor plugin rules.
- Fixed using a custom port for the dev server - Webpack Dev Server's client didn't like the format we were specifying the URL for the Hot Module Reloading connection in [#328]
- Use the correct protocol in the
'The app is running at...'
successful compilation message when using HTTPS.
-
Now using Webpack Dev Server (instead of running a basic Express development server).
Webpack Dev Server has security features which you may need to configure your way around if you're using
--host
or if your development setup involves hitting the dev server from a different host.Please create an issue if you're affected by this change and there's something nwb can do to mitigate dev server problems without compromising security.
React components/libraries
- A
--[keep-]proptypes
flag replaces--no[-wrap]-proptypes
to disable wrapping ofpropTypes
in React component project builds so they'll be stripped from a production build.
- The process will now exit with a non-zero code when a Webpack build completes with errors [#290]
- Fixed transpiling of ES2017 features when use of a stage-X preset is disabled with
babel.stage = false
config. - Fixed
hmre = false
Express middleware option for disabling use of React Transform to attempt to handle Hot Module Reloading for React components andrender()
error display [#263]
Preact
- Fixed importing React components when serving a Preact app - this was missed when fixing
preact-compat
configuration issues from v0.16.0.
Arguments
- Added a
--no-clear[-console]
flag to disable clearing of the console when running the dev server. - Added a
--no-html
flag to disable creation of anindex.html
file if you don't need one (e.g. you're serving your built apps via another means) [#278] [bwendt-mylo]
Commands
- Added an
nwb web (run|build)
command for quick development with vanilla JavaScript (i.e. you're in charge of rendering).
Configuration
- Added
devServer
config to configure Webpack Dev Server options, which include:devServer.historyApiFallback.disableDotRule
can be enabled if you need to use dots in your path when using the HTML5 History APIdevServer.https
can be used to enable HTTPSdevServer.proxy
can be used to proxy certain URLs to a separate API backend development server
- Added a
type
option to nwb's Express middleware to set the project type (one ofreact
,preact
,inferno
orweb
) manually, enabling use of the middleware without a config file.
React
- Added
babel.removePropTypes
config to disable or configure removal ofpropTypes
in React app production builds. - Added
babel.reactConstantElements
config to disable the use of the React constant element hoisting transform in React app production builds.
npm modules
- Default Babel config for
react-component
andweb-module
projects now usesbabel-preset-stage-1
, so you can use export extensions by default if you need to re-export a library's modules insrc/index.js
[#284] - Default Travis CI config for
react-component
andweb-module
projects now only uses Node 6 by default for quicker builds.
Preact
-
preact/devtools
is now imported in development mode to enable use of React Developer Tools when usingnwb preact run
. This has also been added to thepreact-app
template.For existing Preact apps, add the following to its entry point to enable this:
if (process.env.NODE_ENV === 'development') { require('preact/devtools') }
React components/libraries
prop-types
imports are now also removed from React component UMD production builds.
- Document the
--copy-files
flag properly [#317]
- babel-core: v6.24.1 → v6.25.0
- babel-plugin-transform-react-remove-prop-types: v0.4.5 → v0.4.6 - fix use in Node 4
- babel-preset-es2017: v6.24.1
- detect-port: v1.1.3 → v1.2.1
- extract-text-webpack-plugin: v2.1.0 → v2.1.2
- file-loader: v0.11.1 → v0.11.2 -
publicPath
option changes - inquirer: v3.0.6 → v3.1.0
- ora: v1.2.0 → v1.3.0
- postcss-loader: v2.0.5 → v2.0.6
- promise: v7.1.1 → v7.3.0
- style-loader: v0.18.1 → v0.18.2
- url-loader: v0.5.8 → v0.5.9
- webpack-dev-server: v2.4.5
Dependencies:
- case-sensitive-paths-webpack-plugin: v2.0.0 → v2.1.1 - don't intercept Webpack "File not found" error, resolve issue with not recognising when a new file is added
Fixed:
Dependencies:
- css-loader: v0.28.3 → v0.28.4 - preserve leading underscore in class names
Fixed:
- Fixed bad render shim paths which were breaking the
nwb react
,nwb preact
andnwb inferno
quick development commands. - Fixed
nwb preact
commands andnwb react
's--preact[-compat]
when used with Preact 8 by removing a workaround for an old preact-compat distribution issue.
Added:
- Added support for create-react-class when using
preact-compat
.
Dependencies:
- css-loader: v0.28.3 → v0.28.4 - preserve leading underscore in class names
Breaking Changes:
-
Global
react
,preact
, andinferno
commands are no longer installed when nwb is installed globally [#308]These are now subcommands of the global
nwb
command, to avoid conflicting with global commands installed by official tools for these libraries, e.g.preact-cli
is now available, which provides a globalpreact
command. -
Node.js 4.6.0 is now the minimum required version, based on the
engines
config of nwb's dependencies, -
A separate Webpack rule for stylesheets imported from
node_modules/
is no longer created by default.For backwards compatibility you can set
webpack.style
config to'old'
to use the old default behaviour - this capability will be removed in a future release. -
The Babel plugin for Inferno now requires Inferno >= 1.5 and is not backwards-compatible with 1.4.
-
Default Webpack config now sets
module.strictExportPresence = true
so a missing export is now a compile error. -
Default
ExtractTextPlugin
now setsallChunks = true
to extract stylesheets from all chunks and avoid including thestyle-loader
runtime in builds by default.
Added:
-
You can now control how Webpack rules are created for stylesheets via
webpack.styles
config.This allows you to set up multiple rules for your own stylesheets (e.g. using CSS Modules only for stylesheets in a particular directory) and to provide rules for dependencies which need a specific Webpack rule for their stylesheets.
You can also disable creation of stylesheet rules by setting
webpack.styles
tofalse
. -
Re-enabled the
react-constant-elements
transform for React production builds, due to significant bug fixes. -
Added a
--no-hmre
flag for use when serving a React app, to disable use of React Transform to attempt to automatically handle Hot Module Replacement for React components and display an overlay withrender()
errors [#263] -
Added support for intl and react-intl in
webpack.compat
config [#260] [grahamlyus] -
You can now provide a
webpack.config()
function which will be given the generated Webpack config to do whatever it wants with [#256] -
You can now provide
use
config with a list of loaders inwebpack.rules
to replace a rule's default loader with chained loaders [#256] -
You can now disable a default Webpack config rule by setting it to
false
[#256]
Changed:
- Default options are no longer used if you provide a custom
loader
for a rule inwebpack.rules
[#256] - React project templates now use classes and
React.Component
instead ofReact.createClass()
, which is deprecated as of React v15.5 [#216]
Fixed:
- Fixed chunk hash not changing when imports in a split chunk are changed, by dropping use of the
webpack-md5-hash
plugin [#301] [grahamlyus] - Added missing config for
CopyWebpackPlugin
when serving areact-component
project's demo app, so any static content indemo/public/
will be also served by the dev server [#307] - Removed
node_modules/
caching from default Travis CI config in project skeletons, as it's been reported to cause build failures [#271] - An output directory specified with a trailing slash is now cleaned properly when creating a build.
- A
loader
configured for a Webpack rule is no longer moved into theoptions
object when an options object hasn't been explicitly configured [#256] - Fixed cleaning nested dirs, including a demo app's
demo/dist/
dir. - Fixed cleaning output directories specified with a trailing slash.
Dependencies:
- autoprefixer: v6.7.0 → v7.1.1
- babel-cli: v6.22.2 → v6.24.1
- babel-core: v6.22.1 → v6.24.1
- babel-loader: v6.2.10 → v7.0.0
- babel-plugin-inferno: v1.7.0 → v3.2.0 - adds support for Inferno 1.5, not backwards-compatible with 1.4
- babel-plugin-istanbul: v3.1.2 → v4.1.4 - drop support for Node.js 0.10 and v0.12
- babel-plugin-transform-react-jsx: v6.22.0 → v6.24.1
- babel-plugin-transform-react-remove-prop-types: v0.2.11 → v0.4.5 - dropped support for
React.createClass()
in favour of the newcreate-react-class
package - babel-plugin-transform-runtime: v6.22.0 → v6.23.0
- babel-polyfill: v6.22.0 → v6.23.0
- babel-preset-es2015: v6.22.0 → v6.24.1
- babel-preset-es2016: v6.22.0 → v6.24.1
- babel-preset-react: v6.22.0 → v6.24.1
- babel-preset-stage-0: v6.22.0 → v6.24.1
- babel-preset-stage-1: v6.22.0 → v6.24.1
- babel-preset-stage-2: v6.22.0 → v6.24.1
- babel-preset-stage-3: v6.22.0 → v6.24.1
- babel-runtime: v6.22.0 → v6.23.0
- case-sensitive-paths-webpack-plugin: v1.1.4 → v2.0.0 - use the file system exposed by the compiler
- css-loader: v0.26.1 → v0.28.3 - added an
alias
option - detect-port: v1.1.0 → v1.1.3
- express: v4.14.0 → v4.15.3
- file-loader: v0.9.0 → v0.11.1 - added
useRelativePath
option - filesize: v3.4.3 → v3.5.10
- inquirer: v3.0.1 → v3.0.6
- karma: v1.4.0 → v1.7.0
- karma-chrome-launcher: v2.0.0 → v2.1.1 - add support for headless Chrome/ChromeCanary
- karma-mocha-reporter: v2.2.2 → v2.2.3
- karma-phantomjs-launcher: v1.0.2 → v1.0.4 - fixed more path issues
- karma-webpack: v2.0.1 → v2.0.3 - don't swallow configuration errors
- mocha: v3.2.0 → v3.4.2
- ora: v1.1.0 → v1.2.0 - added
warn()
andinfo()
utilities - postcss-loader: v1.2.2 → v2.0.5 - validate options
- resolve: v1.2.0 → v1.3.3
- style-loader: v0.13.1 → v0.18.1
- url-loader: v0.5.7 → v0.5.8 - fix loader util deprecation warning
- webpack: v2.2.1 → v2.6.1 -
import()
can now configure a chunk name,require.ensure()
can now take an error callback, addedmodule.strictExportPresence
- webpack-dev-middleware: v1.9.0 → v1.10.2 - CORS security fix
- webpack-hot-middleware: v2.15.0 → v2.18.0 - client overlay style can now be customised with CSS using
#webpack-hot-middleware-clientOverlay
- webpack-merge: v2.4.0 → v4.1.0
- whatwg-fetch: v2.0.2 → v2.0.3
Internal:
- Use
fs
andfs-extra
instead ofglob
andrimraf
, which are now onlydevDependencies
.
Dependencies:
- extract-text-webpack-plugin: v2.1.0 - fix bad scoped version in nwb v0.15.7
- html-webpack-plugin: v2.26.0 → v2.28.0 - revert relative loader resolving change from v2.25.0 back to a full path
- webpack: v2.2.0 → v2.2.1 -
ident
is now automatic, fixes issue passing options to postcss-loader
Added:
- Added
npm.cjs
config to disable creation of a CommonJS build inlib/
if you don't need it [#285] [treshugart]
Changed:
- Disable creation of a minified UMD build when
webpack.uglify
config isfalse
[#288] [treshugart] - Support use of Karma
customLaunchers
which start with "Chrome" [#296] [michaelsbradleyjr]
Fixed:
Documentation:
- Document use of Karma's
usePolling
config to reduce CPU usage on macOS [#297] [michaelsbradleyjr]
Changed:
- Explicitly call
process.exit(0)
from thenwb
command when there are no errors running a command [#262]
Fixed:
- Fixed blank version being set for the React
peerDependency
in newreact-component
projects. - Use the transpiled ES5 version of
preact-compat
for compatibility builds usingreact build
with the--preact
flag, to prevent UglifyJS errors [#244]
Changed:
- Support the Array version of deprecated
webpack.postcss
config. - Tell the user they're including redundant config if they've manually configured
inferno-compat
orpreact-compat
aliases for React modules [#247]
Fixed:
-
Added a missing
.default
to the Preact project skeleton where CommonJSrequire()
was being used to import an ES module [#245].default
must now be used to access the default export from an ES module when importing with CommonJSrequire()
as Webpack 2 prevents module format mixing, which was previously used to provide CommonJS interop.
Fixed:
- Use the transpiled ES5 version of
preact-compat
, as UglifyJS can't handle the ESmodule
build [#244]
Removed:
- Remove hints about possibly not needing
babel.cherryPick
due to Webpack 2 tree shaking, as this doesn't currently appear to be true.
Breaking Changes:
-
Upgraded from Webpack 1 to Webpack 2 [#110]
Minimum Node.js version increased from 4.2 to 4.3 - this is Webpack 2's minimum supported Node.js version.
Strict Webpack configuration - Webpack 2 is strict about what appears in its configuration object. If you're using
webpack.extra
config, it must conform to Webpack 2's configuration format or your build will fail with a validation error.Dropped CommonJS compatibility when importing ES modules - Webpack 2 no longer allows you to mix CommonJS modules with ECMAScript modules - if a module uses
import
orexport
syntax,exports
will beundefined
andmodule.exports
will be read-only andundefined
.As a result, we can no longer provide CommonJS interop by default for ES Modules - you will need to check your code for usage of CommonJS
require()
to import ES modules and tack a.default
on the end if you need to use the module'sexport default
.If you used nwb's Preact project skeleton, the
init()
function inindex.js
needs to have a.default
tacked on when theApp
component is being imported.Custom top-level properties no longer allowed in Webpack configuration - Webpack 2 no longer allows custom top-level properties in its configuration. Loader configuration which can't be serialised, such as plugin objects, can now be provided directly as loader options instead using
webpack.rules
config instead.This includes
postcss-loader
, which is now configured viawebpack.rules
instead of having its own specialwebpack.postcss
config.
nwb.config.js
Config Format Changes:
For deprecations, nwb will continue to support the old format for the next couple of releases, displaying warning messages about the changes required and adapting deprecated config for use in the current version where possible.
If you have an
nwb.config.js
file, runnwb check-config
after updating nwb to find out if there's anything you need to change.
-
Deprecated
karma.testDirs
, renaming this config tokarma.excludeFromCoverage
, as it can be configured to exclude any paths from code coverage, not just directories [#236]// < v0.15 // v0.15 module.exports = { module.exports = { karma: { karma: { testDirs: [ => excludeFromCoverage: [ 'test/', 'test/', 'path/to/ignorethis.js' 'path/to/ignorethis.js' ] ] } } } }
-
Deprecated
webpack.loaders
, renaming this config towebpack.rules
to match Webpack 2's new config format:// < v0.15 // v0.15 module.exports = { module.exports = { webpack: { webpack: { loaders: { => rules: { /* ... */ /* ... */ } } } } } }
-
Deprecated use of a
query
property to configure Webpack rule options as a separate object - anoptions
property should now be used as per Webpack 2's new config format:// < v0.15 // v0.15 module.exports = { module.exports = { webpack: { webpack: { loaders: { rules: { css: { css: { query: { => options: { modules: /* ... */ modules: /* ... */ } } } } } } } } } }
You can also still configure loader options as a flat object to make this particular change irrelevant:
module.exports = { webpack: { rules: { css: { modules: /* ... */ } } } }
-
Deprecated configuring PostCSS plugins with special
webpack.postcss
config - postcss-loader can now be configured like any other loader usingwebpack.rules
config:// < v0.15 // v0.15 module.exports = { module.exports = { webpack: { webpack: { postcss: [ => rules: { require('precss')(), postcss: { require('autoprefixer')() plugins: [ ] require('precss')(), } require('autoprefixer')() } ] } } } }
Removed:
- Removed support for configuration which was deprecated in nwb v0.12.
- Removed support for
json-schema
inwebpack.compat
config, as this library has now been fixed [#227]
Dependencies:
- autoprefixer: v6.6.1 → v6.7.0
- babel-cli: v6.18.0 → v6.22.2
- babel-core: v6.21.0 → v6.22.1
- babel-plugin-inferno: v1.5.0 → v1.7.0 - make plugin ES5-environment compatible; add option to import
createVNode
- babel-plugin-transform-react-jsx: v6.8.0 → v6.22.0
- babel-plugin-transform-react-jsx-self: v6.11.0 → v6.22.0
- babel-plugin-transform-react-jsx-source: v6.9.0 → v6.22.0
- babel-plugin-transform-runtime: v6.15.0 → v6.22.0
- babel-polyfill: v6.20.0 → v6.22.0
- babel-preset-es2015: v6.18.0 → v6.22.0
- babel-preset-es2016: v6.16.0 → v6.22.0
- babel-preset-react : v6.16.0 → v6.22.0
- babel-preset-stage-0: v6.16.0 → v6.22.0
- babel-preset-stage-1: v6.16.0 → v6.22.0
- babel-preset-stage-2: v6.18.0 → v6.22.0
- babel-preset-stage-3: v6.17.0 → v6.22.0
- babel-runtime: v6.20.0 → v6.22.0
- detect-port: v1.0.7 → v1.1.0
- filesize: v3.3.0 → v3.4.3
- html-webpack-plugin: v2.24.1 → v2.26.0 - Webpack 2 RC support
- inquirer: v2.0.0 → v3.0.1 - drop Node.js 0.12 support
- karma: v1.3.0 → v1.4.0
- karma-mocha-reporter: v2.2.1 → v2.2.2
- karma-webpack: v1.8.0 → v2.0.1 - Webpack 2 RC support
- object-assign: v4.1.0 → v4.1.1
- ora: v0.4.1 → v1.1.0 - text can now be changed while stopping and persisting
- postcss-loader: v1.2.1 → v1.2.2
- webpack: v1.14.0 → v2.2.0 - \o/
- webpack-merge: v2.3.1 → v2.4.0
- whatwg-fetch: v2.0.1 → v2.0.2
Temporarily Scoped Dependencies:
These are being scoped to both make use of unreleased features and to test them out:
- @insin/extract-text-webpack-plugin - scoped until this PR is merged and released
- @insin/npm-install-webpack-plugin - scoped until new features are merged and released
Internal:
- Dropped unused
fs-extra
dependency. - Use
babel-preset-env
when transpiling tolib/
, targeting Node.js 4 [#233] - Use ES2015
String
methods available in Node.js 4 instead ofString.prototype.indexOf
comparisons [#222]
Fixed:
Fixed:
- Fix using Express middleware with a config file which exports a function [#238]
Fixed:
- Fix running tests with base config only (
web-app
andweb-module
projects).
Dependencies:
- Downgrade
html-webpack-plugin
to v2.24.1 while issues later versions cause withnpm-install-webpack-plugin
are unresolved.
Fixed:
- To prevent version compatibility issues using project commands from a globally-installed
nwb
, it will now exit with a warning if the project specifies a different version of nwb inpackage.json
[#167]- The ability to run project commands like
build
,serve
etc. from a globalnwb
install is provided so you don't have to reinstall the entirety of nwb when creating new projects, but it's recommended that you switch to a locally-installed version later, as relying on globally-installed tool versions is brittle.
- The ability to run project commands like
- Fix
clean
commands in paths with spaces [#181]
Added:
- Added an
inferno
command for quick Inferno prototyping and building. Useinferno run <entry.js>
to serve a module andinferno build <entry.js> [dist/]
to build it. - Added a
preact
command for quick Preact prototyping and building. Usepreact run <entry.js>
to serve a module andpreact build <entry.js> [dist/]
to build it. - The
inferno
andpreact
commands use a render shim module by default which hooks intoInferno.render()
andPreact.render()
to intercept the incoming VNode and re-render it from the top when accepting Hot Module Replacement, so if you're callingrender()
yourself you don't have to specify a DOM node, or aroot
when re-rendering in Preact.- If you want to take full control of rendering, use the
--force
flag and nwb will skip the render shim and use your entry module directly. - The
react
command's render shim doesn't hook intoReactDOM.render()
and only handles rendering exported components or elements for convenient prototyping, as react-transform-hmr handles the details of accepting Hot Module Replacement and patching/re-rendering at the component/module level.
- If you want to take full control of rendering, use the
- Added new features which are available in the
inferno
andpreact
commands to the existingreact
command:- Added a
--plugins
option to specify nwb plugins which should be installed and used without having to set up apackage.json
. - Added a
--force
option to force use of the provided entry module directly instead of the render shim module which is used by default to support quick prototyping. - Added a
--no-polyfill
option to disable inclusion of nwb's default polyfills forPromise
,fetch()
andObject.assign()
if you're not using them or don't need them polyfilled. - Inferno compat and Preact compat dependencies are now automatically installed if missing.
react build
can now build a module which exports a React component or element, for quick sharing of prototypes.
- Added a
- Inferno and Preact apps are now configured to use their respective React compatibility modules by default if
react
orreact-dom
are imported, allowing use of existing React code out of the box.
Changed:
- The Webpack manifest module is now generated when building an app (as well as being inlined into the generated
index.html
) - you will need to include this first if manually handling HTML generation after building. - Express middleware now supports Inferno, Preact and plain JavaScript apps, not just React.
- When building a React app using the
--inferno
or--preact
flags, the required compatibility dependencies are now installed automatically if they can't be resolved from your project directory. - When creating new projects, the latest version of dependencies will be installed, rather than using a a version range hardcoded in nwb.
- Skip initialising a Git repo if a
.git/
directory already exists, e.g. you may want to usenwb init
in an existing repo. - The default build for a React component demo app now supports use of a
demo/public/
directory for static content. - An
args
property is now included in the object passed to user configs which export a function - this contains parsed arguments, e.g.args.preact
will betrue
if you passed--preact
when callingnwb
.
Removed:
- Removed support for using
--set-env-VAR_NAME
arguments to set environment variables. jsnext:main
is no longer includedpackage.json
for newreact-component
andweb-module
projects - only the "more standard"module
property is used to point to an ES2015 modules build [#215]
Dependencies:
- autoprefixer: v6.5.3 → v6.6.1
- babel-core: v6.20.1 → v6.21.0
- babel-loader: v6.2.9 → v6.2.10 - Webpack 2 RC support
- babel-plugin-inferno: v1.4.0 → v1.5.0 - use import instead of global Inferno reference
- babel-plugin-istanbul: v3.0.0 → v3.1.2
- babel-plugin-lodash: v3.2.10 → v3.2.11
- detect-port: v1.0.6 → v1.0.7
- html-webpack-plugin: v2.24.1 → v2.26.0 - Webpack 2 RC support
- karma-webpack: v1.8.0 → v1.8.1 - Webpack 2 RC support
- ora: v0.3.0 → v0.4.1
- phantomjs-prebuilt: v2.1.13 → v2.1.14
- postcss-loader: v1.2.0 → v1.2.1
- resolve: v1.1.7 → v1.2.0
- webpack-dev-middleware: v1.8.4 → v1.9.0 - Webpack 2 RC support
- webpack-hot-middleware: v2.13.2 → v2.15.0 - add cache for warnings
- webpack-merge: v1.0.2 → v2.3.1 - providing an empty array/object no longer overrides when merging
Changed:
- Inferno apps now use Inferno 1.x by default.
Dependencies:
- babel-plugin-inferno: v1.3.0-beta17 → v1.4.0
Fixed:
- Updated Inferno Babel plugin to fix whitespace trimming issue.
Changed:
- Updated default Inferno version for new apps to 1.0.0-beta42.
Dependencies:
- babel-plugin-inferno: v1.2.0-beta13 → v1.3.0-beta17 - fixes whitespace trimming around newlines
Fixed:
-
Don't configure the babel runtime transform's
moduleName
path when transpiling code for npm [#205]If you depend on
babel-runtime
in a React component or Web module (by usingasync
/await
or enabling any of the runtime transform's other features it needs to be resolvable from the end-user's dependencies, so should be added to your project'speerDependencies
.
Fixed:
Fixed:
Fixed:
- Fix npm scripts in the
inferno-app
skeleton.
Fixed:
- Initialise a Git repo for a new project after installing dependencies, so package.json includes dependencies saved by npm in the initial commit.
Added:
- Added a
--copy-files
flag for React component builds to copy files which will not be transpiled over to the build directories [#58]
Added:
- Added new project types:
inferno-app
andpreact-app
- use these withnwb new
ornwb init
to develop Inferno and Preact apps [#194] - Added an
--inferno
flag to React app builds to create aninferno-compat
build [#194] react-jsx-source
andreact-jsx-self
Babel transforms are now enabled for React apps in development mode for improved debugging.- A Git repo with an initial commit is now created by default when creating a new project. Pass a
--no-git
flag to disable this. - Added project-specific variants of
nwb test
:nwb test-react
,nwb-test-inferno
andnwb-test-preact
. - Added an
audio
loader and ansvg
loader.
Removed:
- Removed hardcoded React preset from default Babel config when running tests - instead,
nwb test
will run the newnwb test-react
command if you have areact-app
orreact-component
project type innwb.config.js
. - Dependencies are no longer bundled. As a result, Babel 6 dependencies will no longer be deduplicated for npm2 users, so an nwb install will be slower and larger - consider upgrading to npm3 or yarn if you can.
- Removed support for deprecated
webpack.plugins
config innwb.config.js
- this config must now be moved up intowebpack
instead.
Changed:
- Handling of
.svg
files has been moved from thegraphics
loader to the newsvg
loader so inlining can be configured separately. This matters if you're using a sprite system, as base64 inlining SVGs breaks fragment identifiers. - Changed
babel-plugin-transform-runtime
configuration to make use of newmoduleName
config; Webpack module resolution no longer uses a blanket fallback to nwb'snode_modules/
for serving and builds. webpack.uglify
config can now be set tofalse
to disable use ofUglifyJSPlugin
in production builds for debugging [#160]
Dependencies:
- autoprefixer: v6.4.0 → v6.5.3
- babel-cli: v6.11.4 → v6.18.0
- babel-core: v6.13.2 → v6.20.0
- babel-loader: v6.2.4 → v6.2.9 - better syntax error messages
- babel-plugin-istanbul: v2.0.0 → v3.0.0
- babel-plugin-lodash: v3.2.8 → v3.2.10
- babel-plugin-transform-react-remove-prop-types: v0.2.9 → v0.2.11
- babel-plugin-transform-runtime: v6.12.0 → v6.15.0 - add
moduleName
config to specify runtime path - babel-polyfill: v6.13.0 → v6.20.0
- babel-preset-es2015: v6.14.0 → v6.18.0
- babel-preset-es2016: v6.11.3 → v6.16.0
- babel-preset-react: v6.11.1 → v6.16.0
- babel-preset-stage-0: v6.5.0 → v6.16.0
- babel-preset-stage-1: v6.13.0 → v6.16.0
- babel-preset-stage-2: v6.13.0 → v6.18.0
- babel-preset-stage-3: v6.11.0 → v6.17.0
- babel-runtime: v6.11.6 → v6.20.0
- case-sensitive-paths-webpack-plugin: v1.1.3 → v1.1.4 - handle cwd being incorrect case
- copy-webpack-plugin: v3.0.1 → v4.0.1
- css-loader: v0.23.1 → v0.26.1 - cssnano's use of autoprefixer is now disabled by default
- detect-port: v1.0.0 → v1.0.6
- figures: v1.7.0 → v2.0.0
- html-webpack-plugin: v2.22.0 → v2.24.1
- inquirer: v1.1.2 → v2.0.0
- glob: v7.0.5 → v7.1.1
- karma: v1.2.0 → v1.3.0
- karma-chrome-launcher: v1.0.1 → v2.0.0 - chromium support
- karma-mocha: v1.1.1 → v1.3.0
- karma-mocha-reporter: v2.1.0 → v2.2.1
- karma-phantomjs-launcher: v1.0.1 → v1.0.2 - fix phantomjs path calculation
- mocha: v3.0.2 → v3.2.0
- phantomjs-prebuilt: v2.1.12 → v2.1.13
- postcss-loader: v0.10.0 → v1.2.0
- qs: v6.2.1 → v6.3.0
- webpack: v1.13.1 → v1.14.0 - updated node-libs-browser and uglifyjs versions -
screw_ie8
is now enabled by default; fix for Babel sourcemap issue - webpack-merge: v0.14.1 → v1.0.2
- webpack-dev-middleware: v1.6.1 → v1.8.4
- webpack-hot-middleware: v2.12.2 → v2.13.2
- whatwg-fetch: v1.0.0 → v2.0.1 - changes behaviour of
Headers
to be spec-compliant
Removed:
- Dropped the production
react-constant-elements
transform for now due to bugs.
Experimental:
react run
can now run modules which export a React component or element.
Added:
- Added a
reload
option to Express middleware to enable reloading the page if Hot Module Reloading is unsuccessful [#168]
Breaking Changes:
-
Dropped Node.js 0.12 support
Based on the
engines
config of nwb's dependencies, Node.js 4.2.0 is now the minimum required version. -
Upgraded from Babel 5 to Babel 6 [#12] [#31] [@geowarin]
Babel 6 introduced a number of breaking changes which you may need to account for in your codebase if you're using nwb or were otherwise using Babel 5.
babel
config innwb.config.js
is no longer directly equivalent to what you would put in a.babelrc
file. -
Added support for long-term caching [#73]
A deterministic hash is now included in the filenames of generated
.js
and.css
files.The Webpack manifest (required for module loading) is now extracted and automatically injected prior to the
</body>
tag, so your HTML template must have a</body>
tag.If you do any post-build processing on generated files it might need to be updated, as production app builds will now generate files as
[name].[hash].[ext]
instead of[name].[ext]
. -
Dropped support for the
.jsx
extensionYou can use
webpack.loaders
config to set/\.jsx?$/
asbabel-loader
'stest
config andwebpack.extra config
to add.jsx
back to theresolve.extensions
list if you're using.jsx
files and can't reasonably migrate away. -
Dropped
build-module
andbuild-umd/clean-umd
commandsThese were a confusing middle layer which split the implementation of building a React component or browser-focused npm module in two. They both required a config file to provide a project
type
for nwb to figure out what to do.They've been replaced with
build-react-component
andbuild-web-module
commands, which are now used inpackage.json
scripts
in the corresponding project skeletons.As a result having a config file is now optional for all project types. If you don't need configuration, you can delete the
nwb.config.js
file created as a convenience by project skeletons.A config file is now only required if you want to use the generic
build
,clean
andserve
commands. -
Changed ES6 module build directory from
es6/
toes/
Upgrade steps:
- Replace
"es6/index.js"
with"es/index.js"
inpackage.json
"jsnext:main"
config - Also add
"module": "es/index.js"
, as this is part of a proposal for native module support which is being supported by multiple bundlers. - Replace
"es6"
with"es"
inpackage.json
files
config
- Replace
-
Dropped
webpack.vendorBundle
config in favour of a--no-vendor
flagMaking this feature toggle a command line argument makes it easier to try, and to combine with other feature toggles like
--preact
.Tweak your
package.json
"build"
script instead if you were usingwebpack.vendorBundle: false
config:{ "scripts": { "build": "nwb build-react-app --no-vendor" } }
nwb.config.js
Config Format Changes:
-
build
config is deprecated in favour of newnpm
config, which is a slightly different format.nwb will adapt any
build
config it finds for the current build and log out the equivalentnpm
config.// < v0.12 // v0.12 module.exports = { module.exports = { build: { => npm: { jsNext: true, esModules: true, umd: true, => umd: { global: 'MyComponent', global: 'MyComponent', externals: {'react': 'React'} externals: {'react': 'React'} } } } } }
// < v0.12 // v0.12 - simple UMD config without externals module.exports = { module.exports = { build: { => npm: { jsNext: true, esModules: true, umd: true, => umd: 'myLib' global: 'MyLib' } } } }
-
The Babel runtime transform is now configured using new
babel.runtime
config instead of Babel 5'soptional
config.The runtime transform is now partially-enabled by default to support use of
async
/await
and generators, so update your configuration accordingly. nwb will adapt['runtime']
config for the current build by converting it totrue
.// < v0.12 // v0.12 - enabled by default for regenerator module.exports = { babel: { optional: ['runtime'] => // You can remove your config if you were } // using it for async/await or generators }
// < v0.12 // v0.12 - also import helpers from module.exports = { module.exports = { babel: { babel: { optional: ['runtime'] => runtime: 'helpers' } } } }
-
babel.loose
config is now Boolean instead of Babel 5's string config.
Loose mode is now enabled by default, so loose
config is only used if you need to disable loose mode.
// < v0.12 // v0.12 - enabled by default
module.exports = {
babel: {
loose: 'all' => (none)
}
}
// < v0.12 - loose mode not used // v0.12 - disabling loose mode
module.exports = {
babel: {
(none) => loose: false
}
}
-
karma.tests
config is deprecated in favour of newkarma.testContext
andkarma.testFiles
config, depending on which was being specified. Ifkarma.tests
is present, nwb will attempt to detect the appropriate new config to use it for, or will otherwise fall back to the new default config.// < v0.12 // v0.12 - using a Webpack context module module.exports = { module.exports = { karma: { karma: { tests: 'tests.webpack.js' => testContext: 'tests.webpack.js' } } } }
// < v0.12 // v0.12 - custom test file glob module.exports = { module.exports = { karma: { karma: { tests: 'test/**.test.js' => testFiles: 'test/**.test.js' } } } }
Developer Experience Improvements:
-
Added a
check-config
command which checks your nwb configuration file for errors and deprecated usage, and provides some usage hints (e.g. where more convenient config is available).Run this after upgrading your nwb version and it will tell you what needs to be changed.
-
New user-friendly output for Webpack builds based on create-react-app's.
This provides friendlier error and warning reporting, reports the gzipped size of generated files and uses a persistent console for development server logging.
Windows Note: running a development server will clear the current screen in your console - in Windows the escape codes used to do this have the unfortunate effect of clearing all the scrollback history in your current console.
To avoid this use the
start
command to spawn a new command window when running the development server in Windows, e.g.:start npm start start react run app.js
-
Apps can now use
fetch
,async
/await
and generators out of the box without any configuration.Promise
,fetch
,Object.assign
polyfills and the regenerator runtime are now provided by default. -
You can now transform destructured imports to cherry-picked imports for specified modules using new
babel.cherryPick
config [#141] -
Case-sensitivity of
require
/import
paths is now enforced byCaseSensitivePathsPlugin
, avoiding an easy-to-overlook cause of CI build failure if you don't develop on Linux. -
If the intended dev server port is not available, you will now be prompted to continue with a different, free port.
React App Optimisations:
-
Production React builds now remove
propTypes
from ES6 class and stateless functional components (but not from your dependencies) using react-remove-prop-types [#97] -
Added a
--preact
flag to React app builds to create apreact-compat
build.This is an easy way to try Preact with your React apps, resulting in a much smaller bundle if your app is compatible [#124]
Babel:
-
nwb implements its own support for a Babel 6 equivalent of Babel 5's
stage
configuration to choose which experimental features are enabled, including defaulting to Stage 2.For stage 2 and below, decorators can be use by default, as nwb will include the Babel Legacy Decorator transform plugin. See the plugin's Best Effort documentation for differences you will need to take into account if you were using Babel 5 decorators.
-
nwb preserves CommonJS interop for apps and component ES5 builds using the
add-module-exports
plugin.This means a
.default
doesn't need to be tagged on when you're usingrequire()
with Webpack's code-splitting, or when people import your npm modules usingrequire()
directly.Babel 6 removed interop with CommonJS exports, as it allowed you to write broken ES6 code. Kent C. Dodds has a post about this which is well worth reading to understand what not to do.
-
Loose mode is now enabled by default.
-
Changed
babel.loose
config to Boolean.This is now only needed if you want to disable loose mode (e.g. in non-production environments to check for ES6 compliance errors in normal mode).
-
Added
babel.runtime
config to configure the Babel runtime transform, replacing Babel 5'soptional
config.This is turned on by default, configured to import the regenerator runtime when
async
/await
or generators are used. -
Removed the inline element transform optimisation for React app production builds, as the Babel 6 version of it currently depends on polyfilling
Symbol
.
Karma:
-
Changed default testing configuration to support co-location of tests and a wider range of test file names and locations. This should be backwards-compatible with the previous defaults.
- Test files included by default are now
-test.js
,.test.js
or.spec.js
files anywhere underneath asrc/
,test/
ortests/
directory. - Code coverage also ignores all code underneath
test/
,tests/
or any__tests__/
directory insidesrc/
by default, as well as test files.
- Test files included by default are now
-
Added
karma.browsers
config to customise which browsers tests are run in.The plugin to support use of
'Chrome'
in this config is also available by default. -
Added
karma.testDirs
config to control which directories are excluded from code coverage reporting. -
babel-plugin-istanbul
is now used to instrument code for test coverage instead ofisparta-loader
.
Webpack:
Default Loader Config
- Disabled
css-loader
's use of Autoprefixer - nwb's PostCSS configuration is now the only source of prefix addition and removal [#132] - All static file loaders now use
url-loader
(which falls back tofile-loader
) to allow you to configure inlining for any group of static files if needed. - Changed default
limit
config for all static file loaders to1
, effectively disabling inlining by default - if you want resources smaller than a given size to be inlined, configurelimit
usingwebpack.loaders
config. - Moved handling of
.svg
files from thefonts
loader to thegraphics
loader. - Moved handling of
.eot
files to thefonts
loader and removed theeot
loader. - Added a
video
loader for.mp4'
,.ogg
and.webm
. - Added
.webp
to thegraphics
loader.
Default Plugin Config
- Updated default
UglifyJsPlugin
options to strip comments from output and use thescrew_ie8
setting in every minification step.
Configuration
- Added
webpack.aliases
config to set up module resolving aliases, as a convenient alternative to usingwebpack.extra.resolve.alias
[#125] - Added
webpack.autoprefixer
config to configure Autoprefixer in nwb's default PostCSS configuration [#132] - Added
webpack.publicPath
config to set up or clear the path/URL used for static resources, as a convenient alternative to usingwebpack.extra.output.publicPath
. - Added
webpack.uglify
config to allow customisation of WebpackUglifyJsPlugin
options. webpack.compat
config now supports'json-schema': true
to prevent a transitivejson-schema
dependency breaking Webpack builds. This usually manifests itself as anUncaught Error: define cannot be used indirect
error.- Generated
module.noParse
config is now anArray
, so any user-provided config for it inwebpack.extra
(which should also be specified as anArray
) can now be merged into it.
npm Build:
-
When creating a project with an ES6 modules build enabled, a
"module"
property will be added to the project'spackage.json
as well as"jsnext:main"
[#137]This is the default property Webpack 2 uses to look for an ES6 modules build.
-
build
config is deprecated in favour of newnpm
config. -
React component builds now wrap
propTypes
for ES6 class and stateless functional components with an environment check -if (process.env.NODE_ENV !== 'production')
- so they'll automatically be stripped from the production build in apps which use them. [#145]propTypes
will be stripped from the minified UMD build.This can be disabled by passing a
--no-proptypes
flag. -
Building a React demo app during a React component build can now be skipped by passing a
--no-demo
flag [#155]
Other Configuration:
- Fallback index serving for HTML5 History apps is now enabled by default in the development server. This can be disabled by passing a
--no-fallback
flag. - Added
polyfill
config to disable default polyfilling ofPromise
andfetch
for apps if you don't need it and want to shave a few KB off your build. - The dev server port can now be specified via a
PORT
environment variable. The CLI--port
takes precedence if both are provided.
CLI:
- Added a
nwb check-config
command. - CLI now uses spinners for build commands, with gzipped filesize logging.
- Reworked build commands for React components and npm modules to remove a needless middle layer and add specific build commands for these project types.
- Removed the
-g, --global
argument for enabling a UMD build when creating a React component or web module project, in favour of passing a name to the--umd
argument instead. - Removed the
--info
flag for showing webpack output, as this is now handled in a more developer-friendly manner.
Starter Projects:
- The react-app project skeleton now includes examples of importing CSS and images.
- Required
<meta>
tags in HTML templates are now all first thing in<head>
. - Added
shrink-to-fit=no
to theviewport
<meta>
tag in HTML templates for Safari.
Dependencies:
- autoprefixer: v6.3.6 → v6.4.0
- babel* v5 → babel* v6
- babel-plugin-istanbul: v2.0.0
- babel-plugin-lodash: v3.2.8
- babel-plugin-transform-react-remove-prop-types: v0.2.9
- case-sensitive-paths-webpack-plugin: v1.1.3
- connect-history-api-fallback: v1.2.0 → v1.3.0 - allow disabling of the dot rule
- copy-template-dir: v1.2.1 → v1.3.0 - support vars in filenames
- expect: v1.20.1 → v1.20.2
- express: v4.13.4 → v4.14.0
- figures: v1.7.0
- file-loader: v0.8.5 → v0.9.0
- glob: v7.0.3 → v7.0.5
- html-webpack-plugin: v2.19.0 → v2.22.0
- inquirer: v1.0.3 → v1.1.2
- karma: v0.13.22 → v1.2.0
- karma-chrome-launcher v1.0.1
- karma-coverage: v1.0.0 → v1.1.1
- karma-mocha-reporter: v2.0.3 → v2.1.0
- karma-phantomjs-launcher: v1.0.0 → v1.0.1
- karma-webpack: v1.7.0 → v1.8.0 - remove dist from scm
- mocha: v2.5.3 → v3.0.2
- npm-install-webpack-plugin: v4.0.1 → v4.0.4
- phantomjs-prebuilt: v2.1.7 → v2.1.12 - npm packaging fun
- postcss-loader: : v0.9.1 → v0.10.0
- qs: v6.2.0 → v6.2.1
- rimraf: v2.5.2 → v2.5.3
- webpack-fail-plugin: v1.0.5
- webpack-hot-middleware: v2.10.0 → v2.12.2
- webpack-md5-hash: v0.0.5
- webpack-merge: v0.14.0 → v0.14.1
Fixed:
- PostCSS config was not being created for the vendor/
node_modules/
loader for CSS preprocessor plugins [#129]
Breaking Changes:
- Replaced the deprecated
autoprefixer-loader
withpostcss-loader
in default style pipelines - it's configured to do the same autoprefixing by default [#57]- If you were configuring vendor prefixing using
webpack.loaders.autoprefixer
, you will now need to manage anautprefixer
dependency yourself and usewebpack.postcss
to perform this configuration.
- If you were configuring vendor prefixing using
nwb.config.js
Config Format Changes:
-
webpack.plugins
is deprecated - config underwebpack.plugins
should be moved up intowebpack
instead. Having certain config under aplugins
prop was an implementation detail which wasn't relevant to end-users [#113]// < v0.11 module.exports = { webpack: { plugins: { define: {...}, html: {...} } } }
// v0.11 module.exports = { webpack: { define: {...}, html: {...} } }
-
Support for flatter Webpack loader configuration was added. Having a
query
object is now optional - loader query configuration can now be placed directly under the loader's id [#113]// < v0.11 module.exports = { webpack: { loaders: { css: { query: { modules: true } } } } }
// v0.11 module.exports = { webpack: { loaders: { css: { modules: true } } } }
Added:
- Installing globally now adds a
react
command for quick React development starting from a single file.react run entry.js
runs a development server.react build entry.js
creates a static build.- For these commands, Babel is preconfigured to allow you to use all of its Stage 0 features out of the box, including
async
/await
. - These are implemented by (the previously undocumented)
serve-react
and (new)build-react
nwb commands.
- The entry point for apps and npm module UMD builds can now be specified as an argument to
build
andserve
commands. The default is stillsrc/index.js
. [#115] - The directory web apps are built into can now be specified as an argument to
build
,clean
andserve
commands. The default is stilldist/
. - Added
webpack.compat
config to enable compatibility tweaks for modules which are known to be problematic with Webpack - initially this includes support for Enzyme, Moment.js and Sinon.js 1.x [#108] - Added
webpack.postcss
config to customise the PostCSS plugins applied to each style pipeline [#57] - Added
webpack.vendorBundle
config to disable automatically extracting anything imported fromnode_modules/
out into a separatevendor
chunk [#106] - Added documentation for creating and using a test context module if there's code you need to run prior to tests running, such as configuring your assertion library with additional assertions.
- Added a
--config
option to allow you to specify your own config file instead ofnwb.config.js
.
Changed:
- Apps are no longer required to provide their own HTML template. The default template path of
src/index.html
will continue to be used if a file exists there. If an alternative template is not provided viawebpack.html
config, nwb will now fall back to using a basic template. - Restored default use of the Babel polyfill in Karma config so tests (and their dependencies) can assume a modern environment.
- Default
babel-loader
config now usescacheDirectory: true
for a speedup. - Improved debug output (activated with a
DEBUG=nwb
environment variable) to print config objects in full - if you're configuring plugin objects (e.g. PostCSS plugins), it's recommended to create instances of them if you want to use debug output. webpack.optimize.DedupePlugin
is now only used for production builds, as recommended in the Webpack docs.
Dependencies:
- html-webpack-plugin: v2.17.0 → v2.19.0
- inquirer: v1.0.2 → v1.0.3
- mocha: v2.4.5 → v2.5.3
- npm-install-webpack-plugin: v3.1.2 → v4.0.1 - saving is on by default and a new
dev
option controls where installed dependencies get saved to - postcss-loader: v0.9.1
- redbox-noreact: v1.0.0 → v1.1.0
- webpack: v1.13.0 → v1.13.1
- webpack-merge: v0.12.0 → v0.14.0
Breaking Changes:
- React v15 is now installed into React app/component skeletons by default.
Changed:
- Default Karma config now includes
showDiff: true
config for the default Mocha reporter. - The dev server now logs an initial
webpack building...
message so you know you're waiting for the initial build. - npm scripts in the skeletons generated for
react-app
andweb-app
projects now use project type-specific commands, so thenwb.config.js
included with them can be deleted if you don't need any config tweaks. - nwb now passes the
--save
option to npm when installing React dependencies, to honour any npm save-exact (recommended!) or save-prefix config you have set.
Added:
- Extra Karma config can now be configured via a
karma.extra
Object. - Added a
--react
option to allow you to set the version of React which will be installed when creating apps or components. This defaults to whatever the stable version of React was when the version ofnwb
you're using was released.
Dependencies:
- chalk: v1.1.1 → v1.1.3 - update deps
- cross-spawn: v2.1.5 → v2.2.3 - update deps
- detect-port: v1.0.0
- expect: v1.16.0 → v1.20.1
- html-webpack-plugin: v2.14.0 → v2.17.0
- inquirer: v0.12.0 → v1.0.2 - switch to Promise-based API
- karma-coverage: v0.5.5 → v1.0.0
- karma-mocha: v0.2.2 → v1.0.1
- karma-mocha-reporter: v2.0.0 → v2.0.3
- npm-install-webpack-plugin: v3.0.0 → v3.1.2 [#77]
- phantomjs-prebuilt: v2.1.6 → v2.1.7
- qs: v6.1.0 → v6.2.0
- webpack: v1.12.14 → v1.13.0
- webpack-merge: v0.8.4 → v0.12.0
Dependencies:
- webpack-dev-middleware: v1.6.0 → v1.6.1 - fixes request path issue introduced in 1.6.0
Fixed:
style-loader
was not being specified to apply styles from additional chunks when extracting CSS.
Breaking Changes:
- Changes to how React and plain JS web apps are built:
-
Builds are now generated in
dist/
instead ofpublic/build/
-
index.html
for builds is now generated based on a template insrc/index.html
, instead of using a staticpublic/index.html
[#34]Upgrading existing projects:
- move your
public/index.html
tosrc/index.html
and delete the<link>
and<script>
tags forvendor
andapp
resources. These will now be injected at build time. - replace
/public/build
in your.gitignore
with/dist/
- move your
-
public/
is now only for public files - any contents in this directory will now be copied todist/
at the start of a build. The development server will also serve static content frompublic/
.
-
Removed:
- Backwards compatibility for
nwb.config.js
format changes made in 0.8 has been removed.
Added:
- Added a
--host
option when running the dev server [#50] ExtractTextPlugin
(used to extract CSS when building) can now be configured usingwebpack.plugins.extractText
config - this allows you to configure theallChunks
setting if you want all CSS to be extracted when using code splitting.HtmlWebpackPlugin
(used to generate anindex.html
when building) can now be configured usingwebpack.plugins.html
config.
Changed:
breakConfig: true
has been added to defaultbabel-loader
config to avoid.babelrc
files being resolved by Babel - all Babel configuration is expected to be innwb.config.js
[#63]- Static resources handled by Webpack's
file-loader
now include a hash in their filenames for cachebusting when they change [#38]
Dependencies:
- babel: v5.8.34 → v5.8.38 - left-pad transitive dependency drama
- babel-core: v5.8.34 → v5.8.38 - left-pad transitive dependency drama
- connect-history-api-fallback: v1.1.0 → v1.2.0 - support custom
Accept
headers - copy-template-dir: v1.2.0 → v1.2.1 - support large template folders
- expect: v1.14.0 → v1.16.0 - mostly packaging changes?
- glob: v7.0.0 → v7.0.3 - misc fixes
- html-webpack-plugin: v2.9.0 → v2.14.0
- karma: v0.13.21 → v0.13.22 - removed a large test file from npm package
- karma-coverage: v0.5.3 → v0.5.5 - bug fixes
- karma-mocha-reporter: v1.2.3 → v2.0.0 - add karma to peerDeps; wait for all browsers to run
- npm-install-webpack-plugin: v2.0.2 → v3.0.0 -
resolve.alias
andresolve.root
support [#83] - phantomjs-prebuilt: v2.1.4 → v2.1.6 - minor fixes to custom CA handling
- react-transform-hmr: v1.0.2 → v1.0.4 - update react-proxy to fix a few correctness issues
- style-loader: v0.13.0 → v0.13.1 - add query to style/useable
- webpack-dev-middleware: v1.5.1 → v1.6.0
- webpack-hot-middleware: v2.7.1 → v2.10.0 - improved error overlay styling
- webpack-merge: v0.7.3 → v0.8.4 - change merging behavior so only loaders get prepended
Dependencies:
- karma-mocha-reporter: v1.2.2 → v1.2.3 - don't fail test suites containing skipped tests
Breaking Changes:
-
npm-install-webpack-plugin
is now used instead ofnpm-install-loader
to implementnwb serve --auto-install
.If you were configuring automatic npm installation using a
loaders.install.query.cli
config object, this should be moved towebpack.plugins.install
instead.
nwb.config.js
Config Format Changes:
-
React component and vanilla JS module npm build configuration must now be specificed as a
build
object:// < v0.9 module.exports = { type: 'react-component', externals: {react: 'React'}, global: 'MyComponent', jsNext: true, umd: true }
// v0.9 module.exports = { type: 'react-component', build: { externals: {react: 'React'}, global: 'MyComponent', jsNext: true, umd: true } }
-
Webpack configuration must now be specified as a
webpack
object:// < v0.9 module.exports = { type: 'react-app', loaders: { css: { query: { modules: true } } } }
// v0.9 module.exports = { type: 'react-app', webpack: { loaders: { css: { query: { modules: true } } } } }
-
Webpack
define
config must now be specified in aplugins
object:// < v0.9 module.exports = { type: 'react-app', define: { __VERSION__: JSON.stringify(require('./package.json').version) } }
// v0.9 module.exports = { type: 'react-app', webpack: { plugins: { define: { __VERSION__: JSON.stringify(require('./package.json').version) } } } }
-
All "extra" Webpack config must be specified in a an
extra
object, including extra loaders. The new object must correspond with Webpack's config file layout.// < v0.9 module.exports = { type: 'react-app', loaders: { extra: [/* ... */] } }
// v0.9 module.exports = { type: 'react-app', webpack: { extra: { module: { loaders: [/* ... */] } } } }
Changes:
nwb.config.js
is now only required when running generic build commands:build
,clean
,serve
,test
type
config is only required when running a generic build command, but if provided it must be valid.
- Karma tests now always run just once in a CI environment regardless of the
--server
flag - this allows you to use--server
in your defaultnpm test
command if you want to, without needing a separate run script for CI. - Development instructions in project skeletons were moved from
README.md
to aCONTRIBUTING.md
file, and are now documented usingnpm
andnpm run
commands instead of globalnwb
commands. - All commands are now run in the current working directory - you no longer need to
require.resolve()
full paths to extra Babel plugins configured innwb.config.js
, just use their names as normal and Babel will now be able to import them. - Upgraded to PhantomJS v2 for Karma tests.
- Babel polyfills are no longer included in Webpack config for Karma, as PhantomJS v2 uses a more recent version of WebKit.
Added:
- Extra webpack config can now be configured via a
webpack.extra
Object.- To support adding other webpack built-in plugins via
extra
, if a function is exported fromnwb.config.js
, it will now be called with an object containing the following properties:command
- the nwb command being executedwebpack
- the webpack module (for configuring extra plugins using nwb's version of webpack)
- To support adding other webpack built-in plugins via
- Project type-specific versions of the
build
,clean
andserve
commands are now officially documented for direct use. - A
test:watch
npm script was added to project templatepackage.json
.
Dependencies:
- autoprefixer-loader: v3.1.0 → v3.2.0
- cross-spawn: v2.1.4 → v2.1.5 - update
which
dependency (minor) - expect: v1.13.4 → v1.14.0 - new features
- express: v4.13.3 → v4.13.4 - deps
- extract-text-webpack-plugin: v0.9.1 → v1.0.1 - use webpack-sources
- glob: v6.0.3 → v7.0.0 - throw if cwd is not a directory
- html-webpack-plugin: v1.7.0 → v2.9.0
- inquirer: v0.11.2 → v0.12.0
- karma: v0.13.18 → v0.13.21 - socket.io 1.4.5 seems to have fixed the post-test hanging issue, bug fixes and new features
- karma-mocha: v0.2.1 → v0.2.2
- karma-mocha-reporter: v1.1.5 → v1.2.2 - add diff output for failed tests
- karma-phantomjs-launcher: v0.2.3 → v1.0.0 - use phantomjs-prebuild
- mocha: v2.3.4 → v2.4.5
- phantomjs v1.9.19 → phantomjs-prebuilt v2.1.4 - update installer to PhantomJS 2.x, renamed package
- qs: v5.2.0 → v6.1.0 - revert ES6 requirement, new
allowDots
option and some fixes - react-transform-catch-errors: v1.0.1 → v1.0.2 - remove some files from the npm package
- react-transform-hmr: v1.0.1 → v1.0.2 - remove some files from the npm package
- resolve: v1.1.6 → v1.1.7 - fix
node_modules
paths on Windows - rimraf: v2.5.0 → v2.5.2
- webpack: v1.12.11 → v1.12.14 - fix Windows filename backslash incompatibility
- webpack-dev-middleware: v1.4.0 → v1.5.1 - platform-agnostic path joining, use
res.send
when available - webpack-hot-middleware: v2.6.0 → v2.7.1 - improve hint when hot reloads aren't accepted, update
strip-ansi
dependency (major), update stats handling
Fixed:
react-app
andweb-app
Webpack build config didn't haveoutput.publicPath
set, so images required from JavaScript weren't being found [#55]- Test runs no longer hang for up to a minute after completion [#49]
Dependencies:
- inquirer: v0.11.1 → v0.11.2 - display fixes
- karma: v0.13.19 → v0.13.18 - downgraded due to the test hanging issue being introduced
- karma-sourcemap-loader: v0.3.6 → v0.3.7 - avoid EMFILE errors; fix charset bug; fix RangeError exception
- socket.io: v1.3.7 - temporarily pinned in nwb's dependencies until the Karma test hang issue is resolved
- webpack: v1.12.10 → v1.12.11
- webpack-merge: v0.7.2 → v0.7.3 - bugfix
Fixed:
- Express middleware had a broken import.
Added:
- Added an
autoInstall
option to Express middleware.
Dependencies:
- glob: v6.0.3 → v6.0.4 - remove
util._extend
to avoid deprecation warnings - karma: v0.13.18 → v0.13.19 - handle new socket.io internal format
- webpack: v1.12.9 → v1.12.10
- webpack-merge: v0.7.1 → v0.7.2 - fix inclusion of removed
changelog
dependency
Fixed:
- Fall back to nwb's dependencies in Webpack config instead of using an alias so
babel-runtime
can be picked up whenoptional: ['runtime']
is used [hopefully fixing the weird/node_modules/node_modules/
issue seen in [#37]
Added:
- Added an
--auto-install
flag tonwb serve
which automatically installs npm dependencies and saves them to your package.json while developing.
Removed:
jsNext
config no longer defaults totrue
if not present.
Changed:
- Use
.x
for dependencies when generating skeleton projectpackage.json
instead of range sigils.
Dependencies:
- babel-runtime: v5.8.34 → v5.8.29 - downgraded due to a regression in typeof-react-element.js when used in conjunction with
optional: ['runtime']
- karma: v0.13.16 → v0.13.18
- karma-phantomjs-launcher: v0.2.2 → v0.2.3 - correct cli argument order
- webpack-merge: v0.7.0 → v0.7.1 - performance improvements
Fixed:
nwb build-umd
no longer errors if there is noexternals
config.
Changed:
nwb clean
now deletes thecoverage/
directory.
Dependencies:
- inquirer: v0.11.0 → v0.11.1 - fix list overflow bug
Fixed:
- Exit the process correctly with a non-zero exit code when an async command fails, such as
nwb test
[#36] [jihchi]
Dependencies:
- karma-mocha-reporter: v1.1.4 → v1.1.5 - show error message when karma runner ends with error
- webpack-merge: v0.5.1 → v0.7.0 - bug fix for merging arrays within nested structures
Dependencies:
- argv-set-env: v1.0.0 → v1.0.1 - docs
- glob: v6.0.1 → v6.0.3 - v6.0.2 was reverted
- karma: v0.13.15 → v0.13.16
- karma-mocha-reporter: v1.1.3 → v1.1.4 - handle duplicate descriptions
- karma-phantomjs-launcher: v0.2.1 → v0.2.2
- react-transform-catch-errors: v1.0.0 → v1.0.1 - display the offending call stack more prominently
- rimraf: v2.4.5 → v2.5.0 - add glob option
- webpack-merge: v0.3.2 → v0.5.1 - fix recursive merging
Fixed:
- The
es6/
directory wasn't included in the default.gitignore
for npm module project skeletons.
Added:
- Added an
nwb init
command - same asnwb new
but creates a project in the current directory and uses the directory name by default [#25] - Added a new
web-app
project type - this is for anyone who wants to use nwb's build/serve/test setup but isn't using React [#24] - Added a
--reload
option to auto-reload the page when webpack hot module replacement gets stuck. This is primarily intended for use with the newweb-app
project type. - Command-line arguments can now be used to configure settings for
nwb new
.
Fixed:
- Production optimisations weren't being applied to React app builds.
- Demo apps weren't generating sourcemaps when bundling.
- Use a non-zero exit code when displaying usage or otherwise exiting due to missing arguments [#23]
Changed:
- Reorganised and coloured
nwb help
output. - Commands which create files now log details of what they've created [#26]
- The ES6 modules build for npm modules is now optional, controlled by a
jsNext
setting innwb.config.js
, defaulting totrue
[#27]- nwb 0.6 will default
jsNext
totrue
and log a warning when it's missing from a config file - this behaviour will be removed in nwb v0.7.
- nwb 0.6 will default
Dependencies:
- copy-template-dir: v1.1.0 → v1.2.0 - provide created file paths in callback
- css-loader: v0.23.0 → v0.23.1
- expect: v1.13.3 → v1.13.4 - comparing arrays of nested objects fix
- rimraf: v2.4.4 → v2.4.5
Added:
- Top-level Webpack config can now be provided for loaders which support it, as a
config
object in theirnwb.config.js
loaders
configuration. This is intended for loaders which can't use serialisablequery
config due to plugins, such as some CSS preprocessors [#18]
Fixed:
files
config from templatepackage.json
was being used when packing nwb for publishing. Renamed them to_package.json
to avoid this [#22]
Changed:
- Downgraded qs dependency so nwb can be used with Node.js 0.12.x [#19]
Dependencies:
- copy-template-dir: v1.0.5 → v1.1.0 - rename all files beginning with
_
- expect: v1.13.0 → v1.13.3 -
Map
,Set
and circular comparison fixes - qs: v6.0.0 → v5.2.0 - downgrade to lose Node.js >= 4.0.0 requirement
Fixed:
- Bad npm package for 0.4.0 - npm was reading the new
files
config frompackage.json
in templates for React component/web module skeletons and applying it when packing nwb itself for publishing [#21]
Added:
- Added
--fallback
option tonwb serve
, for serving the index page from any path when developing React apps which use the HTML5 History API [#16] - Added
"engines": {"node": ">=4.0.0"}
topackage.json
- nwb accidentally depends on this because it uses qs v6 [#19] - Added
files
config to React component/web module skeletonpackage.json
.- The
files
config for the React component skeleton assumes that components published to npm withrequire()
calls for CSS which ships with it will use acss/
dir.
- The
- Added a default ES6 build with untranspiled ES6 module usage [#15]
- This is pointed to by
"jsnext:main"
in project skeletonpackage.json
for use by tree-shaking ES6 bundlers.
- This is pointed to by
Fixed:
- Added missing
main
config to React component/web module skeletonpackage.json
, pointing at the ES5 build inlib/
. - Express middleware wasn't included in npm package.
Changed:
- 1.0.0 is now the default version for project skeletons.
Fixed:
- Generic
nwb build
was broken for React components/web modules in 0.3.0.
Added:
- Support for CSS preprocessor plugin packages [#6]
Fixed:
- Babel config is now passed to Babel when transpiling modules [#13]
Added:
- Express middleware for running a React app on your own development server using nwb's Webpack config generation [#8]
Changed:
- Webpack loader config objects are now merged with webpack-merge; query objects will now be deep merged, with lists occurring at the same position in build and user config being concatenated instead of overwritten.
Fixed:
- babel-runtime can now be resolved from nwb's dependencies when using
optional: ['runtime']
Babel config [#10] - Paths to resources required from CSS in React app builds [#9]
First 0.x release.