You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/utils/dep-tree.ts

71 lines
1.4 KiB

import fs from 'fs';
import path from "path";
import { argv } from "process";
var dependencyTree = require('dependency-tree');
const filePath = argv[2];
const tree = dependencyTree({
filename: filePath,
directory: 'src\\',
nodeModulesConfig: {
entry: 'module'
}, // optional
filter: path => path.indexOf('node_modules') === -1, // optional
nonExistent: [], // optional
noTypeDefinitions: false, // optional
});
console.log("分析依赖完成");
let jsonPath = filePath.replace(".ts", ".dep.json");
const handleCircular = function ()
{
const cache = new Set();
return function (key: any, value: any)
{
if (typeof value === 'object')
{
if (cache.has(value))
return '[重复]';
cache.add(value);
}
return value;
};
};
let set = new Set();
function RemoveRep(t: Object)
{
for (let key in t)
{
let v = t[key];
if (set.has(v))
delete t[key];
else
{
set.add(v);
RemoveRep(v);
}
}
}
RemoveRep(tree);
let jsonData = JSON.stringify(tree, handleCircular(), 2);
let dir = path.resolve(__dirname, "..").replaceAll("\\", "\\\\");
dir = dir[0].toLowerCase() + dir.substring(1);
jsonData = jsonData.replaceAll(dir, ".");
jsonData = jsonData.replaceAll("\\\\", "/");
fs.writeFile(jsonPath, jsonData, err =>
{
console.log(err ? err : "写出依赖成功");
});