rondo-framework/scripts/list-deps.js
2019-09-16 21:04:10 +07:00

58 lines
1.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
function getDependencies(root) {
const files = [path.resolve(root)]
const used = new Set()
const deps = []
while (files.length) {
const file = files.pop()
const contents = fs.readFileSync(file, 'utf8')
const match = contents.match(/require\(".*?"\)/g)
console.log(file, match)
if (!match) {
continue
}
match
.map(m => m.substring('require("'.length, m.length - 2))
.map(dep => {
if (dep.startsWith('.')) {
return {
file: require.resolve(path.resolve(path.dirname(file), dep)),
isDep: false,
}
}
if (dep.startsWith('@rondo.dev/')) {
return {
file: require.resolve(dep),
isDep: false,
}
}
return {
file: dep,
isDep: true,
}
})
.filter(dep => !used.has(dep.file))
.forEach(dep => {
used.add(dep.file)
if (dep.isDep) {
if (require.resolve.paths(dep.file) !== null) {
// skip core modules
deps.push(dep.file)
}
return
}
files.push(dep.file)
})
}
return deps
}
console.log(getDependencies(process.argv[2]))