package.json探秘

221 阅读3分钟

package.json 是 Node.js 、前端项目中的一个重要文件,它用于描述项目的元信息、依赖关系和一些配置。在做 自己的研究中需要从项目中提取技术栈,要用到package.json,因此在这里记录一些关键信息。

d3.js项目为例,看看它的组成:

{
  "name": "d3",
  "version": "7.8.5",
  "description": "Data-Driven Documents",
  "homepage": "https://d3js.org",
  "repository": {
    "type": "git",
    "url": "https://github.com/d3/d3.git"
  },
  "keywords": [
    "d3",
    "dom",
    "visualization",
    "svg",
    "animation",
    "canvas"
  ],
  "license": "ISC",
  "author": {
    "name": "Mike Bostock",
    "url": "https://bost.ocks.org/mike"
  },
  "type": "module",
  "files": [
    "dist/d3.js",
    "dist/d3.min.js",
    "src/**/*.js"
  ],
  "module": "src/index.js",
  "main": "src/index.js",
  "jsdelivr": "dist/d3.min.js",
  "unpkg": "dist/d3.min.js",
  "exports": {
    "umd": "./dist/d3.min.js",
    "default": "./src/index.js"
  },
  "dependencies": {
    "d3-array": "3",
    "d3-axis": "3",
    "d3-brush": "3",
    "d3-chord": "3",
    "d3-color": "3",
    "d3-contour": "4",
    "d3-delaunay": "6",
    "d3-dispatch": "3",
    "d3-drag": "3",
    "d3-dsv": "3",
    "d3-ease": "3",
    "d3-fetch": "3",
    "d3-force": "3",
    "d3-format": "3",
    "d3-geo": "3",
    "d3-hierarchy": "3",
    "d3-interpolate": "3",
    "d3-path": "3",
    "d3-polygon": "3",
    "d3-quadtree": "3",
    "d3-random": "3",
    "d3-scale": "4",
    "d3-scale-chromatic": "3",
    "d3-selection": "3",
    "d3-shape": "3",
    "d3-time": "3",
    "d3-time-format": "4",
    "d3-timer": "3",
    "d3-transition": "3",
    "d3-zoom": "3"
  },
  "devDependencies": {
    "@observablehq/plot": "^0.6.7",
    "@observablehq/runtime": "^5.7.3",
    "@rollup/plugin-json": "6",
    "@rollup/plugin-node-resolve": "15",
    "@rollup/plugin-terser": "^0.4.0",
    "eslint": "8",
    "mocha": "10",
    "rollup": "3",
    "topojson-client": "^3.1.0",
    "vitepress": "^1.0.0-beta.2"
  },
  "scripts": {
    "test": "mocha 'test/**/*-test.js' && eslint src test",
    "prepublishOnly": "rm -rf dist && rollup -c",
    "postpublish": "git push && git push --tags",
    "docs:dev": "node --experimental-network-imports node_modules/vitepress/dist/node/cli.js dev docs",
    "docs:build": "./prebuild.sh && node --experimental-network-imports node_modules/vitepress/dist/node/cli.js build docs",
    "docs:preview": "vitepress preview docs"
  },
  "engines": {
    "node": ">=12"
  }
}

下面就来详细说明每个字段的含义和作用。

  • name:定义项目的名称,这通常是项目的文件夹名。
  • version:定义项目的版本号,遵循语义化版本 2.0.0(Semantic Versioning)。
  • description:提供对项目的简短描述。
  • main:指定项目的主要入口文件。
  • script:指定了一些可执行的脚本命令,比如启动应用、执行测试、代码规范检查...
  • dependencies:生产依赖,列出项目在生产环境运行时的依赖项。
  • devDependencies:开发依赖,列出仅在项目开发过程中需要的一些依赖项,有时生产环境并不需要一些依赖,比如测试相关、构建工具相关。
  • keywords:提供项目的关键词,便于能够更加容易的找到你的项目。
  • author:项目的作者信息。
  • license:项目的许可证信息
  • engine:指定项目所需要的node版本。
  • repository:项目仓库地址,提供了项目的版本控制信息。
  • homepage:指定项目的主页地址,比如一些官网。
  • type:指定包的类型,通常用于告诉工具如何处理你的包。例如,如果是一个 ECMAScript 模块(ESM)包,可以将 type 设置为 "module"
  • files:定义哪些文件会被包含在发布的包中。这是一个包含文件路径的数组。
  • module:用于指定 ES Module 的入口文件。当其他项目使用你的包时,如果它们支持 ES Module,它们会使用这个文件作为入口点。
  • unpkg:指定一个或多个入口文件,以便用户可以直接从 unpkg.com 引用你的包。 如果设置了 unpkg,用户可以通过在 HTML 中添加以下标签引入你的包:
<script src="https://unpkg.com/your-package"></script>
  • jsdelivr:与unpkg类似,便于用户从jsdelivr.net中直接引入。
<script src="https://cdn.jsdelivr.net/npm/your-package"></script>