hollow-cli
Version:
87 lines (68 loc) • 2.18 kB
JavaScript
/***************************************************
* Created by nanyuantingfeng on 2019-08-13 12:12. *
***************************************************/
const glob = require('glob')
const path = require('path')
const fs = require('fs')
const deepmerge = require('deepmerge')
const resolve = (moduleName, fileName) =>
require.resolve(`${moduleName}${path.sep}${fileName}`, { paths: [process.cwd()] })
const getFileName = (regx, cwd) => {
const files = glob.sync(regx, { cwd })
if (!Array.isArray(files) || files.length === 0) {
process.stdout.write(`没有找到文件: ${regx}`)
}
if (files.length > 1) {
process.stdout.write(`匹配到多个文件: ${regx} | ${files.join(' ')}`)
}
return files[0]
}
const getPathName = moduleName => {
const aP = resolve(moduleName, 'package.json')
const aPn = path.dirname(aP)
return path.relative(process.cwd(), aPn)
}
const getVendors = regx => moduleNames =>
moduleNames.map(moduleName => {
const pathDir = getPathName(moduleName)
const fileName = getFileName(regx, pathDir)
return { pathDir, fileName }
})
const getExternals = moduleNames => {
let oo = {}
moduleNames.forEach(moduleName => {
const alias = resolve(moduleName, 'alias.js')
if (fs.existsSync(alias)) {
oo = { ...oo, ...require(alias) }
}
})
return oo
}
const parseOne = regx => moduleNames => {
const files = {}
const sdks = []
const externals = {}
if (!regx || !moduleNames || !moduleNames.length) {
return [files, sdks, externals]
}
const vendors = getVendors(regx)(moduleNames)
vendors.forEach(({ fileName, pathDir }) => {
files[fileName] = pathDir + path.sep + fileName
sdks.push(fileName)
})
Object.assign(externals, getExternals(moduleNames))
return [files, sdks, externals]
}
module.exports = vendors => {
vendors = vendors || []
let files = {}
let sdks = []
let externals = {}
for (let j = 0; j < vendors.length - 1; j += 2) {
const nn = parseOne(vendors[j])(vendors[j + 1])
files = deepmerge(files, nn[0])
sdks = deepmerge(sdks, nn[1])
externals = deepmerge(externals, nn[2])
}
return [files, sdks, externals]
}