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

shell-source

v1.1.0

Published

Source environment variables from a shell script into a Node.js process.

Downloads

6,462

Readme

shell-source

Source environment variables from a shell script into a Node.js process.

npm tests coverage

Dragons:

Since sourcing a shell script allows it to execute arbitrary code, you should be 100% sure its contents are not malicious!

Why

You have some configuration data stored in a sourcable shell script, but need access to that data from a JavaScript program. You could try to parse the file as text, but that would only work if the script does not execute code or expand any variables.

How

Spawns the process owner's default shell and executes a POSIX compliant wrapper script that in turn sources the file of your choosing. The wrapper then calls printenv which writes the child process' updated environment to stdout. The parent (Node.js) process then parses this output and updates process.env.

Example

Consider the script below that needs to execute code before its variables can be evaluated:

export SERVER_HOST="$(hostname)"
export SERVER_PORT="$(grep -m1 '# HTTP Alternate' < /etc/services | sed 's/[^0-9]*\(.*\)\/.*/\1/')"
export PATH="node_modules/.bin:$PATH"

A Node.js process can use shell-source to emulate the behavior of sh's . built-in, executing the script before absorbing any enviroment changes it effects:

var source = require('shell-source');

source(__dirname + '/env.sh', function(err) {
  if (err) return console.error(err);

  console.log(process.env.SERVER_HOST); // ::
  console.log(process.env.SERVER_PORT); // 8080
  console.log(process.env.PATH);        // node_modules/.bin:/usr/local/bin
});

Install

$ npm install shell-source

Test

$ npm test

Require

var source = require('shell-source');

Use

source(filepath, [opts,] callback);

  • filepath The full path to the shell script that should be sourced.
  • opts An options object which can contain:
    • source A boolean. Defaults to true. If set to false, the callback can receive the evironment object as its second argument and process.env will be left unmolested.
    • wrapper Use your own wrapper script. source.sh is used by default.
    • reserved An object to merge with the default blacklist where SHLVL and _ are already set to true.
  • callback A callback with signature:
function(err, environment) {
  // console.log(err, environment);
}

Notes

Obviously it would be nice if this could be done synchronously. However, until something like this lands on stable, I'm not sure if there is a sane way to accomplish it. If there is, please let me know.

Releases

The latest stable release is published to npm. Tarballs for each release can be found here.

  • 1.1.0
  • xtend is not a dev dependency (thanks @sparkleholic)
  • 1.0.x
  • First release.

License

Copyright © 2014 Jesse Tane [email protected]

This work is free. You can redistribute it and/or modify it under the terms of the WTFPL.

No Warranty. The Software is provided "as is" without warranty of any kind, either express or implied, including without limitation any implied warranties of condition, uninterrupted use, merchantability, fitness for a particular purpose, or non-infringement.