Spaces:
Running
Running
# MZ - Modernize node.js | |
[![NPM version][npm-image]][npm-url] | |
[![Build status][travis-image]][travis-url] | |
[![Test coverage][coveralls-image]][coveralls-url] | |
[![Dependency Status][david-image]][david-url] | |
[![License][license-image]][license-url] | |
[![Downloads][downloads-image]][downloads-url] | |
Modernize node.js to current ECMAScript specifications! | |
node.js will not update their API to ES6+ [for a while](https://github.com/joyent/node/issues/7549). | |
This library is a wrapper for various aspects of node.js' API. | |
## Installation and Usage | |
Set `mz` as a dependency and install it. | |
```bash | |
npm i mz | |
``` | |
Then prefix the relevant `require()`s with `mz/`: | |
```js | |
var fs = require('mz/fs') | |
fs.exists(__filename).then(function (exists) { | |
if (exists) // do something | |
}) | |
``` | |
With ES2017, this will allow you to use async functions cleanly with node's core API: | |
```js | |
const fs = require('mz/fs') | |
async function doSomething () { | |
if (await fs.exists(__filename)) // do something | |
} | |
``` | |
## Promisification | |
Many node methods are converted into promises. | |
Any properties that are deprecated or aren't asynchronous will simply be proxied. | |
The modules wrapped are: | |
- `child_process` | |
- `crypto` | |
- `dns` | |
- `fs` (uses `graceful-fs` if available) | |
- `readline` | |
- `zlib` | |
```js | |
var exec = require('mz/child_process').exec | |
exec('node --version').then(function (stdout) { | |
console.log(stdout) | |
}) | |
``` | |
## Promise Engine | |
`mz` uses [`any-promise`](https://github.com/kevinbeaty/any-promise). | |
## FAQ | |
### Can I use this in production? | |
Yes, Node 4.x ships with stable promises support. For older engines, | |
you should probably install your own promise implementation and register it with | |
`require('any-promise/register')('bluebird')`. | |
### Will this make my app faster? | |
Nope, probably slower actually. | |
### Can I add more features? | |
Sure. | |
Open an issue. | |
Currently, the plans are to eventually support: | |
- New APIs in node.js that are not available in older versions of node | |
- ECMAScript7 Streams | |
[bluebird]: https://github.com/petkaantonov/bluebird | |
[npm-image]: https://img.shields.io/npm/v/mz.svg?style=flat-square | |
[npm-url]: https://npmjs.org/package/mz | |
[github-tag]: http://img.shields.io/github/tag/normalize/mz.svg?style=flat-square | |
[github-url]: https://github.com/normalize/mz/tags | |
[travis-image]: https://img.shields.io/travis/normalize/mz.svg?style=flat-square | |
[travis-url]: https://travis-ci.org/normalize/mz | |
[coveralls-image]: https://img.shields.io/coveralls/normalize/mz.svg?style=flat-square | |
[coveralls-url]: https://coveralls.io/r/normalize/mz?branch=master | |
[david-image]: http://img.shields.io/david/normalize/mz.svg?style=flat-square | |
[david-url]: https://david-dm.org/normalize/mz | |
[license-image]: http://img.shields.io/npm/l/mz.svg?style=flat-square | |
[license-url]: LICENSE | |
[downloads-image]: http://img.shields.io/npm/dm/mz.svg?style=flat-square | |
[downloads-url]: https://npmjs.org/package/mz | |