On this page

Managing Dependencies

Concepts Jump to heading

  • Deno uses URLs for dependency management.
  • One convention places all these dependent URLs into a local deps.ts file. Functionality is then exported out of deps.ts for use by local modules.
  • Continuing this convention, dev only dependencies can be kept in a dev_deps.ts file.
  • See also Modules.

Overview Jump to heading

In Deno there is no concept of a package manager as external modules are imported directly into local modules. This raises the question of how to manage remote dependencies without a package manager. In big projects with many dependencies it will become cumbersome and time consuming to update modules if they are all imported individually into separate modules.

The standard practice for solving this problem in Deno is to create a deps.ts file. All required remote dependencies are referenced in this file and the required methods and classes are re-exported. The dependent local modules then reference the deps.ts rather than the remote dependencies. Now if one remote dependency is used in several files, upgrading it is much simpler as this can all be managed within deps.ts.

Dev dependencies can also be managed in a separate dev_deps.ts file, allowing clean separation between dev and production dependencies.

Example Jump to heading

/**
 * deps.ts
 *
 * This module re-exports the required methods
 * from the dependant remote Ramda module.
 */
export {
  add,
  multiply,
} from "https://x.nest.land/ramda@0.27.0/source/index.js";

This example has the same functionality as the local and remote import example. However in this case, instead of the Ramda module being referenced directly, it is referenced by proxy using a local deps.ts module.

Command: deno run example.ts

/**
 * example.ts
 */

import { add, multiply } from "./deps.ts";

function totalCost(outbound: number, inbound: number, tax: number): number {
  return multiply(add(outbound, inbound), tax);
}

console.log(totalCost(19, 31, 1.2));
console.log(totalCost(45, 27, 1.15));

/**
 * Output
 *
 * 60
 * 82.8
 */