12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- const nativeModule = require('module')
- const path = require('path')
- const fs = require('fs')
- function createRequire (filename) {
- // Fallback to process.cwd() if no filename passed
- if (!filename) {
- filename = process.cwd()
- }
- // If filename is dir, createRequire goes with parent directory, so we need fakepath
- if (isDir(filename)) {
- filename = path.join(filename, 'index.js')
- }
- // Added in Node v12.2.0
- 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)
- }
- // Polyfill
- return _createRequire(filename)
- }
- // Polyfill
- function _createRequire (filename) {
- const mod = new nativeModule.Module(filename, null)
- mod.filename = filename
- mod.paths = nativeModule.Module._nodeModulePaths(path.dirname(filename))
- mod._compile('module.exports = require;', filename)
- return mod.exports
- }
- function isDir (path) {
- try {
- const stat = fs.lstatSync(path)
- return stat.isDirectory()
- } catch (e) {
- // lstatSync throws an error if path doesn't exist
- return false
- }
- }
- module.exports = createRequire
|