You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					107 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					107 lines
				
				2.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								# 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
							 |