How to check in node if module exists and if exists to load?

Require is a synchronous operation so you can just wrap it in a try/catch.

try {
    var m = require('/home/test_node_project/per');
    // do stuff
} catch (ex) {
    handleErr(ex);
}

You can just try to load it and then catch the exception it generates if it fails to load:

try {
    var foo = require("foo");
}
catch (e) {
    if (e instanceof Error && e.code === "MODULE_NOT_FOUND")
        console.log("Can't load foo!");
    else
        throw e;
}

You should examine the exception you get just in case it is not merely a loading problem but something else going on. Avoid false positives and all that.


It is possible to check if the module is present, without actually loading it:

function moduleIsAvailable (path) {
    try {
        require.resolve(path);
        return true;
    } catch (e) {
        return false;
    }
}

Documentation:

require.resolve(request[, options])

Use the internal require() machinery to look up the location of a module, but rather than loading the module, just return the resolved filename.

Note: Runtime checks like this will work for Node apps, but they won't work for bundlers like browserify, WebPack, and React Native.