1 | const nativeModule = require('module')
|
2 | const path = require('path')
|
3 | const fs = require('fs')
|
4 |
|
5 | function createRequire (filename) {
|
6 |
|
7 | if (!filename) {
|
8 | filename = process.cwd()
|
9 | }
|
10 |
|
11 |
|
12 | if (isDir(filename)) {
|
13 | filename = path.join(filename, 'index.js')
|
14 | }
|
15 |
|
16 |
|
17 | if (nativeModule.createRequire) {
|
18 | return nativeModule.createRequire(filename)
|
19 | }
|
20 |
|
21 |
|
22 | if (nativeModule.createRequireFromPath) {
|
23 | return nativeModule.createRequireFromPath(filename)
|
24 | }
|
25 |
|
26 |
|
27 | return _createRequire(filename)
|
28 | }
|
29 |
|
30 |
|
31 | function _createRequire (filename) {
|
32 | const mod = new nativeModule.Module(filename, null)
|
33 | mod.filename = filename
|
34 | mod.paths = nativeModule.Module._nodeModulePaths(path.dirname(filename))
|
35 | mod._compile('module.exports = require;', filename)
|
36 | return mod.exports
|
37 | }
|
38 |
|
39 | function isDir (path) {
|
40 | try {
|
41 | const stat = fs.lstatSync(path)
|
42 | return stat.isDirectory()
|
43 | } catch (e) {
|
44 |
|
45 | return false
|
46 | }
|
47 | }
|
48 |
|
49 | module.exports = createRequire
|