Skip to content

Given an entrypoint, get all of the dependencies connected to it.

License

Notifications You must be signed in to change notification settings

nexe/resolve-dependencies

Repository files navigation

resolve-dependencies


npm i resolve-dependencies

resolve-dependencies is the very originally named bundler for nexe. It wasn't our intention to build a bundler but that is kind of what this is.

Exports

default: resolveSync(options: Options, ...opts: Options[]): Promise<Result>

  • Options: Object | string -- the entry to start from (if string)
    • entries: string[] -- a list of entrypoints to traverse, resolved against cwd
    • cwd: string -- the base directory that the resolution occurs from
    • loadContent: boolean -- indicates that the content should be included int he FileMap (this may be unreasonable for large dependency trees)
    • files: ({ [key: string]: File | null })[] -- a cache of already resolved files
    • expand: 'all' | 'none' | 'variable' -- how module contexts should be expanded to include extra files

All options are deeply merged, string options are added as entries

Result returns a Promise of a result object:

  • Result: Object
    • entries: { [key: entry]: File } - all the entries as provided to the resolve method and the tree of connected files
    • files: { [key: absPath]: File } - all resolved files keyed by their absolute path
    • warnings: string[] - an array warnings generated while processing the files

A File has the following shape

  • File: Object -- An object representing a file
    • size: number -- file size of the link or file
    • absPath: string -- absolute path to the file
    • moduleRoot: string | undefined -- Directory containing a modules package.json
    • package: any | undefined
    • deps: { [key: request]: File | null } -- Dependencies identified in the file, keyed by request
    • belongsTo: File | undefined -- The main file of the owning module
    • realSize: number | undefined -- set to the realfile size if the absPath is a symlink
    • realPath: string | undefined -- set to the realpath if the absPath is a symlink
    • contents: string | null
    • contextExpanded: boolean
    • variableImports: boolean

Example:

import resolveDependencies from 'resolve-dependencies'

const { entries, files } = resolveDependencies('./entry-file.js')
console.log(entries['./entry-file.js'])

// {
//   absPath: "/path/to/entry-file.js",
//   contents: "console.log('hello world')",
//   realSize: 26,
//   realPath: "/path/to/entry/lib/file.js"
//   size: 12
//   variableImports: false,
//   deps: {
//     "./dependency": {
//       absPath: "/path/to/dependency.js"
//       ...
//     },
//     path: null, //node builtin does not resolve
//     mkdirp: {
//       absPath: "/path/to/node_modules/mkdirp/index.js",
//       modulePath: "/path/to/node_modules/mkdirp",
//       package: {
//         name: "mkdirp"
//         ...
//       }
//     }
//   }
// }
//  `files` is a similar structure to entries, but 
//   is flat and keyed by the file's absolute path.