minipp
v0.1.16
Published
Quickly help you find files that are not being used in your project, and slim down your project.
Maintainers
Readme
minipp
快速帮你找到项目中没有被使用的文件,为你的项目瘦身。
[!WARNING]
⚠️ 目前仅支持扫描TS项目或者前端react+ts工程化项目,考虑到仅针对源代码文件,忽略项目配置文件,所以不会扫描src目录之外的文件及文件夹。执行时需要node版本>=20。
功能特点
支持的文件类型
- TypeScript:
.ts,.tsx - 样式文件:
.css,.less,.scss - 媒体文件等:
.png,.jpg,.jpeg,.gif,.svg,.mp3,.mp4,.wav,.woff,.woff2,.ttf,.eot,.json
支持的依赖关系
TypeScript/TSX 文件:
- ES Module 的
import语句 - 静态导入路径
- 相对路径导入
- TypeScript 路径别名(如
@/*)// 默认支持 - 支持
import()动态导入
- ES Module 的
样式文件:
@import语句url()函数中的资源引用- 相对路径引用
- 路径别名引用
支持配置文件
在项目根目录下新建minipp.config.ts
import { defineMinippConfig } from 'minipp'
export default defineMinippConfig({
ignoreFiles: ['src/index.ts', 'src/core/cli/index.ts'],
ignoreDependencies: ['@types/node'],
})
也支持匹配规则写法
export default defineMinippConfig({
needDel: false,
ignoreFiles: ['src/index.ts', 'src/core/**'],
ignoreDependencies: ['@types*'],
})支持删除未使用的文件和移除package.json中未使用的依赖 (删除的文件和被修改的package.jso会被备份到项目的minipp-delete-files文件夹下)

优势
高性能:
- 即使在大型项目中也能保持极快的分析速度
- 优化的文件扫描算法
- 高效的内存使用
全面的分析能力:
- 支持多种文件类型(TypeScript、TSX、CSS、媒体文件等)
- 处理各种导入方法和路径别名
- 详细的 JSON 报告输出
开发者友好:
- 简单的命令行界面
- 清晰详细的输出格式
- 易于集成到现有工作流程
项目优化:
- 帮助识别和删除未使用的文件
- 减小项目体积
- 提高代码库的可维护性
使用限制
不支持被分析的的导入方式
动态导入:
- 不支持模板字符串形式的路径
- 不支持条件导入
CommonJS 模块:
- 不支持
require()语法 - 不支持
require.context()等 webpack 特有语法 - 不支持
module.exports和exports
- 不支持
路径解析:
- 不支持运行时动态拼接的路径
- 不支持 自定义的路径别名(alias)(目前自动支持以"@/"开头的路径,会以src目录解析)
- 不支持复杂的路径映射规则(如多重通配符)
特殊语法:
- 不支持 CSS-in-JS 的样式引用
- 不支持 Vue 单文件组件的依赖解析
其他限制
- 准确性:
- 对于工程化项目运行时自动解析加载的文件(代码文件中没有明确指定被导入使用),解析器不能确定该文件是否被使用(目前统一归类在未被使用的文件中),需要使用者根据自己的框架确定是否需要删除。
下载
npm
npm install minipp -Dyarn
yarn add minipp -Dpnpm
pnpm add minipp -D在项目根目录创建minipp.config.ts
import { defineMinippConfig } from 'minipp'
export default defineMinippConfig({
ignoreFiles: ['src/index.ts', 'src/core/cli/index.ts'],
ignoreDependencies: ['@types/node'],
})也支持匹配规则写法
export default defineMinippConfig({
needDel: false,
ignoreFiles: ['src/index.ts', 'src/core/**'],
ignoreDependencies: ['@types*'],
})当然你也可以全局使用
npm install minipp -g但是别忘记了创建minipp.config.ts在目标项目的根目录
使用方法
基本用法(在项目根目录下执行)
minipp指定项目路径
minipp /path/to/your/projectTypeScript 路径映射支持
支持的配置
- 路径别名:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"] // Supported by default
}
}
}- 使用示例:
// 相对路径导入
import { Button } from './components/Button';
import { Button } from '../../components/Button';
import { Button } from '../components/Button';
// 路径别名导入
import { utils } from '@/utils'; // will be recognized as "src/utils"
import { config } from '@config/settings'; //will be identified as an external dependency rather than an on-premises resource
// 从 baseUrl 导入
import { types } from 'types';路径解析规则
@/utils->src/utils./utils-> 识别为相对于当前文件目录的文件../utils-> 识别为相对于当前文件目录上一级的文件'../../utils', '..'依然支持
输出文件
JSON 报告
- 代码文件中涉及的导入信息
- css,less,scss样式文件中涉及的导入信息
- 未被使用的文件信息
- 代码中未使用的依赖
- 代码中已使用的依赖
示例:
{
"jsLikePathImports": [
"src/core/processors/js-like.ts",
"src/core/processors/style-like.ts",
"src/core/common/index.ts",
"src/core/cli/index.ts",
"src/core/visitor/index.ts"
],
"jsLikeDependenceImports": [
"fs",
"path",
"glob",
"yocto-spinner",
"util",
"@swc/core"
],
"styleLikeImports": [],
"unusedFile": [
"src/index.ts"
],
"codeUnusedDependencies": [
"@swc/cli",
"@types/node",
"@typescript-eslint/eslint-plugin",
"@typescript-eslint/parser",
"changelogen",
"eslint",
"prettier",
"tsconfig-paths",
"tsx",
"typescript",
"unbuild"
]
}注意事项
- 建议在项目根目录运行
未来计划
- 支持 js,jsx解析
- 支持 Vue 单文件组件
