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

effective-dependency-tree

v2.0.1

Published

A tool to generate the effective list of dependencies of any project.

Downloads

1

Readme

Forked from @automattic/effective-module-tree, hosted in https://github.com/Automattic/wp-calypso/tree/trunk/packages/effective-module-tree


effective-dependency-tree

CLI tool that generates an ASCII tree with the representation of packages in node_modules and their dependencies. This works over the actual node_modules files, so you need to install your dependencies first (i.e. npm install or yarn install).

It generates the logical representation of the tree. A package may appear multiple times if it is depended on by multiple packages, even if all point to the same file on the filesystem. In other words, it "un-hoists" hoisted/deduped packages.

It will traverse regular dependencies, devDependencies and peerDependencies, but will ignore optional peerDependencies (as specified in peerDependenciesMeeta).

Why?

Usually, the package manger has a way to list the dependencies (npm ls or yarn list). However this includes deduplicated packages, and requires the presence of the lock file to generate the tree. This is the package manager's vision of the tree.

System tools like ls, find or tree can generate a similar output, but those represent the filesystem view of the tree. Depending on how effective the package manager is hoisting dependencies, this view may not be comparable.

effective-dependency-tree generates node's vision of the dependency tree. Is what node will find when requiring dependencies, ignoring where the package physically live in the file system. This tree should be consistent across package managers and different hoisting capabilities. As such, it can be used to verify that the dependeny tree remains constant when migrating to a different package manager.

Usage

Run effective-dependency-tree in the root of your project.

Use effective-dependency-tree --root <path> to print the tree in a different project. Example:

effective-dependency-tree --root "./src/package.json"

This tool can generate either an ascii tree, or a list (easier to visualize dependency chains in big trees). It can be specified with the flags -o tree or -o list.

If you are using this tool to analyze many packages (e.g. in a monorepo), you can pass --root multiple times. Discovered trees will be reused and cached across packages, significatively speeding it up:

effective-dependency-tree --root "./packages/a/package.json" --root "./packages/b/package.json"

Check out effective-dependency-tree --help for other flags and examples.

Troubleshooting

Invoke the command with DEBUG=effective-dependency-tree ./effective-dependency-tree to get a verbose log of what is going on.