What is resolve?
The resolve npm package is a module for resolving file paths within a project. It is particularly useful for resolving the path of a module as Node.js would, taking into account node_modules folders and the package.json file. It can be used both programmatically and as a command-line tool.
What are resolve's main functionalities?
Asynchronously resolve the path of a module
This feature allows you to asynchronously find the path of a module from a given base directory. The callback receives the resolved path or an error if the module cannot be found.
const resolve = require('resolve');
resolve('module_name', { basedir: '/some/path' }, function (err, res) {
if (err) console.error(err);
else console.log(res);
});
Synchronously resolve the path of a module
This feature allows you to synchronously find the path of a module from a given base directory. It either returns the resolved path or throws an error if the module cannot be found.
const resolve = require('resolve');
try {
const res = resolve.sync('module_name', { basedir: '/some/path' });
console.log(res);
} catch (err) {
console.error(err);
}
Resolve a module with custom package filter
This feature allows you to specify a custom filter function to modify the package data before the resolution process. This can be useful for redirecting the main entry point of a package.
const resolve = require('resolve');
const opts = {
packageFilter: function (pkg) {
if (pkg.main) {
pkg.main = 'some-other-file.js';
}
return pkg;
}
};
resolve('module_name', opts, function (err, res) {
if (err) console.error(err);
else console.log(res);
});
Command-line interface
The resolve package also provides a command-line interface (CLI) that can be used to resolve the path of a module from the command line.
$ resolve module_name --basedir=/some/path
Other packages similar to resolve
enhanced-resolve
enhanced-resolve is a library that offers more advanced resolution options and plugins, similar to webpack's resolver. It is more complex and configurable compared to resolve.
browser-resolve
browser-resolve is a resolve algorithm that takes browser field in package.json into account. It is similar to resolve but is specifically designed for browser environments.
require-resolve
require-resolve is a package that mimics node's require.resolve function. It is similar to resolve but focuses on mimicking the behavior of Node.js's native require.resolve method.
resolve
Implements the node require.resolve()
algorithm
except you can pass in the file to compute paths relatively to along with your
own require.paths
without updating the global copy (which doesn't even work in
node >=0.5
).
methods
var resolve = require('resolve');
resolve.sync(pkg, opts)
Synchronously search for the package/filename string pkg
according to the require.resolve()
algorithm
for X=pkg
and Y=opts.basedir
.
Default values for opts
:
{
paths : [],
basedir : __dirname,
extensions : [ '.js' ],
readFileSync : fs.readFileSync,
isFile : function (file) {
return path.existSync(file) && fs.statSync(file).isFile()
}
}
Optionally you can specify a opts.packageFilter
function to map the contents
of JSON.parse()
'd package.json files.
If nothing is found, all of the directories in opts.paths
are searched.
resolve.isCore(pkg)
Return whether a package is in core.