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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@hexide-digital/node-deployer

v1.1.1

Published

Deploy source to target server via ssh2 protocol.

Readme

Node Deployer

This is a lightweight deployment tool for frontend projects based on ssh2 protocol.

Features

  • Execute linux command on remote server
  • Rotate releases folders
  • Upload files from dist directory to release folder
  • Default recipes for simple deployment

Inspired by

How to install

$ npm i @hexide-digital/node-deployer --save-dev

Usage

nodep [task] [arguments]

nodep init --stage=dev

Options

  • -v, --version - print current version
  • -h, --help - print this help message
  • -s, --stage - server stage
  • -c, --config - config file

Default tasks

  • init - generate initial deployer directory
  • echo - run simple echo command to ping servers

Configurations

Recipes

Recipe is a set of the commands and default settings. Recipe 'Deploy' extends recipe 'Common' and contains a list of commands:

dep.task('default', [
    'deploy.prepare',
    'deploy.lock',
    'deploy.release',
    'deploy.symlink',
    'deploy.cleanup',
    'deploy.unlock',
    'success',
  ]);

Tasks

Task is the special linux command to excute. Default package task can be overwritten with local file with the same name. Each task can be a closure function (with one argument - client), object with other tasks or string with file name.

Proxy

This package currently does not support proxy

Server

Events

  • ready: when all clents connected, this event will be fire.
  • done: All task completed.

Methods

  • servers(< object >servers): add remote servers list.
  • task(< string >name, < object >closure, < object >options): add new task
  • set(< string >name,< object >options): set variable
  • get(< string >name): get variable
  • run(< string >task): run a remote server.

Variables

You can use default or custom variables in commands

dep.set('source_directory', path.resolve('./build'))

...

client.test('[ -d ${deploy_path}/releases ] && [ "$(ls -A ${deploy_path}/releases)" ]')

Examples

const fs = require('fs')
const path = require('path')

module.exports = (dep) => {

  dep = require('@hexide-digital/node-deployer/lib/recipes/deploy')(dep)

  dep.servers(
    [
      {
        'name': 'servername',
        'stage': 'dev',
        'releasePath': '/var/www',
        'connectOptions': {
          'host': '127.0.0.1',
          'port': 22,
          'username': 'root',
          'privateKey': fs.readFileSync(path.resolve('.ssh/id_rsa'))
          // "password": "123456"
        }
      }
    ]
  )

  return dep
}

Todo

This package is still in beta. Please, send your requests. I'll apply them asap. First thing needed to be done is files upload. Probably best choice would be archive all files in dist directory into single file, upload it to remote server and unzip it. For now each file uploads separately one by one. That is OK for small project but may be headache.