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 : "写出依赖成功"); });