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

namespacer-js

v0.2.1

Published

Generic file-based namespacing for nodejs

Readme

Namespacer-js

The namespaces you always wanted but never asked for

Build Status Coverage Status

Namespacer is a simple library that aliases namespaces into filepaths without having to deal with including folders into your NODE_PATH or anything like that. It also allows you to create namespaces programaitcally.

It's simple, when you load your spaces file it assumes it's based off of your current module root, at the same level as your node_modules folder.

Currently it follows the PSR-4 because I have yet to create a javascript spec for loading namespaces neatly and include options for glob loading.

A namespace can be created from any object as long as it follows the format of the key being the namespace where the value is the location on the file system relative to the .spaces.js file.

#.spaces.js
'use strict';

module.exports = {
    'NS/': 'Namespace/',
    'NS/Config': 'Namespace/Something/Config'
};

It is also possible to dynamically decide what folder your namespace leads to, for example if you wanted to have specific configuration files given in an environment you can structure your spaces like so.

#.spaces.js
'use strict';

module.exports = {
    'ENV/': `config/${process.env.NODE_ENV}`
};

To load an environment you can give namespacer a relative or absolute path to your spaces file, or an object of namespaces. If passed a straight object it will guess at your root being the node execution root. If namespaces are passed from a file the all namespaces are relative to the location of the spaces file.

If your spaces file is in <root>/config/.spaces.js and it defines 'NS/foo' => 'foo' the mapped path is <root>/config/foo. Simply define the namespace as 'NS/foo' => '../foo' to resolve the issue or require the namespace configuration as an object and set the root as the root of the application.

//Include namespace however you want, via an instance or static
//Instanced
const Namespace = require('namespacer-js');
//Static
const {namespace} = require('namespacer-js');
//Load namespace from object mapping the results to root
namespace.addSpacesFromObject({'NS/': 'config/'}, path.resolve('./'));
namespace.addSpacesFromObject(require('./.spaces.js'), path.resolve('./'));
//Load namespace from default spaces file, looks for .spaces.js before .spaces.json
namespace.addSpacesFromFile();
//Load namespace from relative path to spaces file
namespace.addSpacesFromFile('../.spaces.js');

//Load namespace from absolute path to spaces file
namespace.addSpacesFromFile(path.resolve('./.spaces.js'));