Skip to content
Get StartedConceptsDependencies

Dependencies

Dependencies are external packages of code your project uses to function.

In the Node.js ecosystem, developers use package.json at the root of the project to declare a list of direct dependencies in the dependencies (e.g., "express": "^4.18.0"). Each of those most likely have transitive dependencies (i.e., express pulls in body-parser, accepts, cookie respectively.). This list of packages, and their dependencies are what constitutes a dependency tree for a project.

Direct vs. transitive

TypeWhat it isExample
DirectListed in your package.jsonexpress@^4.18.0
TransitiveA dependency of one of your dependenciesbody-parser (express needs it)

For example, after running vlt install express typescript, this is what your filesystem might look like:

  • package.json list express@^4.18.0 directly
  • Directorynode_modules
    • Directoryexpress direct dependency (you installed it)
      • index.js
      • Directorynode_modules
        • body-parser transitive (express needs it)
        • accepts transitive
        • cookie transitive
    • typescript direct dependency (dev)

Dependency types

Packages in package.json can be declared under several categories:

Field in package.jsonPurpose
dependenciesProduction dependencies needed at runtime
devDependenciesDevelopment-only tools (testing, building)
peerDependenciesExpected host dependency (e.g., a component library that is built off react)
optionalDependenciesNon-failing — install skipped if resolution fails

Familiar with CSS selectors? Then you’ll like DSS.

The vlt CLI provides handy colon-prefixed commands to query and filter by dependency types pseudo-state selectors like :prod, :dev, :peer, and :optional.