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 🙏

© 2024 – Pkg Stats / Ryan Hefner

require-chain

v2.1.0

Published

Functions that retrieve all the dependency or the dependent files that related to the target file.

Downloads

266

Readme

Require Chain

This package is useful when watching file changes and hot-reload modules. It helps us retrieve all the dependency or the dependent files that related to the changed file, and we can reload them all at once.

Example

import { findDependents, findDependencies } from "require-chain";
import * as path from "path";

const filename = path.join(__dirname, "test", "foo.js");

const dependents = findDependents(filename);
console.log(dependents);
// [...] filenames that rely on the given file

const dependencies = findDependencies(filename);
console.log(dependencies);
// [...] filenames that imported by the given file

API

findDependents(filename[, includes])

Finds all the CommonJS files and their ancestors that require the filename.

  • filename: string | string[] The absolute path of the file (or files).
  • includes: string[] | ((files: string[]) => string[]) By default, the function searches every cached file except the ones in node_modules and the require.main.filename. We can provide this argument to set more specific files that can be searched.

findDependencies(filename[, includes])

Finds all the CommonJS files and their descendants that required by the filename.

  • filename: string | string[] The absolute path of the file (or files).
  • includes: string[] | ((files: string[]) => string[]) By default, the function searches every cached file except the ones in node_modules and the require.main.filename. We can provide this argument to set more specific files that can be searched.

module.parent vs module.children

When a module (CommonJS file) is required, the module.parent property is assigned to the first dependent module (AKA the initiator). However, there may be many dependent files that require the same module, so reversing the module.parent to find its ancestors cannot retrieve all the dependents.

module.children, on the other hand, stores all the child modules that the current module requires, which can be used to scan for the dependency map through the require.cache and retrieve all the related files.

And of course, this package use module.children under the hood.