JSPM

  • Created
  • Published
  • Downloads 23082482
  • Score
    100M100P100Q227713F
  • License MIT

Intuitive, plugin-based prompt system for node.js. Much faster alternative to Inquirer, with all the same prompt types and more.

Package Exports

  • enquirer
  • enquirer/lib/utils

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (enquirer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

enquirer NPM version NPM downloads Build Status

Intuitive, plugin-based prompt system for node.js. Much faster alternative to Inquirer, with all the same prompt types and more.

Table of Contents

(TOC generated by verb using markdown-toc)

Install

Install with npm:

$ npm install --save enquirer

What is this?

This is a faster, lighter, plugin-based alternative to inquirer, with support for all of the same prompt types and features.

Why another prompt modules?

We use prompts extensively in generate, verb, update and assemble, and other libries we maintain, and we wanted to improve the user experience and reduce dependencies associated with other libraries we tried, like Inquirer.

Initial load time

Enquirer takes ~11ms to load. This is about the same amount of time that it takes chalk to load.

By comparison, Inquirer takes ~120ms just to load!!! This is about how long it takes babel, or other massive libraries that you would never include in production code.

Regardless of whether or not a prompt is every actually used, your own application will be 120ms slower from having Inquirer in its dependency tree. This is caused by its own massive dependency tree, code redundancy, monolithic and slow [reactive interface][] (which makes little sense for this use case anyway), poor API design (Inquirer actually executes code, even if you never call the library!), and so on.

120ms might not seem like a lot, but there is a critical threshold where performance of an application begins to feel laggy, and this cuts into that threshold significantly, leaving less room for everything else.

Usage

var enquirer = require('enquirer');

API

Enquirer

Create an instance of Enquirer with the given options.

Params

  • options {Object}

Example

var enquirer = new Enquirer();

.register

Register a new prompt type with the given fn.

Params

  • type {String}: The name of the prompt type
  • fn {Function}: Prompt function that inherits from enquirer-prompt.
  • returns {Object}: Returns the Enquirer instance for chaining.

Example

enquirer.register('confirm', require('enquirer-prompt-confirm'));

.use

Invoke a plugin fn

Params

  • fn {Function}: Function that takes an instance of Enquirer
  • returns {Object}: Returns the instance for chaining.

Example

enquirer.use(require('some-enquirer-plugin'));

.question

Create question name with the given message and options. Uses enquirer-question, visit that library for additional details.

Params

  • name {String|Object}: Name or options object
  • message {String|Object}: Message or options object
  • options {Object}
  • returns {Object}: Returns the created question object

Events

  • emits: question

Example

var question = enquirer.question('name', 'What is your name?');

.ask

Initialize a prompt session for one or more questions.

  • returns {Array|Object} questions: One or more question objects or names of registered questions.

Events

  • emits: ask With the array of questions to be asked

Example

enquirer.question('first', 'First name?');
enquirer.question('last', 'Last name?');

enquirer.ask('first')
  .then(function(answers) {
    console.log(answers)
  });

.prompt

Initialize a prompt session for a single question. Used by the ask method.

Params

  • name {String}

Events

  • emits: prompt with the default value, key, question object, and answers object
  • emits: answer with the answer value, key, question object, and answers object

Example

enquirer.question('first', 'First name?');
enquirer.prompt('first')
  .then(function(answers) {
    console.log(answers)
  });

Prompt types

What is a prompt "type"?

Prompt types determine the type of question, or prompt, to initiate. Currently, the only prompt type included in enquirer is input.

The following types are all available as plugins:

  • checkbox ([enquirer-prompt-checkbox][])
  • confirm ([enquirer-prompt-confirm][])
  • editor ([enquirer-prompt-editor][])
  • expand ([enquirer-prompt-expand][])
  • input (enquirer-prompt-input) (included in enquirer by default)
  • list ([enquirer-prompt-list][])
  • password ([enquirer-prompt-password][])
  • radio ([enquirer-prompt-radio][])
  • rawlist ([enquirer-prompt-rawlist][])

Or you can use [enquirer-prompts][], if you want a bundle with all of the listed prompt types.

Publishing prompt types

Prompt modules are named using the convention enquirer-prompt-*.

TBC

Plugins

TODO

Publishing plugins

Plugin modules are named using the convention enquirer-*.

TBC

About

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

Please read the contributing guide for avice on opening issues, pull requests, and coding standards.

Building docs

(This document was generated by verb-generate-readme (a verb generator), please don't edit the readme directly. Any changes to the readme must be made in .verb.md.)

To generate the readme and API documentation with verb:

$ npm install -g verb verb-generate-readme && verb

Running tests

Install dev dependencies:

$ npm install -d && npm test

Author

Jon Schlinkert

License

Copyright © 2016, Jon Schlinkert. Released under the MIT license.


This file was generated by verb-generate-readme, v0.1.30, on August 28, 2016.