@undefined-moe/require-resolve-hook
v1.1.0
Published
Module to hook into the Node.js require and require.resolve function
Downloads
312
Readme
require-resolve-hook
Module to hook into the Node.js require and require.resolve function
Installation
npm install require-resolve-hook
# or use yarn
yarn add require-resolve-hook
Usage
import requireResolveHook, { bypass, unhook } from 'require-resolve-hook'
const { unhook: unhookReact, bypass: bypassReact } = requireResolveHook('react', (id, parent, isMain) => {
return '/path/to/your/custom-react' // absolute path
})
require.resolve('react') // => '/path/to/your/custom-react'
require('react') // => export '/path/to/your/custom-react'
bypassReact(() => require.resolve('react')) // => '/path/to/real-react'
unhookReact()
require.resolve('react') // => '/path/to/real-react'
API
requireResolveHook(match: Match, onResolve: OnResolve, options: Options)
Returns:
{ bypass: (fn) => ReturnType<fn>, unhook: () => void }
bypass
means:bypass = (fn) => { unhook() const res = fn() hook() return res }
StrictMatch
- Type:
string | RegExp | (id: string) => boolean
Match
- Type:
StrictMatch | StrictMatch[]
OnResolve
- Type:
(id: string, parent: null | Module, isMain: boolean) => string | false
Options
ignoreModuleNotFoundError
Should ignore MODULE_NOT_FOUND
error?
requireResolveHook('react', () => require.resolve('not_found_package'))
requireResolveHook('react', () => require.resolve('founded_react'))
require.resolve('react') === require.resolve('founded_react')
requireResolveHook('react', () => require.resolve('not_found_package'), { ignoreModuleNotFoundError: false })
requireResolveHook('react', () => require.resolve('founded_react'))
require.resolve('react') // Throws MODULE_NOT_FOUND error
- Type:
boolean
- Default:
true
FAQ
- How to require the actual module in the mock file?
import requireResolveHook, { bypass } from 'require-resolve-hook'
import * as Module from 'module'
requireResolveHook(/^react/, (id, parent, isMain, opts) => {
if (parent && parent.filename === '/path/to/mock/react') {
// Access the actual react filename
return bypass(() => Module._resolveFilename(id, parent, isMain, opts))
}
return '/path/to/mock/react'
})
Contributing
- Fork it!
- Create your new branch:
git checkout -b feature-new
orgit checkout -b fix-which-bug
- Start your magic work now
- Make sure npm test passes
- Commit your changes:
git commit -am 'feat: some description (close #123)'
orgit commit -am 'fix: some description (fix #123)'
- Push to the branch:
git push
- Submit a pull request :)
Authors
This library is written and maintained by imcuttle, [email protected].
License
MIT - imcuttle 🐟