havunen
v1.3.6
Published
[![Build Status][travis-image]][travis-url] [![Coverage Status][coverage-image]][coverage-url] [![NPM version][npm-image]][npm-url] [![npm downloads](https://img.shields.io/npm/dm/havunen.svg)](https://www.npmjs.org/package/havunen)
Downloads
98
Readme
ES2015 boilerplate for creating libraries with the Rollup.
Features
- ES6 with Babel for ES6 and ES7
- Rollup for bundling and unit tests
- Stub let you stub module exports at runtime when bundling with Rollup.
- Rewire enables options to mock modules for testing purposes.
- Sinon.JS with examples for test doubles
- Chai as Promised extends Chai with a fluent language for asserting facts about promises.
- Eslint to maintain a consistent code style
- Typescript support with Rollup and JSX
- Flow for quickly find errors in JavaScript applications
- Karma as the test runner
- Universal Module Definition (UMD) API, which provides compatibility with the most popular script loaders, to the output.
- jsdom for server tests
- Unit tests written with ES2015 get transpiled on the fly
- Node >= 5.x
Quick start
The only development dependency of this project is Node.js. So just make sure you have it installed. Then type few commands known to every Node developer...
$ git clone https://github.com/kflash/havunen.git
$ cd havunen
$ npm install # Install Node modules listed in ./package.json
$ npm run build # Build a minified and a non-minified version of the library
... and boom! You have it all setup for you!
Workflow
npm run build
- Build task that generates both minified and non-minified scriptsnpm run build:prod
- Build task that generate a minified scriptnpm run build:dev
- Build task that generate a non-minified scriptnpm run lint:source
- Lint both source and unit test filesnpm run lint:source
- Lint the sourcenpm run lint:tests
- Lint the unit testsnpm run clean
- Remove the coverage report - and the dist foldernpm run test
- Runs unit tests for both server and the browsernpm run test:browser
- Runs the unit tests for browsernpm run test:server
- Runs the unit tests on the servernpm run server:cov
- Run Isparta, a code coverage tool;npm run server:cov:publish
- Publish coverage report to a remote website;npm run karma:chrome
- Runs the unit tests for browser with Chromenpm run karma:firefox
- Runs the unit tests for browser with Firefoxnpm run watch:server
- Run all unit tests for server & watch files for changesnpm run watch:browser
- Run all unit tests for browser & watch files for changesnpm run watch:chrome
- Run all unit tests for browser with Chrome & watch files for changesnpm run packages
- List installed packagesnpm run packages:purge
- Remove all dependenciesnpm run packages:reinstall
- Reinstall all dependenciesnpm run packages:check
- shows a list over dependencies with a higher version number then the current one - if anynpm run packages:upgrade
- Automaticly upgrade all devDependencies & dependencies, and update package.json
Testing environment
This project uses Mocha to run your unit tests, it uses Karma as the test runner, it enables the feature that you are able to render your tests to the browser (e.g: Firefox, Chrome etc.).
To add a unit test, simply create a .specd.js
file inside the ~../test/specs/
folder. Karma will pick up on these files automatically, and Mocha and Chai will be available within your unit tests without the need to import them.
To run the tests in the project, just simply npm run test
for both server and client unit tests, or npm run test:server
. for server or npm run test:browser
. for browser tests.
To keep watching the common test suites that you are working on, simply do npm run watch:browser
or npm run watch:server
.
Adding other test files
- Browser:, simply open up the
karma.conf.js
file in the~/config
folder and add your files to thefiles:
andpreprocessors:
section. - NodejS: open up the
~/config/mocha.opts
file and add your files to the top of the file.
JSX
Only syntax parsing are supported. If you want to transform JSX you need to add a JSX transformer plugins for it. E.g babel-plugin-transform-react-jsx
for React support.
Flow
Both parsing and transformation of Flow comments are supported by this boilerplate.
Rewire
Rewire is supported through the babel-plugin-rewire
plugin. It is useful for writing tests, specifically to mock the dependencies of the module under test.
Examples and tests are included.
Sinon
Sinon.JS is also set up for test doubles - see BatClass.common.js
for examples of both Sinon and Rewire using ES6 classes.
Coveralls
This library is set up to integrate with Coveralls, and will automaticly publish your coverage report to coveralls.io if you have created an account there.
##Rollup
Rollup are used as the library bundler. It produces a cleaner and more lightweight source code then what you get with for example webpack and browserify.
Package management
Havunen has build-in some nice features to always make sure your dependency tree are up to date.
To check for the latest dependencies, simply run npm run package:check
.
If you want to update your packages, you can simply do npm run package:upgrade
.
Note! Your package.json
will be automatically updated so make sure you have saved your changes before running this.
To reinstall all packages, do npm run package:reinstall
, and to remove all packages npm run package:purge
.
Pre-commit
This boilerplate uses a pre-commit hook to ensure that your npm test (or other specified scripts) passes before you can commit your changes. This all conveniently configured in your package.json.
jsDOM
jsdom are used to set up React.js components' testing harness under Node.js, based on the amazing jsdom. Also a couple of bugs related to React is fixed.
Linting
ESLint are used to lint your source. To change the rules, edit the .eslintrc file in the root directory, respectively.
Installation
Download the package, and run this from the command line:
npm install
License
The MIT License (MIT)
Copyright (c) 2016 KFlash
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.