阅读 283

🔥🔥 前端必知必会 | 一文快速掌握package.json

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

前言

在每个node项目或者模块的根目录下,通常会有一个叫做package.json文件,它定义了这个项目所需要的各个模块信息和版本,以及整个项目的配置信息,例如项目的名称,版本,描述等等信息...

大多数的开发者对package.json的了解只是在:

  • 项目名称、构建版本、许可证的设置
  • 在script中优化运行脚本
  • 项目依赖记录

其实,package.json的作用在此只是冰山一角,我们还可以配置更多的属性来实现更多的功能,下面我们将带你深入认识package.json

简单的package.json

我们通过npm init命令来初始化一个node模块,看看它的package.json文件。(package.json文件可以手写出来)

{
  # 项目名称
  "name": "island",
  # 项目版本
  "version": "1.0.0",
  # 项目描述
  "description": "",
  # 入口文件
  "main": "index.js",
  # 脚本
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  # 作者
  "author": "QC2168",
  # 许可证
  "license": "ISC"
}
复制代码

属性说明

必备属性

package.json中可以配置很多的属性,其中nameversion属性是必不可少的,这两个属性是npm模块的唯一标识。

name

设置模块的名称,用于告知模块的名称。

  • 命名规则
    • 名称必须少于 214 个字符,且不能包含空格,只能包含小写字母、连字符(-)或下划线(_)。
    • 不能以点(.)或下划线(_)开头。
    • 名称中不得包含大写字母。
    • 必须仅使用URL安全字符。
{
	"name": "island"
}
复制代码
version

设置你的模块版本号,此属性遵循版本的语义版本控制记法,这意味着版本始终以 3 个数字表示:x.x.x

  • 版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
    • 主版本号:当你做了不兼容的 API 修改
    • 次版本号:当你做了向下兼容的功能性新增
    • 修订号:当你做了向下兼容的问题修正
  • 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸

详细请阅读语义化版本 2.0.0:semver.org/lang/zh-CN/

{
  "author": "QC2168"
}
复制代码

关于描述信息

keywords

该属性是设置模块中的关键词,当我们使用npm检索模块时,会对模块中的description字段和keywords字段进行匹配,写好 package.json中的 descriptionkeywords 将有利于增加我们模块的曝光率。如果你没有打算发布到npm,可以忽略这个属性

{
	"keywords": ["server", "osiolabs", "express", "compression"]
}
复制代码
description

该属性填写的是对该模块的描述内容,方便于用户了解这个模块。同时,包管理器也会把这个值作为搜索的关键词

{
	"description": "感谢你的阅读,动动你的小手来个赞"
}
复制代码

关于协议

license

该属性是设定模块的许可证,让用户了解它们是在什么授权下使用此包,以及还有哪一些限制条件,例如MIT开源,很宽松的协议,基本上你什么都可以干,只要保留作者版权即可。

{
	"license": "MIT"
}
复制代码

engines

该属性是告知开发者此项目 / 模块要运行的 Node.js 或其他命令的版本。

"engines": {
  "node": ">= 6.0.0",
  "npm": ">= 3.0.0",
  "yarn": "^0.13.0"
}
复制代码

关于维护 / 开发

author

设置模块的作者名称,你可以以字符串 / 对象的形式填写,以对象形式填写可以填写更多关于作者的详细信息。

{
  "author": "QC2168"
}

or

{
  "name": "QC2168",
  "GitHub": "https://github.com/QC2168"
}
复制代码
contributors

你还可以在你的模块中配置其他贡献者的信息,contributors是一个数组类型的属性,你可以以字符串 / 对象形式存放贡献者的信息。

{
  "contributors": ["QC2168"]
}

or

{
  "contributors": [
    {
      "name": "QC2168",
      "GitHub": "https://github.com/QC2168"
    }
  ]
}
复制代码

关于程序

main

该属性设置模块的入口位置,当项目导入模块时,应用程序会在该位置搜索模块导出。

通常是项目根目录下的index.js文件

{
	"main": "src/index.js"
}
复制代码

关于发布配置

private

该属性是设置该模块是否可以被发布到npm中,通常我们会将非开源的项目把这个属性设置为true,可防止模块被意外发布的事情发生。

{
	"private": "true"
}
复制代码
files

该属性是用于当我们执行npm publish时,只发布的目录或者文件 (以下写法指的是只发布dist目录下的文件)。

  "files": [
    "dist/"
  ],
复制代码

关于脚本任务

scripts

定义一组npm脚本,每次执行 npm run,就会新建一个 shell,然后在里面执行制定的脚本命令。

  "scripts": {
    "watch": "webpack --watch",
    "build": "webpack  --config webpack.build.config.ts",
    "start": "webpack serve --config webpack.dev.config.ts"
  },
复制代码
config

该属性用于配置脚本中使用的环境变量,用于脚本命令中,例如下面的配置,可以在脚本中使用process.env.npm_package_config_port进行获取。

{
  "config" : { "port" : "8080" }
}
复制代码

关于依赖包

dependencies

设置作为依赖安装的 npm 模块的列表。

npm install <模块名>
yarn add <模块名>
复制代码

当你使用 npm / yarn 安装软件模块时,模块名会自动被插入到package.jsondependencies属性里。

  "dependencies": {
    "react": "^17.0.0",
    "react-dom": "^17.0.0"
  },
复制代码
devDependencies

设置作为开发依赖安装的 npm 软件包的列表。

它们不同于 dependencies,因为它们只需安装在开发机器上,而无需在生产环境中运行代码。

npm install --save-dev <模块名>
yarn add --dev <模块名>
复制代码

当你使用 npm / yarn 安装软件模块时,模块名会自动被插入到package.jsondevDependencies属性里。

"devDependencies": {
    "webpack": "^5.38.1",
    "webpack-cli": "^4.7.0",
    "webpack-dev-server": "^3.11.2"
}
复制代码

更多信息

repository

该属性是指模块代码托管的地方。 这对想要了解源码、贡献的用户有帮助。,通常放的是GitHub仓库地址

{
  "repository": {
    "type": "git",
    "url": "https://github.com/QC2168/webpack-template.git"
  }
}
复制代码
bugs

该属性填写模块问题报告的页面,这对遇到问题的小伙伴很有帮助,它们可以通过该途径来向你反馈问题。

"bugs": {
    "url": "https://github.com/QC2168/webpack-template/issues"
  },
复制代码
homepage

该属性填写模块的主页 / 文档,用户可以更好的了解你的模块使用。

{
	"homepage": "https://github.com/QC2168/webpack-template#readme",
}
复制代码

总结

本文介绍了package.json中的大部分属性和作用,并将其分类。同时,package.json是一个Node项目的核心文件,它记录了关于整个Node项目所需要的重要信息,也是Node项目中必不可少的文件。

文章分类
前端
文章标签