custom-resolve

Sugar way to customize substack's resolve

Usage no npm install needed!

<script type="module">
  import customResolve from 'https://cdn.skypack.dev/custom-resolve';
</script>

README

custom-resolve

version status coverage dependencies devDependencies

Return a function works like substack's node-resolve, with some options set by default.

Example

⌘ tree example/
example/
├── node_modules
│   └── colors
│       ├── colors.scss
│       └── package.json
├── resolve.js
└── style_modules
    └── red
        └── index.scss

example/node_modules/colors/package.json:

{
  "style": "colors"
}

example/resolve.js:

var resolver = require('..')
var path = require('path')

var resolve = resolver({
  main: 'style',
  extensions: ['.scss'],
})

resolve('colors', function (err, file) {
  console.log(path.relative(__dirname, file))
})

console.log(
  path.relative(__dirname, resolve.sync('./red', {
    basedir: path.join(__dirname, 'style_modules'),
  }))
)

output:

⌘ node example/resolve.js
style_modules/red/index.scss
node_modules/colors/colors.scss

Breaking changes in v1.0.0

  • The options specified will be treated as the default options for node-resolve, and when the returned custom resolve function called, options passed to it will overwrite the corresponding default options.
  • The packageEntry option is replaced by main.
  • The symlinks option is replaced by symlink. Check symlink for more details.
  • The API only receives one argument.

resolve = resolver(defaultOptions)

Return a function like node-resolve, with some of the options set by default according to defaultOptions.

When resolve is called with extra options, they overwrite those in defaultOptions.

Besides all options supported by node-resolve, defaultOptions supports the following options.

Refer to node-resolve for more information about supported options.

main

Specify the package entry. If defaultOptions is String, it is treated as the main option.

Type: String

Default: main

filename

Specify the file path where to start resolving.

It is meant to make setting the basedir option conveniently.

Type: String

symlink

Specify how to treat symlinks in the top node_modules directory.

Type: true

All symlinks will be resolved to their realpaths.

Type: Array, String

Only those specified will be resolved to realpaths.

Type: Function

Signature: needRealpath = symlink(file)

Realpaths are used only when this function returns a truthy value.