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

blocnode

v0.18.0

Published

Simple

Readme

Blocnode

Blocnode is a little library constructor that help dev to organise there code in a namespaced library.

The idea is to have a full namespace in our application and make loading module very simple. In other way it's also possible to use the module in a standalone mode with the proper code.

Creating the namespace

// Creating the bloc
let Library = new Blocnode();
// Creating a class to include
class MyClass {}
// Include the class
Library.namespace('My.Test.Path').MyClass = MyClass;

Creating a module

In FileOne.js :

/**
 * When creating a module, be sure to have the library in parameter.
 * An empty lib or an instance already declared
 */
module.exports = (function(Library = new (require('blocnode'))()) {
    // Creating a class to include
    class MyClass {}
    // Include the class
    Library.namespace('My.Test.Path').MyClass = MyClass;
    // Creating a value like constant or variable
    const MyConstant = "My Beautifull CONST";
    // Include the value
    Library.namespace('My.Test.Path').MyConst = MyConstant;
 
    return Library;
});

In index.js

// Creating the new Library and including the modules in it.
let Blocnode = new (require('blocnode'))([
    './FileOne.js',
    'my-node-module-npm-name'
]);

// expecting : My Beautifull CONST
console.log(Blocnode.My.Test.Path.MyConst);

In standalone

If you just want to use your module in stand alone mode, you can use it like this :

In standalone.js

// Creating the new Library and including the modules in it.
let MyModule = (require('./FileOne.js'))();
// expecting : My Beautifull CONST
console.log(MyModule.My.Test.Path.MyConst);

Note:

When creating a module, because module are loaded one by one, if you call a module not loaded, inside in the private's module context, you will have undefined error.

Use the private's module context to set it up or make operation that don't need the Library.

/**
 * When creating a module, be sure to have the library in parameter.
 * An empty lib or an instance already declared
 */
module.exports = (function(Library = new (require('blocnode'))()) {
    /**
     * Here is the private context, the entire Library is not loaded
     */
    console.log(Library.My.Not.Loaded.Module);

    class MyClass {
       constructor() {
           /**
            * Here the context of MyClass. When you instanciate it,
            * all module are loaded, so you can use the entire Library
            */
           console.log(Library.My.Loaded.Module);
       }
    }

    Library.namespace('My.Test.Path').MyClass = MyClass;

    return Library;
});