UNPKG

1.55 kBJavaScriptView Raw
1'use strict'
2
3const debug = require('debug')('elint:utils:try-require')
4const path = require('path')
5const fs = require('fs')
6const { getNodeModulesDir } = require('../env')
7
8/**
9 * 获取全部目录下的模块
10 *
11 * @param {string} dir 目录
12 * @param {string} [scope] scope
13 * @returns {Array<string>} modules
14 */
15function getModulesByDir (dir, scope = '') {
16 const nodeModulesDir = getNodeModulesDir()
17 const results = []
18 const modules = fs.readdirSync(dir)
19
20 if (!modules.length) {
21 return results
22 }
23
24 modules.forEach(module => {
25 if (module.startsWith('.')) {
26
27 } else if (module.startsWith('@')) {
28 const subDir = path.join(nodeModulesDir, module)
29 const subModules = getModulesByDir(subDir, module)
30 Array.prototype.push.call(results, ...subModules)
31 } else {
32 results.push(scope ? `${scope}/${module}` : module)
33 }
34 })
35
36 return results
37}
38
39/**
40 * 尝试获取已安装的模块,返回模块名
41 *
42 * @param {RegExp} regexp 正则,描述要 require 的 mudule
43 * @returns {string[]} 所有匹配的模块名
44 */
45function tryRequire (regexp) {
46 const nodeModulesDir = getNodeModulesDir()
47 const results = []
48
49 debug(`arguments.regexp: ${regexp || 'undefined'}`)
50
51 if (!regexp || !fs.existsSync(nodeModulesDir)) {
52 debug('regexp is undefined or nodeModulesDir not exists')
53 return results
54 }
55
56 const moduleList = getModulesByDir(nodeModulesDir)
57 .filter(m => regexp.test(m))
58
59 debug(`matched modules: ${moduleList.join(', ')}`)
60
61 return moduleList
62}
63
64module.exports = tryRequire