package.json配置

描述配置

  • name : 项目名称,第三方包可以通过npm install 包名安装

    • "name":"react"
      
  • version : 项目版本,项目版本号

    • "version" : "18.2.0"
      
  • repository : 仓库地址及版本控制信息

    • "repository": {
        "type": "git",
        "url": "https://github.com/facebook/react.git",
        "directory": "packages/react"
      }
      
  • decription : 项目描述,会展示在 npm 官网,让别人能快速了解该项目

    • "description": "React is a JavaScript library for building user interfaces."
      
  • keyword : 技术关键词,好的关键词可以帮助别人在 npm 官网上更好地检索到此项目,增加曝光率

    • "keywords": [
        "ant",
        "component",
        "components",
        "design",
        "framework",
        "frontend",
        "react",
        "react-component",
        "ui"
      ],
      
  • homepage : 项目主页的链接,通常是项目 github 链接,项目官网或文档首页

    • "homepage": "https://reactjs.org/"
      
  • bugs : 项目 bug 反馈地址,通常是 github issue 页面的链接

    • "bugs": "https://github.com/vuejs/core/issues" 
      
  • license : 项目的开源许可证

    • "license": "MIT"
      
  • author : 项目作者

    • "author": "xiaoming"
      
  • contributors : 该项目包的贡献者

    • "contributors": [
        "xxxx <xxxxx@xx.com>",
        "xxxx <xxxxx@xx.com> "
      ]
      
      "contributors": [
        {
          "name" : "xxxxx",
          "email" : "xxxxx@xx.com",
          "url" : "https://xxxxx"
        },
        {
          "name" : "xxxxx",
          "email" : "xxxxx@xx.com",
          "url" : "https://xxxxx"
        }
      ]
      

文件配置

  • files : 项目在进行 npm 发布时,可以通过 files 指定需要跟随一起发布的内容来控制 npm 包的大小,避免安装时间太长,发布时默认会包括 package.json,license,README 和main 字段里指定的文件。忽略 node_modules,lockfile 等文件,在此基础上,我们可以指定更多需要一起发布的内容。可以是单独的文件,整个文件夹,或者使用通配符匹配到的文件

    • "files": [
        "filename.js",
        "directory/",
        "glob/*.{js,json}"
      ]
      
  • type : 在 node 支持 ES 模块后,要求 ES 模块采用 .mjs 后缀文件名。只要遇到 .mjs 文件,就认为它是 ES 模块。如果不想修改文件后缀,就可以在 package.json文件中,指定 type 字段为 module

    • "type": "module"
      
  • main : 项目发布时,默认会包括 package.json,license,README 和main 字段里指定的文件,因为 main 字段里指定的是项目的入口文件,在 browser 和 Node 环境中都可以使用,如果不设置 main 字段,那么入口文件就是根目录下的 index.js

    • "main": "./index.js"
      
  • browser : main 字段里指定的入口文件在 browser 和 Node 环境中都可以使用。如果只想在 web 端使用,不允许在 server 端使用,可以通过 browser 字段指定入口

    • "browser": "./browser/index.js"
      
  • module : 项目也可以指定 ES 模块的入口文件,这就是 module 字段的作用

    • "module": "./index.mjs"
      
    • 当一个项目同时定义了 main,browser 和 module,像 webpack,rollup 等构建工具会感知这些字段,并会根据环境以及不同的模块规范来进行不同的入口文件查找

  • exports : node 在 14.13 支持在 package.json 里定义 exports 字段,拥有了条件导出的功能,exports 字段可以配置不同环境对应的模块入口文件,并且当它存在时,它的优先级最高

    • "exports": {
        "require": "./index.js",
        "import": "./index.mjs"
      
    • 这样的配置在使用 import ‘xxx’ 和 require(‘xxx’) 时会从不同的入口引入文件

    • 上面的写法等同于

    • "exports": {
        ".": {
          "require": "./index.js",
          "import": "./index.mjs"
        }
      }
      
    • exports 除了支持配置包的默认导出,还支持配置包的子路径

    • "exports": {
        "./style": "./dist/css/index.css"
      },
      
    • //原来的引入
      import `packageA/dist/css/index.css`;
      // 用户引入时
      import `packageA/style`;
      
    • 除了对导出的文件路径进行封装,exports 还限制了使用者不可以访问未在 “exports” 中定义的任何其他路径。比如发布的 dist 文件里有一些内部模块 dist/internal/module ,被用户单独引入使用的话可能会导致主模块不可用。为了限制外部的使用,我们可以不在 exports 定义这些模块的路径,这样外部引入 packageA/dist/internal/module 模块的话就会报错。

  • workspaces : 项目的工作区配置,用于在本地的根目录下管理多个子项目。可以自动地在 npm install 时将 workspaces 下面的包,软链到根目录的 node_modules 中,不用手动执行 npm link 操作

    • "workspaces": [
        "workspace-a"
      ]
      
    • 表示在 workspace-a 目录下还有一个项目,它也有自己的 package.json。

    • 通常子项目都会平铺管理在 packages 目录下,所以根目录下 workspaces 通常配置为

    • "workspaces": [
        "packages/*"
      ]
      

脚本配置

  • script : 指定项目的一些内置脚本命令,这些命令可以通过 npm run 来执行。通常包含项目开发,构建 等 CI 命令

    • "scripts": {
        "build": "webpack"
      }
      
    • 除了指定基础命令,还可以配合 pre 和 post 完成命令的前置和后续操作

    • "scripts": {
        "build": "webpack",
        "prebuild": "xxx", // build 执行之前的钩子
        "postbuild": "xxx" // build 执行之后的钩子
      }
      
    • 执行 npm run build 命令时,会按照 prebuild -> build -> postbuild 的顺序依次执行上方的命令(pnpm和yarn2已经废弃这种操作)

  • config : 设置 scripts 里的脚本在运行时的参数

    • # 设置端口号
      "config": {
        "port": "3001"
      }
      # 在执行脚本时,我们可以通过 npm_package_config_port 这个变量访问到 3001
      

依赖配置

  • dependencies : 运行依赖,也就是项目生产环境下需要用到的依赖

    • "dependencies": {
        "react": "^18.2.0",
        "react-dom": "^18.2.0"
      }
      
  • devDependencies : 开发依赖,项目开发环境需要用到而运行时不需要的依赖,用于辅助开发

    • "devDependencies": {
        "webpack": "^5.69.0"
      }
      
  • perDependencies : 同伴依赖,一种特殊的依赖,不会被自动安装,通常用于表示与另一个包的依赖与兼容性关系来警示使用者。

    • 比如我们安装 A,A 的正常使用依赖 B@2.x 版本,那么 B@2.x 就应该被列在 A 的 peerDependencies 下,表示“如果你使用我,那么你也需要安装 B,并且至少是 2.x 版本

    • "peerDependencies": {
        "react": ">=16.9.0",
        "react-dom": ">=16.9.0"
      }
      
  • optionalDependencies : 可选依赖,顾名思义,表示依赖是可选的,它不会阻塞主功能的使用,安装或者引入失败也无妨。这类依赖如果安装失败,那么 npm 的整个安装过程也是成功的

    • "optionalDependencies": {
        "colors": "^1.4.0"
      }
      
  • peerDependenciesMeta : 同伴依赖也可以使用 peerDependenciesMeta 将其指定为可选的

    • "peerDependencies": {
        "colors": "^1.4.0"
      },
      "peerDependenciesMeta": {
        "colors": {
          "optional": true
        }
      }
      
  • bundleDependencies : 打包依赖。它的值是一个数组,在发布包时,bundleDependencies 里面的依赖都会被一起打包

    • "bundleDependencies": [
        "react",
        "react-dom"
      ]
      # 在执行 npm pack 打包生成 tgz 压缩包中,将出现 node_modules 并包含 react 和 react-dom
      # 需要注意的是,这个字段数组中的值必须是在 dependencies,devDependencies 两个里面声明过的依赖才行
      
  • overrides : overrides 可以重写项目依赖的依赖,及其依赖树下某个依赖的版本号,进行包的替换

    • # 某个依赖 A,由于一些原因它依赖的包 foo@1.0.0 需要替换,我们可以使用 overrides 修改 foo 的版本号:
      "overrides": {
        "foo": "1.1.0-patch"
      }
      # 当然这样会更改整个依赖树里的 foo,我们可以只对 A 下的 foo 进行版本号重写
      "overrides": {
        "A": {
          "foo": "1.1.0-patch",
        }
      }
      

发布配置

  • private : 如果是私有项目,不希望发布到公共 npm 仓库上,可以将 private 设为 true

    • "private": true
      
  • publishConfig : npm 包发布时使用的配置

    • # 比如在安装依赖时指定了 registry 为 taobao 镜像源,但发布时希望在公网发布,就可以指定 publishConfig.registry
      "publishConfig": {
        "registry": "https://registry.npmjs.org/"
      }
      

系统配置

  • engines : 一些项目由于兼容性问题会对 node 或者包管理器有特定的版本号要求

    • "engines": {
        "node": ">=14 <16",
        "pnpm": ">7"
      }
      
  • os : 在 linux 上能正常运行的项目可能在 windows 上会出现异常,使用 os 字段可以指定项目对操作系统的兼容性要求

    • "os": ["darwin", "linux"]
      
  • cpu : 指定项目只能在特定的 CPU 体系上运行

    • "cpu": ["x64", "ia32"]
      

第三方配置

  • types/typings : 指定 TypeScript 的类型定义的入口文件

    • "types": "./index.d.ts",
      
  • unpkg : 让 npm 上所有的文件都开启 CDN 服务

    • "unpkg": "dist/vue.global.js"
      # 当我们想通过 CDN 的方式使用链接引入 vue 时。访问 unpkg.com/vue 会重定向到 unpkg.com/vue@3.2.37/3.2.27 是 Vue 的最新版本。
      
  • jsdelivr : 与 unpkg 类似

    • "jsdelivr": "dist/vue.global.js",
      # 访问 cdn.jsdelivr.net/npm/vue 实际上获取到的是 jsdelivr 字段里配置的文件地址
      
  • browserslist : 设置项目的浏览器兼容情况,babel 和 autoprefixer 等工具会使用该配置对代码进行转换。当然你也可以使用 .browserslistrc 单文件配置。

    • "browserslist": [
        "> 1%",
        "last 2 versions"
      ]
      
  • sideEffects : 显示设置某些模块具有副作用,用于 webpack 的 tree-shaking 优化

    • 比如在项目中整体引入 Ant Design 组件库的 css 文件。

    • import 'antd/dist/antd.css'; // or 'antd/dist/antd.less'
      
    • 如果 Ant Design 的 package.json 里不设置 sideEffects,那么 webapck 构建打包时会认为这段代码只是引入了但并没有使用,可以 tree-shaking 剔除掉,最终导致产物缺少样式。
      所以 Ant Design 在 package.json 里设置了如下的 sideEffects,来告知 webpack,这些文件具有副作用,引入后不能被删除

    • "sideEffects": [
        "dist/*",
        "es/**/style/*",
        "lib/**/style/*",
        "*.less"
      ]
      
  • lint-staged : 用于对 git 的暂存区的文件进行操作的工具,比如可以在代码提交前执行 lint 校验,类型检查,图片优化等操作

    • "lint-staged": {
        "src/**/*.{js,jsx,ts,tsx}": [
          "eslint --fix",
          "git add -A"
        ]
      }
      
    • lint-staged 通常配合 husky 这样的 git-hooks 工具一起使用。git-hooks 用来定义一个钩子,这些钩子方法会在 git 工作流程中比如 pre-commit,commit-msg 时触发,可以把 lint-staged 放到这些钩子方法中

  • eslintConfig : eslint的配置可以写在单独的配置文件.eslintrc.json 中,也可以写在package.json文件的eslintConfig配置项中

    • "eslintConfig": {
        "root": true,
        "env": {
          "node": true
        },
        "extends": [
          "plugin:vue/essential",
          "eslint:recommended"
        ],
        "rules": {},
        "parserOptions": {
          "parser": "babel-eslint"
        },
      }
      
  • babel : babel用来指定Babel的编译配置

    • "babel": {
        "presets": ["@babel/preset-env"],
        "plugins": [...]
      }
      
  • gitHooks : gitHooks用来定义一个钩子,在提交(commit)之前执行ESlint检查。在执行lint命令后,会自动修复暂存区的文件。修复之后的文件并不会存储在暂存区,所以需要用git add命令将修复后的文件重新加入暂存区。在执行pre-commit命令之后,如果没有错误,就会执行git commit命令

    • "gitHooks": {
        "pre-commit": "lint-staged"
      }
      
<think>我们正在讨论的是uni-app项目中package.json文件的配置。根据用户提供的引用和问题,我们需要整理关于uni-app在package.json配置的相关信息。 用户提供的引用内容主要涉及: 1. 多环境配置:在package.json中添加uni-app的scripts,用于区分不同环境(如开发、测试、生产)[^1]。 2. 原生插件开发:在package.json配置"_dp_nativeplugin"节点,特别是iOS平台的配置[^2]。 3. 环境变量区分:在打包发布时,如何通过package.json和mainfest.json区分环境变量[^3]。 4. 开发环境配置:通过process.env获取环境变量,根据环境设置不同的请求地址等[^4]。 用户的问题:查找关于uni-app在package.json中的配置信息,即uniapp package.json配置指南。 因此,我们需要围绕uni-app项目中package.json文件的常见配置进行说明,包括环境配置、脚本配置、原生插件配置等。 下面开始组织回答:</think>### UniApp `package.json` 配置指南 UniApp 项目中 `package.json` 是核心配置文件,用于管理项目依赖、环境变量、多端构建及脚本命令。以下是关键配置项详解: --- #### 1. **多环境配置(开发/测试/生产)** 在 `uni-app.scripts` 中定义不同环境的构建参数,通过 `env` 指定环境变量: ```json {5-10,12-15} { "uni-app": { "scripts": { "dev": { "env": { "NODE_ENV": "development", "VUE_APP_API_BASE": "https://dev.api.com" } }, "prod": { "env": { "NODE_ENV": "production", "VUE_APP_API_BASE": "https://prod.api.com" } } } } } ``` - **使用方式**: ```bash npm run dev # 加载 development 环境变量 npm run prod # 加载 production 环境变量 ``` - **代码中获取变量**: ```javascript const baseUrl = process.env.VUE_APP_API_BASE; ``` 通过 `process.env` 访问自定义环境变量[^1][^4]。 --- #### 2. **多端平台适配(如钉钉小程序)** 在 `scripts` 中为不同平台配置独立参数: ```json {5-12} { "uni-app": { "scripts": { "mp-dingtalk": { "title": "钉钉小程序", "env": { "UNI_PLATFORM": "mp-alipay", // 使用支付宝小程序引擎适配钉钉 "NODE_ENV": "production" }, "define": { "MP_DINGTALK": true // 注入全局标识 } } } } } ``` - **全局标识使用**: ```javascript if (typeof MP_DINGTALK !== 'undefined') { console.log("当前是钉钉小程序环境"); } ``` 此配置允许 UniApp 编译时自动注入平台标识[^1]。 --- #### 3. **原生插件配置(iOS/Android)** 通过 `_dp_nativeplugin` 节点配置原生插件: ```json {3-9} { "_dp_nativeplugin": { "ios": { "plugins": [ { "name": "CameraPlugin", "path": "native/ios/Camera" } ] }, "android": { "permissions": ["CAMERA"] } } } ``` - **作用**:声明原生模块路径和所需权限,确保打包时正确集成[^2]。 --- #### 4. **Git 钩子与代码检查** 利用 `gitHooks` 和 `lint-staged` 实现提交前自动校验: ```json {3-12} { "gitHooks": { "pre-commit": "lint-staged" // 提交前触发 }, "lint-staged": { "*.{js,vue,ts}": [ "eslint --fix", // 自动修复可修复的错误 "git add" // 将修复后的文件重新加入暂存区 ] } } ``` - **效果**:仅对暂存区文件执行 ESLint,避免全量检查[^1]。 --- #### 5. **浏览器兼容性(`browserslist`)** 控制代码转译范围,确保多端兼容性: ```json { "browserslist": [ "Android >= 4.4", // 支持 Android 4.4 及以上 "ios >= 9" // 支持 iOS 9 及以上 ] } ``` 此配置影响 Babel 和 Autoprefixer 的编译行为,例如: - `Android >= 4.4`:转译 ES6 语法,添加 CSS 前缀 `-webkit-`。 --- ### 最佳实践建议 1. **环境分离**: - 为开发、测试、生产环境定义独立的 `NODE_ENV` 和接口地址[^1][^4]。 2. **平台条件编译**: - 使用 `#ifdef MP-DINGTALK` 在代码中编写平台专有逻辑。 3. **自动化校验**: - 通过 `lint-staged` 减少代码检查耗时,确保团队代码风格统一[^1]。 > 参考文档:[UniApp 官方配置文档](https://uniapp.dcloud.io/collocation/package)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值