npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-sys

v1.2.4

Published

Universal package installer, get the command for managing packages, or auto install any package, using one command for all platforms. Automate the installation of macOS Brew, and Windows Chocolatey package managers. A promisify child process of spawn, and

Downloads

1,333

Readme

node-sys

NPM

Dependencies Status Node.js CI codecov Maintainability Release

Universal package installer, get the command for managing packages, or auto install any package, using one command for all platforms. E.g. sudo apt-get install !@#$software for Debian-based systems, would be node-sys !@#$software.

This is mainly focused on initial installation of an Node JS packages that needs additional host software installed. This allows pre and post script install routines. Can also automate the installation of macOS Brew, and Windows Chocolatey package managers.

node-sys will try to find which system packaging is installed for the given process.platform. If no system package manager is found, 'No package manager found!' is returned.

A spawning cross-platform version of Node's child_process.spawn that returns a Promise, with additions:

  • easily execute as administrator, on Windows a pop up UAC window will appear.
  • pass callbacks, for stderr and stdout on data events, any returns will be the reject/resolve result.
  • fork another script, a Node Js module instance, for additional sub processing base on stderr or stdout events.
    • pass additional callback for the message event.

A series of general use case strick type checkers.

Install

npm install node-sys

Usage

import { packager } from 'node-sys';

/**
 * Gets the system package manager install command.
 *
 * - 'brew install' on OS X if homebrew is installed.
 * - 'sudo apt-get install' on debian platforms.
 * - 'sudo yum install' on red hat platforms.
 * - 'System OS package manager not found' if no package manager is found.
 *
 * Throws if `process.platform` is none of darwin, freebsd, linux, sunos or win32.
 */
const sys = packager();

console.log('Do system OS require sudo? ' + sys.sudo);
console.log('The system OS install command: ' + sys.command);
console.log('To fully install a `pandoc` package run: ' + sys.installer + ' pandoc');

Install vim package onto host, using system's default package manager

  • Returns a Promise
import { installer } from  'node-sys';

// Progress callback for any output doing installation.
// Any value returned in `callback` will be the final resolved output result.
const onprogress = (object) => {
  console.log(object.output);
}

installer('vim', onprogress)
.then(function(data){
    // returns installation output
    console.log(data);
})
.catch(function(err) {
    console.log(err);
});

API - spawning(command, arguments, progressOptions, options)

import { spawning } from 'node-sys';

Spawning takes an additional argument, progressOptions, its options are the same as those of child_process.spawn plus:

 sudo: boolean, // run as administrator
 fork: string, //  execute an additional module, of Node Js process `fork` IPC communication channel.
 onerror: callable, // callback for `stderr.on('data')` event.
 onprogress: callable, // callback for `stdout.on('data')` event.
 onmessage: callable, // callback for `on('message')` for `fork` event.

Spawning returns a promise whose result will be any output or any data return in the progress callback.

The progress callback will receive an object with these properties:

  • spawn: Object - Spawned child process instance handle.

    • Access the child process object.
  • output: String - Output from stdout.

    • Output can be altered and if returned will replace the otherwise resolved result.
  • fork: Object - An additional forked Node Js process handle, IPC communication channel.

    • Execute additional processing base off of sub child process output, with module a script.

If there's an error running the child process, received data on stderr, or errors in progress callback, spawning rejects the returned promise.

General strict type check functions

import {
  isArray, // True if value is an Array, otherwise false.
  isUndefined, // True if the value is undefined, otherwise false.
  isBuffer, // True if value is a Buffer, otherwise false.
  isArrayBuffer, // True if value is an ArrayBuffer, otherwise false.
  isString, // True if value is a String, otherwise false.
  isNumber, // True if value is a Number, otherwise false.
  isObject, // True if value is an Object, otherwise false.
  isObjectOnly, // True if value is a `Object` only, otherwise false, not an Array, Function, or any other type.
  isBlob, // True if value is a Blob, otherwise false.
  isFunction, // True if value is a Function, otherwise false.
  isDate, // True if value is a Date, otherwise false.
  isStream, // True if value is a Stream, otherwise false.
  isNull, // True if value is a null, otherwise false.
  isBool, // True if value is a boolean, otherwise false.
  isWindows, // True if platform a Windows OS, otherwise false.
  isLinux, // True if platform a Linux OS, otherwise false.
  isMac, // True if platform a Apple macOS, otherwise false.
} from 'node-sys';

Find any executable

The sync from node-which has been exported to where.

import { where } from 'node-sys';

// Like the unix `which` utility, will be a `string`, or `null` for not found.
let found = where('node');

Use CommonJS require like before in ESM

import { require } from 'node-sys';

const package = require('package');

CLI Usage

npm i -g node-sys

To display your system package manage command.

$ node-sys
brew install

To actually install an system package.

$ node-sys vim
installing...

To install an System OS package manager.

  • Will install chocolatey for Windows OS
  • Will install brew for Apple macOS
$ node-sys -g | --get # or npm run get-installer
...

Supported package managers

FreeBSD

Linux

OS X

Solaris

Windows