Installing nwb provides the following commands:
-
nwb- project tooling -
nwb serve- start a development server- Options - development server options
nwb build- create a build- React/Inferno/Preact/vanilla JS app builds
--no-vendor- disable creation of separate bundles for JS and CSS fromnode_modules/
- React app builds
- React component/library and web module builds
--no-demo- disable building the demo app--[keep-]proptypes- don't strip ReactPropTypesfrom production builds--copy-files- copy non-.jsfiles when building
- React/Inferno/Preact/vanilla JS app builds
nwb test- run unit tests
-
nwb react,nwb inferno,nwb preactandnwb web- quick development commands- See the Quick Development with nwb guide
The nwb command handles development of projects.
Options:
-c, --config- path to a config file [default: nwb.config.js]
The following sub-commands are available:
These provide a workflow for getting started with a new project using the conventions nwb expects.
Create a project skeleton in a new directory.
nwb new <project_type> <name>
The name argument must not be an existing directory.
nwb new react-app <dir-name>
Creates a skeleton project for a React app in the specified directory.
nwb new preact-app <dir-name>
Creates a skeleton project for a Preact app in the specified directory.
nwb new inferno-app <dir-name>
Creates a skeleton project for an Inferno app in the specified directory.
nwb new react-component <dir-name> [options]
Creates a skeleton project for a React component or library, ready for publishing to npm.
nwb new web-app <dir-name>
Creates a skeleton project for a plain JavaScript app in the specified directory.
nwb new web-module <dir-name> [options]
Creates a skeleton project for a JavaScript module for use on the web, ready for publishing to npm.
-f, --force- force creation of the new project without asking any questions, using whichever default settings are necessary as a result.
Passing all available options will automatically skip asking of setup questions.
--es-modules- explicitly enable or disable (with--no-es-modules) an ES modules build--no-git- disable creation of a Git repo with an initial commit--umd=<var>- enable a UMD build by providing a global variable name to be exported
--react- set the version of React which will be installed. For apps, this defaults to the latest available version. For components, this is also used as apeerDependenciesversion, defaulting to whatever the major version of React was when the version ofnwbyou're using was released.
--preact- set the version of Preact which will be installed. Defaults to the latest available version.
--inferno- set the version of Inferno which will be installed. Defaults to the latest available version.
Initialise a project skeleton in the current directory.
nwb init <project_type> [name]
This is the same as new, except the name argument is optional and the new project is initialised in the current directory.
If name is not provided, the name of the current directory will be used.
Project skeletons created by nwb include npm run scripts in package.json to run the appropriate nwb commands for that type of project, so you shouldn't have to manually use the nwb commands documented below in most cases.
Note: to pass additional arguments to an
npm runcommand, you must pass a--argument first to indicate the following arguments are for the script, not for npm itself:npm run build -- --no-demo
The following commands require a configuration file to specify the appropriate type config so nwb knows what to do when they're run - if you always use a config file, you should only have to learn these commands regardless of which type of project you're working on (project skeletons include a config file by default to enable this).
Starts a development server which serves an app with Hot Module Replacement.
nwb serve [entry]
- JavaScript and CSS changes will be applied on the fly without refreshing the page.
- Syntax errors made while the development server is running will appear as an overlay in your browser.
- By default, rendering errors in React components will also appear as an overlay.
Passing an argument for entry allows you to customise the entry point for your React or web app.
--install- automatically install missing npm dependencies (and save them topackage.jsonif present)--host- change the hostname the dev server binds to [default: not specifying a host when starting the dev server]--no-clear- don't clear the console when displaying build status--no-fallback- disable fallback serving of the index page from any path--fallback.disableDotRule- allow fallback serving of URLs which contain dots, e.g.localhost:3000/sites/example.com--open- open a browser when the dev server starts; pass an--openflag for your default browser or pass a browser name, e.g.--open="Google Chrome"--port- change the port the dev server runs on [default: 3000]--reload- auto-reload the page when webpack gets stuck
React app/component options:
--no-hmr- disable use of React Refresh Webpack Plugin to attempt to automatically handle Hot Module Replacement for React components - if you want to use HMR, you will have to accept updates manually
In Inferno and Preact apps:
These apps are pre-configured to use their React compatibility layer if React is imported, so you can try to re-use existing React components out of the box.
In other web apps:
When run in a web-app project, serve will serve the app with Hot Module Replacement (HMR) and display of syntax errors as an overlay, but you will have to manually configure your JavaScript code if you wish to make use of HMR.
If you pass a --reload option, the HMR client will refresh the page any time a JavaScript change was made and it was unable to patch the module. This may be a better option if your app isn't suitable for HMR.
In React component modules:
When run in a react-component project, serve will serve the component's demo app.
A demo app is essential to show people what your component can do - as React Rocks says: online demo or it didn't happen!
Having a demo which uses your component is also a great way to test it as you prototype and build, quickly seeing what does and doesn't work before committing to a test.
Create a build.
nwb build [entry] [dist_dir]
Passing arguments for entry and dist_dir allows you to customise the entry point for your app and the directory it gets build into.
Default behaviour:
- A static build will be created in
dist/, with app.jsand.cssfiles plus any other resources used. - As part of the static build an
.htmlpage will be included indist/. You can disable this by passing a--no-htmlflag. - Separate vendor
.jsand.cssfiles will be built for any dependencies imported fromnode_modules/. - Static builds are created in production mode. Code will be minified and have dead code elimination performed on it (for example to remove unreachable, or development-mode only, code).
- To support long-term caching, generated
.jsand.cssfilenames will contain a deterministic hash, which will only change when the contents of the files change.
To create a development build, set the NODE_ENV environment variable to 'development' when running the build command:
# *nix
NODE_ENV=development nwb build
# Windows
set NODE_ENV=development&& nwb build
Feature Toggles:
Disable creation of vendor.js and vendor.css files for dependencies imported from node_modules/
In production mode builds, the Babel react-remove-prop-types transform will be used.
When building React apps, you can also pass a --preact flag to configure Webpack to use Preact via preact/compat module, or an --inferno flag to configure Webpack to use Inferno via the inferno-compat module.
If your app and its dependencies are compatible, this can be a quick and easy way to reduce the size of your app.
These apps are pre-configured to use their React compatibility layer if React is imported, so you can try to re-use existing React components out of the box.
You'll only pay the cost of including the compatibility layer in your bundle if you import something which uses React.
Builds for publishing to npm.
- A build which uses CommonJS modules will be created in
lib/ - By default, a build which uses ES modules will also be created in
es/ - If enabled via configuration, UMD builds for global
<script>tag usage will be created inumd/
Feature Toggles:
If the module has a demo/ directory, running build will also create a static build of its demo app in demo/dist/. You can disable this by passing a --no-demo flag. If you need to use static content in the demo app, the demo build supports use of a demo/public/ directory.
React components will have any propTypes they declare wrapped an process.env.NODE_ENV !== 'production' check, so they will be removed by dead-code elimination in the production build of any apps they're used in. You can disable this by passing a --[keep-]proptypes flag.
If you have non-JavaScript files in src/ which you want to be copied over when building, such as CSS or JSON files, pass a --copy-files flag.
Delete built resource directories.
nwb clean [dist_dir]
For React and web apps, passing an argument for dist_dir allows you to customise the output directory which will be deleted.
The following commands don't require an nwb.config.js file to specify a project type, but it may be required for other configuration depending on the command.
Run unit tests.
nwb test [options]
Options:
--server- keep the Karma server running and re-run tests on every change. Whether you're writing tests up front or catching up after you're happy with what you've created so far, having them run on every change makes testing more fun.--coverage- create a code coverage report incoverage/
In React component modules:
Running the test server in tandem with a hot reloading demo app, you can quickly protoype and test your components.
Project type-specific versions of build, clean and serve commands are also available.
These are used in the npm scripts section of package.json in project skeletons, so the nwb.config.js file they include by default can be deleted if you don't need configuration.
-
build-demo- build a React component's demo app fromdemo/src/index.jstodemo/dist/ -
build-inferno-app [entry] [dist_dir]- build an Inferno app fromentry[default:src/index.js] todist_dir[default:dist/] -
build-preact-app [entry] [dist_dir]- build a Preact app fromentry[default:src/index.js] todist_dir[default:dist/] -
build-react-app [entry] [dist_dir]- build a React app fromentry[default:src/index.js] todist_dir[default:dist/] -
build-react-component- create an ES5 build, an ES modules build and, if configured, a UMD build for a React component -
build-web-app [entry] [dist_dir]- build a web app fromentry[default:src/index.js] todist_dir[default:dist/] -
build-web-module- create an ES5 build, an ES modules build and, if configured, a UMD build for a browser-focused npm module -
clean-app [dist_dir]- deletedist_dir[default:dist/] -
clean-demo- deletedemo/dist/ -
clean-module- deletecoverage/,es/andlib/ -
serve-inferno-app [entry]- serve an Inferno app fromentry[default:src/index.js] -
serve-preact-app [entry]- serve a Preact app fromentry[default:src/index.js] -
serve-react-app [entry]- serve a React app fromentry[default:src/index.js] -
serve-react-demo- serve a React component's demo app fromdemo/src/index.js -
serve-web-app [entry]- serve a web app fromentry[default:src/index.js]
Checks your nwb config file for errors and deprecated usage, and provides usage hints where appropriate (e.g. if there's a more convenient way provided to set certain configuration, or if it's unnecessary)
nwb check-config [config] [options]
Arguments:
config- path to the config file to check [default: nwb.config.js]
Options:
--command- command name to use when loading your config. Use this to test variations if you export a config function and use thecommandoption it provides when creating your config.--e, --env-NODE_ENVto use when checking your config:dev/development,testorprod/production. Use this to test variations if you useprocess.env.NODE_ENVwhen creating your config.
These commands provide quick development, starting from a single .js file and working up.
See Quick Development with nwb for details.