vant-reduce
Version:
86 lines (77 loc) • 2.41 kB
JavaScript
const fs = require('fs')
const path = require('path')
console.log(process.cwd())
console.log("process.cwd()")
let allVantFiles = fs.readdirSync(path.join(process.cwd(), 'static', 'vant'))
let PathArr = new Set(['/vant/common/', '/vant/wxs/', '/vant/mixins/'])
let PromiseArray = []
let wxJson = { wxJson: [] }
function getJson(ens) {
let reg = /\/main\.(j|t)s/
for (let [key, path] of ObjectYeild(ens)) {
if (key !== 'app') {
PromiseArray.push(getPromise(path.replace(reg, '/main.json')))
}
}
return PromiseArray
}
function getPromise(path, isT) {
let reg = isT ? /\.\.(\/.*)index$/ : /.*static(\/vant\/.*\/).*/
let str = isT ? '/' : ''
return new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
if (err) {
return resolve('cuowu')
}
data = JSON.parse(data.toString())
if (data && data.usingComponents && Object.keys(data.usingComponents).length) {
for (let [key, url] of ObjectYeild(data.usingComponents)) {
!isT && reg.exec(url) && PathArr.add(`${reg.exec(url)[1].trim()}`)
isT && reg.exec(url) && PathArr.add(`/vant${reg.exec(url)[1].trim()}`)
}
}
resolve()
})
})
}
function* ObjectYeild(obj) {
for (let key of Object.keys(obj)) {
yield [key, obj[key]]
}
}
function fnSelf(arr, recordArr) {
let Promise_arr = []
for (let value of arr) {
Promise_arr.push(getPromise(path.join(process.cwd(), 'static', `${value}/index.json`), true))
}
Promise.all(Promise_arr).then(() => {
let resArr = recordArr[recordArr.length - 1]
if (resArr.length === PathArr.size) return getDirRes(PathArr)
let resSet = new Set([...PathArr].filter(val => {
return !resArr.includes(val)
}))
Object.assign(recordArr, {
[recordArr.length]: [...PathArr]
})
fnSelf([...resSet], recordArr)
})
}
function getDirRes(needFileArray) {
wxJson.wxJson = new Set(allVantFiles.filter(x => !needFileArray.has(`/vant/${x}/`)))
wxJson.wxJson = [...wxJson.wxJson].map(val => path.join(process.cwd(), 'dist/wx/static/vant', val))
return wxJson
}
function vantStartCheck(entry) {
Promise.all(getJson(entry)).then((res) => {
let recordArr = []
Object.assign(recordArr, {
[recordArr.length]: [...PathArr]
})
fnSelf([...PathArr], recordArr)
}).catch((res) => {
})
return wxJson
}
module.exports = {
vantStartCheck
}