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>