Vue 3 + TypeScript:package.json 示例 / 详细注释说明

一、示例 / 详细注释说明

复制代码
{
  // 项目基础信息
  "name": "vite-project", // 项目名称(建议使用 kebab-case 格式)
  "private": true,        // 标记为私有项目,避免意外发布到 npm
  "version": "1.0.0",     // 项目版本(遵循语义化版本规范)
  "type": "module",       // 声明使用 ES Modules(ESM)规范
  "description": "Vue 3 + TypeScript starter template", // 项目描述
  "keywords": [           // npm 搜索关键词
    "vue3",
    "typescript",
    "vite",
    "starter-template",
    "general",
    "config"
  ],

  // 脚本命令(通过 `yarn run <script>` 或 `npm run <script>` 执行)
  "scripts": {
    "tsc": "vue-tsc -b",                     // 类型检查(Vue + TypeScript)
    "dev": "vite --mode dev",                // 启动开发服务器(指定 dev 环境)
    "test": "vite --mode test",              // 测试环境启动
    "uat": "vite --mode uat",                // UAT(用户验收测试)环境启动
    "pre": "vite --mode pre",                // 预发布环境启动
    "production": "vite --mode production",  // 生产环境启动
    "build": "yarn tsc && vite build",       // 构建生产包(先类型检查再构建)
    "preview": "vite preview",               // 本地预览生产构建结果
    "prepare": "husky",                      // 安装 husky 钩子(通常用于 Git 钩子)
    "format": "prettier --write \"./**/*.{js,jsx,ts,tsx,css,scss,json,md}\"", // 格式化代码
    "build-storybook": "cd ./m-general && yarn build-storybook && cd ../",   // 构建 Storybook
    "subm": "node sub-scripts.js",           // 自定义脚本(如子模块操作)
    "postsubm": "cd ./m-general && (pnpm install || yarn install) && cd ../", // subm 后的操作
    "storybook": "cd ./m-general && yarn storybook && cd ../" // 启动 Storybook
  },

  // 项目依赖(运行时需要的包)
  "dependencies": {
    "@element-plus/icons-vue": "^2.3.2", // Element Plus 图标库
    "@types/qrcode": "^1.5.5",          // QRCode 类型定义(通常应放在 devDependencies)
    "axios": "^1.11.0",                 // HTTP 客户端
    "dayjs": "^1.11.13",                // 轻量级日期处理库
    "element-plus": "^2.10.6",          // Vue 3 UI 组件库
    "js-cookie": "^3.0.5",              // Cookie 操作工具
    "js-md5": "^0.8.3",                 // MD5 加密
    "lodash-es": "^4.17.21",            // 工具库(ESM 版本)
    "pinia": "^3.0.2",                  // Vue 状态管理
    "pinia-plugin-persistedstate": "^4.5.0", // Pinia 持久化插件
    "qrcode": "^1.5.4",                 // QR 码生成(生产依赖正确)
    "vue": "^3.5.13",                   // Vue 3 核心库
    "vue-cropper": "^1.1.4",            // 图片裁剪组件
    "vue-global-api": "^0.4.1",         // 全局 API 扩展(如 $filters)
    "vue-router": "^4.5.1",             // Vue 官方路由
    "vue-ueditor-wrap": "^3.0.8"        // UEditor 封装(注意:非官方维护)
  },

  // 开发依赖(仅开发环境需要的包)
  "devDependencies": {
    "@commitlint/cli": "^19.8.1",               // Git 提交信息校验
    "@commitlint/config-conventional": "^19.8.1", // 常规提交规范
    "@types/js-cookie": "^3.0.6",               // js-cookie 类型定义
    "@types/js-md5": "^0.8.0",                  // js-md5 类型定义
    "@types/lodash-es": "^4.17.12",             // lodash-es 类型定义
    "@types/node": "^24.2.1",                   // Node.js 类型定义
    "@vitejs/plugin-vue": "^5.2.4",             // Vite 的 Vue 插件
    "@vitejs/plugin-vue-jsx": "^4.2.0",         // Vite 的 Vue JSX 支持
    "@vitest/browser": "^3.2.2",                // Vitest 浏览器测试
    "@vitest/coverage-v8": "^3.2.2",            // Vitest 覆盖率报告
    "@vue/tsconfig": "^0.7.0",                  // Vue 官方 TS 配置模板
    "commitlint": "^19.8.1",                    // Commitlint 核心(已包含在 cli 中,可移除)
    "husky": "^9.1.4",                          // Git 钩子工具
    "lint-staged": "^16.1.5",                   // 预提交代码检查
    "playwright": "^1.54.2",                    // E2E 测试框架
    "pnpm": "^10.14.0",                         // pnpm 包管理器(通常不需要声明)
    "prettier": "^3.5.3",                       // 代码格式化工具
    "sass-embedded": "^1.90.0",                 // Dart Sass 嵌入式版本(性能更好)
    "shelljs": "^0.10.0",                       // Node.js Shell 工具(用于脚本)
    "stylelint-config-recommended-scss": "^16.0.0", // SCSS 推荐规则
    "stylelint-config-standard": "^39.0.0",     // CSS 标准规则
    "stylelint-scss": "^6.12.0",                // SCSS 语法支持
    "terser": "^5.40.0",                        // JS 压缩工具(Vite 默认已集成)
    "typescript": "~5.9.2",                     // TypeScript(建议固定次要版本)
    "vite": "^7.1.2",                           // Vite 构建工具
    "vite-plugin-checker": "^0.10.2",           // 开发时类型/语法检查
    "vite-plugin-vue-setup-extend": "^0.4.0",   // 扩展 Vue 的 setup 语法糖
    "vitest": "^3.2.2",                         // Vite 测试框架
    "vue-tsc": "^3.0.5"                         // Vue 的 TypeScript 编译器
  },

  // Husky 配置(Git 钩子)
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",      // 提交前执行 lint-staged
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" // 提交信息校验
    }
  },

  // Lint-staged 配置(仅对暂存区文件执行检查)
  "lint-staged": {
    "*.{js,jsx,ts,tsx,css,scss,json,md,yaml,yml}": [
      "prettier --write" // 格式化
    ],
    "*.{css,scss,less}": [
      "stylelint --fix" // 修复 CSS 问题
    ]
  },

  // PNPM 特定配置(避免安装某些依赖)
  "pnpm": {
    "ignoredBuiltDependencies": [
      "@parcel/watcher", // 忽略原生模块(可能因平台不兼容导致问题)
      "esbuild",         // Vite 内部使用,无需重复安装
      "vue-demi"         // 兼容 Vue 2/3 的库(通常不需要显式安装)
    ]
  },

  // 浏览器兼容性配置(Babel/Autoprefixer 使用)
  "browserslist": [
    "> 0.5%",        // 全球使用率 > 0.5% 的浏览器
    "last 2 versions", // 每个浏览器的最近两个版本
    "not dead",      // 排除已停止维护的浏览器
    "not ie <= 11"   // 排除 IE 11 及以下版本
  ]
}

二、过程记录

2.1、实际JSON文件中不允许有注释

2.2、browserslist

Browserslist

2.2.1、现代项目(支持最新浏览器,放弃旧版)

复制代码
// package.json
{
  "browserslist": [
    "last 2 Chrome versions",
    "last 2 Firefox versions",
    "last 2 Safari versions",
    "last 2 Edge versions",
    "not dead"  // 排除已停止维护的浏览器(如 IE 10及以下)
  ]
}

2.2.2、主流兼容项目(覆盖大部分用户)

复制代码
{
  "browserslist": [
    "> 0.5%",          // 全球使用率 > 0.5% 的浏览器
    "last 2 versions",  // 每个浏览器的最近两个版本
    "not dead",        // 排除已停止维护的浏览器
    "not ie <= 11"     // 显式排除 IE 11(可选)
  ]
}

2.2.3、兼容旧版浏览器(包括 IE 11)

复制代码
{
  "browserslist": [
    "> 0.5%",
    "last 2 versions",
    "not dead",
    "IE 11"  // 显式包含 IE 11
  ]
}

2.2.4、更严格的版本(如需支持企业内网旧浏览器)

复制代码
{
  "browserslist": [
    "defaults",          // 等同于 "> 0.5%, last 2 versions, not dead"
    "IE 10-11",         // 包含 IE 10 和 11
    "Firefox ESR",      // 包含 Firefox 扩展支持版本(企业常用)
    "not < 0.25%"       // 排除使用率极低的浏览器
  ]
}

2.2.5、优先移动端浏览器 / H5 / 小程序

复制代码
{
  "browserslist": [
    "iOS >= 10",       // 覆盖大部分 iPhone
    "Android >= 5",    // 覆盖 Android 5+(Chrome 60+)
    "not dead"
  ]
}

2.2.6、仅需兼容 Node.js 运行时

复制代码
{
  "browserslist": [
    "node 16",  // 根据项目实际 Node 版本调整
    "node 18"
  ]
}

2.2.7、环境区分(开发/生产)

复制代码
{
  "browserslist": {
    "production": [
      "> 0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 Chrome version",  // 开发时仅支持最新 Chrome
      "last 1 Firefox version"
    ]
  }
}

2.2.8、排除特定浏览器

复制代码
{
  "browserslist": [
    "> 1%",
    "not IE 11",       // 排除 IE 11
    "not Samsung 4"   // 排除三星旧版浏览器(如 Galaxy S4 内置浏览器)
  ]
}

2.2.9、查看生效的浏览器列表

复制代码
npx browserslist