| const nativeModule = require('module') |
| const path = require('path') |
| function createRequire (filename) { |
| // Fallback to process.cwd() if no filename passed |
| // If filename is dir, createRequire goes with parent directory, so we need fakepath |
| filename = path.join(filename, 'index.js') |
| if (nativeModule.createRequire) { |
| return nativeModule.createRequire(filename) |
| // Added in Node v10.12.0 and deprecated since Node v12.2.0 |
| if (nativeModule.createRequireFromPath) { |
| return nativeModule.createRequireFromPath(filename) |
| return _createRequire(filename) |
| function _createRequire (filename) { |
| const mod = new nativeModule.Module(filename, null) |
| mod.paths = nativeModule.Module._nodeModulePaths(path.dirname(filename)) |
| mod._compile('module.exports = require;', filename) |
| const stat = fs.lstatSync(path) |
| return stat.isDirectory() |
| // lstatSync throws an error if path doesn't exist |
| module.exports = createRequire |