node package manager

node-nc

.  .       .        ,-.                 .
|\ |       |       /                    |
| \| ,-. ,-| ,-.   |    ,-. ;-. ,-. ,-. | ,-.
|  | | | | | |-'   \    | | | | `-. | | | |-'
'  ' `-' `-' `-'    `-' `-' ' ' `-' `-' ' `-'
 

About

Have you missed a good repl while developing a Node.js project?
Use node-nc to easily configure your project's console (similar to rails c).
Just type node-nc in any of your project's folder.

Installation

$ npm install -g node-nc

Usage

$ node-nc # or nc
nc > reload() // reloads all global files
nc > $module$ // the path that is required when using module
nc > module   // the module

It is intended to be used inside Node.js projects.
The nc command can also be invoked from a projects subfolder.
If used outside a project it will not globalize any file and will save history to ~/.nc_history (~/${config.historyFileName}).

nc

Details

This module extends Node.js basic repl functionality:

  • Makes all js files global
  • Makes all modules included in package.json global
  • Awaits promises (experimental).
  • Writes commands to a local history file.
  • Configurable behavior using env variables or a nc.js file.
  • Suggests params for functions and methods (experimental).

Configuration

const defaultConf = {
  useGlobal: false, // Repl useGlobal. If set to true all globals will be inside nc namespace. 
  useAsync: true, // Experimental use of await in repl. 
  globalizeFiles: true, // Make all project files global. 
  globalizeDependencies: true, // Globalize projects dependencies. 
  useNcFile: true, // Use nc.js file if it exists. 
  usePackageFile: true, // Use package file to determine prompt, root folter and dependencies. 
  writeHistoryFile: true, // Write all commands to a file. 
  historyFileName: '.nc_history', // The history filename. An absolute path can also be given. 
  suggestParams: true // Experimental suggestion of params when calling a function 
};

Configuration can be overwitten

  • by env variables:

    NC_USE_GLOBAL, NC_USE_ASYNC, NC_GLOBALIZE_FILES, NC_GLOBALIZE_DEPENDENCIES, NC_USE_NC_FILE, NC_USE_PACKAGE_FILE, NC_WRITE_HISTORY_FILE, NC_HISTORY_FILE_NAME, NC_SUGGEST_PARAMS or

  • by using an nc.js file. This file can also be used to make some project initializations Eg. connect to a database, declare some global vars etc. In nc.js a method setConfig(options) is available to overwrite the default configurations. Note that NC_USE_NC_FILE env variable must not be false.

    Example of a simple nc.js file:

     
      // overwrite useGlobal 
      setEnv({ useGlobal:true });.
     
      // connect to db 
      mongoose.connect(mongooseDb, options, function (err, data) {});

Using await

If you have a very complicated expression (many nested expresssions) it is better to split it in two:

// Bad 
await Compicated-Epression
 
// Good 
const promise = Complicated-expression
await promise;

This way await will work as expected.

Function Parameter Suggestions

When you type a parenthesis repl will try to figure out if the previous expression is a function and suggest its parameters.

Build in profiler

Test a function's performance using the buildin profiler. The function can return a promise.

node-nc> profiler(() => fib(10))
Function ()=> fib(10) ran 40,770 times in 995.99 ms
 
node-nc> await profiler(() => fib(20))
Function ()=> fib(20) ran 328 times in 942.71 ms
 
node-nc> await profiler(() => Promise.resolve(true), () => {})
Run function ()=> Promise.resolve(true) 171,784 times in 1020.95 ms
Run function ()=>{} 111,795,737 times in 1007.90 ms