Search code examples
javascriptnode.jsnpmmodulerequire

Node.js: How to search for modules that have a specified field?


Main: How do i require modules that have example field in it's package.json?

For example:

const path = require( "path" );
const glob = require( "glob" );

const modules = glob.sync( './node_modules/*' );

for ( let mod in modules ) {
    const modPackage = require( path.resolve( __dirname, "node_modules", mod, "package.json" ) );
    if ( modPackage.hasOwnProperty( "example" ) ) {
        console.log( "Module:", mod, "Has Field 'example'" );
    }
}

Addiotinal: How do i require modules that have a specific tag? (for example: "demo")


Solution

  • It looks to me like your code is basically correct, just two issues:

    1. You wanted for-of, not for-in.
    2. No need to add /node_modules/ to the path.

    So:

    const path = require( "path" );
    const glob = require( "glob" );
    
    const modules = glob.sync( './node_modules/*' );
    
    for (let mod of modules ) {
    // ----------^^
        const modPackage = require( path.resolve( __dirname, mod, "package.json" ) );
    // ------------------------------------------------------^
        if ( modPackage.hasOwnProperty( "example" ) ) {
            console.log( "Module:", mod, "Has Field 'example'" );
        }
    }
    

    You almost never want to use for-in on arrays. More about looping through arrays in this question's answers.