This package has been deprecated

Author message:

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

@teku/resolve
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

@teku/resolve

Provide an async node require.resolve algorithmn, with extra features:

  • Blazingly faster comparing to vanilla require.resolve (bench) (Especially when you need to work with large amount of modules)
  • 🌟 Supports resolving with Yarn PnP API
  • 🌇 Supports resolving local packages, Yarn and Npm global packages, symlinks, workspaces, directory and files
  • Allow multiple module resolving using wildcard (*) (coming soon)
  • Allow advanced search using file contents search (coming soon)

Table of contents

Installation

Install using yarn or npm:

yarn add @teku/resolve
npm add @teku/resolve

Usage

Resolve in async way

The resolve supports asynchronously resolving:

  • full path to a file
  • or a module's main (entry) path, to be used with require
import { resolve } from `@teku/resolve`

// Entry point / main to require
// pnp: <dir>/.yarn/cache/.../packageA/index.js
// non-pnp: <dir>/node_modules/packageA/index.js
console.log(resolve('packageA'))

// full path <dir>/src/index.js
console.log(resolve('./src/index.js'))

// full path <dir>/packages/workspaceA/main.js
// (main.js) is defined in workspaceA's package.json
console.log(resolve('workspaceA'))
console.log(resolve('../localWorkspaceB'))

Resolve modules

The resolveModule supports asynchronously resolving module metadata

import { resolveModule } from `@teku/resolve`

console.log(resolveModule('packageA')) // => IModule
console.log(resolveModule('workspaceA')) // => IModule
console.log(resolveModule('../localWorkspaceB')) // => IModule

The resolved module metadata is:

interface IModule {
  // whether the module exists or not
  exists: boolean
  // input resolve query
  query: string
  // module dir path
  path: string
  // module main (entry) script
  main: string
  // module name
  name: string
  // module version
  version: string
  // module dependencies
  dependencies: string[]
  // error while resolving module
  error?: Error
}

Options

We can pass custom options into the resolver:

import { resolve } from `@teku/resolve`

resolve('moduleB', options)

All options are optional (We already provided a good configuration for you):

Name Type Description Default
callerPath string Base path to resolve requested modules current script path (or working directory)
moduleDirs string[] (non pnp) node_modules paths resolving up algorithm including global npm or yarn packages

Play with CLI

You can quickly get any modules or files requirable path by this command:

resolve <...paths>

if you want CLI to search for module metadata, please call with flag -m or --metadata, for example:

resolve @teku/resolve lodash -m

Resolve in classic way

You can also resolve in classic, I mean synchronously resolving, but with this tool's extra features as mentioned earlier:

  • Custom caller path for starting point of resolving
  • Custom list of node_modules dirs for searching
import { resolveSync } from `@teku/resolve`

// Entry point / main to require
// pnp: <dir>/.yarn/cache/.../packageA/index.js
// non-pnp: <dir>/node_modules/packageA/index.js
console.log(resolveSync('packageA'))

// full path <dir>/src/index.js
console.log(resolveSync('./src/index.js'))

Benchmarks

We tested with 2 cases, to compare speed using vanilla require.resolve and this library's resolver. Here are the results:

Test loading 10 packages

Screen Shot 2021-03-23 at 00 08 01

Test loading 80 packages

Screen Shot 2021-03-23 at 00 07 18

All tests were done on my Mac intel i5 10th (2020), RAM 16 GB

Contribution

All contributions are welcomed. Feel free to clone this project, make changes that your feel necessary and pull request anytime you want.

Install dependencies

yarn install

Run development build

yarn start

If you have any other suggestions, you can even open new issues with type: enhancement and package: resolve labels.


🍻 Cheers

Package Sidebar

Install

npm i @teku/resolve

Weekly Downloads

1

Version

1.0.3

License

MIT

Unpacked Size

19.3 kB

Total Files

8

Last publish

Collaborators

  • hungluu