
Security News
Deno 2.6 + Socket: Supply Chain Defense In Your CLI
Deno 2.6 introduces deno audit with a new --socket flag that plugs directly into Socket to bring supply chain security checks into the Deno CLI.
app-module-path
Advanced tools
Simple module to add additional directories to the Node module search for top-level app modules
This simple module enables you to add additional directories to the Node.js module search path (for top-level app modules only). This allows application-level modules to be required as if they were installed into the node_modules directory.
npm install app-module-path --save
// ***IMPORTANT**: The following line should be added to the very
// beginning of your main script!
require('app-module-path').addPath(baseDir);
IMPORTANT: The search path should be modified before any modules are loaded!
Example:
In your my-app/index.js (or my-app/server.js) file:
// Add the root project directory to the app module search path:
require('app-module-path').addPath(__dirname);
Given the following example directory structure:
The following will work for any modules under the src directory:
// All of the following lines will work in "src/foo/index.js" and "src/bar/index.js":
var foo = require('src/foo'); // Works
var bar = require('src/bar'); // Works
var baz = require('installed-baz'); // Works
Lastly, by design, installed modules (i.e. modules under the node_modules directory) will not be able to require application-level modules so the following will not work:
// All of the following lines will *not* work in "node_modules/installed-baz/index.js"!
var foo = require('src/foo'); // Fails
var bar = require('src/bar'); // Fails
app-module-path/register)This module supports an alternate method of adding a path to the Node.js module search path that requires less code. Requiring or importing the app-module-path/register module will result in the directory of the calling module being added to the Node.js module search path as shown below:
By default, app-module-path will not attempt to resolve app modules from a directory that is found to be within a node_modules directory. This behavior can be changed by explicitly enabling app-module-path to work for descendent modules of a specific directory. For example:
var packageDir = path.dirname(require.resolve('installed-module-allowed'));
require('../').enableForDir(packageDir);
require('app-module-path/register');
// Is equivalent to:
require('app-module-path').addPath(__dirname);
import "app-module-path/register";
// Is equivalent to:
import { addPath } from 'app-module-path';
addPath(__dirname);
app-module-path/cwd)Additionally, requiring or importing app-module-path/cwd will result in the current working directory of the Node.js process being added to the module search path as shown below:
require('app-module-path/cwd');
// Is equivalent to:
require('app-module-path').addPath(process.cwd());
import "app-module-path/cwd";
// Is equivalent to:
import { addPath } from 'app-module-path';
addPath(process.cwd());
Search path order:
node_modules directory and an application module directory then the module in the node_modules directory will be loaded since it is found first.
This behavior is new in v2.x. In v1.x, this search order was reversedNode.js compatibility:
node_modules directory.Recommendations:
my-app/src or my-app/app_modules) and then to add the application root to the search path. The require calls would then be something like require('src/foo') or require('app_modules/foo'). The common prefix makes it more clear that the module can be found in the application's modules directory and not in the node_modules directory.Pull requests, bug reports and feature requests welcome.
BSD-2-Clause
The module-alias package allows you to create custom module aliases and register directories for module resolution. It provides similar functionality to app-module-path but also includes the ability to create aliases for specific modules.
The require-alias package allows you to define aliases for module paths, making it easier to require modules without using relative paths. It is similar to app-module-path but focuses more on aliasing specific module paths rather than adding directories to the search path.
The rechoir package allows you to register require hooks for different file types, enabling you to require modules with non-standard extensions. While it provides some overlapping functionality with app-module-path, it is more focused on handling different file types rather than modifying the module search path.
FAQs
Simple module to add additional directories to the Node module search for top-level app modules
The npm package app-module-path receives a total of 2,311,906 weekly downloads. As such, app-module-path popularity was classified as popular.
We found that app-module-path demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Deno 2.6 introduces deno audit with a new --socket flag that plugs directly into Socket to bring supply chain security checks into the Deno CLI.

Security News
New DoS and source code exposure bugs in React Server Components and Next.js: what’s affected and how to update safely.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.