mirror of https://gitee.com/cf-fz/WebCAD.git
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.
71 lines
1.4 KiB
71 lines
1.4 KiB
3 years ago
|
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 : "写出依赖成功");
|
||
|
});
|