当我们创建一个 Node 项目时, 需要创建一个 package.json 文件,描述这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。

你可以在命令行使用 npm help package.json 命令,将跳转到页面,查看这些字段如何使用。下面将根据该文档,进行整理。

字段信息

一般,开始一个项目时,我们会在命令行使用 npm init 命令生成 package.json 文件。

以下是 package.json 的一些字段信息:

name 项目名

{"name": "node"
}

version 描述项目的当前版本号

{"version": "0.1.0"
}

description 项目的描述

{"description": "My package"
}

main 指定项目的主入口文件

{"main": "index.js"
}

author 项目作者信息,贡献者。它可以有两种写法。emailurl 是可选的。

// 方式一:
{"name" : "lio-zero","email" : "licroning@163.com","url" : "https://www.jianshu.com/u/3f644e66afa3"
}// 方式二:
{"author": "lio-zero <licroning@163.com> (https://www.jianshu.com/u/3f644e66afa3)"
}

keywords 使用相关关键字描述项目

{"keywords": ["admin", "node", "node"]
}

license 许可证(告诉用户可以做什么和不能做什么,常见:MIT、BSD-3-Clause)

{"keywords": "MIT"
}

scripts 指定运行脚本命令的 npm 命令行缩写,比如 start 指定了运行 npm run start 时,所要执行的命令。

{"scripts": {"start": "node ./bin/xxx"}
}

repository 字段用于指定代码存放的位置。

{"repository": {"type": "git","url": "这里写上项目在 github 上的地址"}
}

您也可以添加 -y 标志来生成默认的 package.json 文件:

{"name": "demo","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC"
}

使用 npm init -y 默认生成的 package.json 文件会少一个 repository 字段,需要的话可以手动添加上去。

接下来我们将在这基础上介绍一些其他字段,他们都是可选的,也会在您使用某些 npm 命令时自动生成。

依赖

dependencies 字段指定了生产环境项目的依赖。当你添加生产环境依赖时,他会自动生成,如:npm i express

{"dependencies": {"express": "^4.17.1"}
}

devDependencies 字段指定了开发环境项目的依赖。当你添加生产环境依赖时,他会自动生成,如:npm i eslint -D

{"devDependencies": {"eslint": "^6.7.2"}
}

peerDependencies 兼容性依赖。如果你的包是插件,适合这种方式。

{"peerDependencies": {"tea": "2.x"},
}

optionalDependencies 如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm 都继续执行。那么这些依赖适合放在这里。

{"optionalDependencies": {},
}

bundledDependencies 发布包时捆绑的包名数组

{"bundledDependencies": ["renderized", "super-streams"]
}

配置

config 字段中的键作为 env 环境变量公开给脚本。

{"name": "node","config": {"foo": "hello"}
}

你可以在应用程序中使用 config 字段,当用户执行 npm run start 命令时,这个脚本就可以得到值。

console.log(process.env.npm_package_config_foo)

你可以使用下面命令改变这个值。

$ npm config set node:foo hi

lint-staged

在代码提交之前,进行代码规则检查能够确保进入 git 库的代码都是符合代码规则的。但是整个项目上运行 lint 速度会很慢,lint-staged 能够让 lint 只检测暂存区的文件,所以速度很快。

安装与配置

huskylint-staged

$ npm i husky lint-staged -D

package.json 中配置:

{"husky": {"hooks": {"pre-commit": "lint-staged"}},"lint-staged": {"*.js": "eslint --fix"}
}

git commit 时触发 pre-commit 钩子,运行 lint-staged 命令,对 *.js 执行 eslint 命令。eslint 要提前配置好。

其他

homepage 项目首页的网址。

{"homepage": "https://www.jianshu.com/u/3f644e66afa3"
}

bugs 项目的问题追踪系统的 URL 或邮箱地址,这些对遇到软件包问题的人很有帮助。

{"bugs": { "url" :"http://github.com/owner/project/issues","email" :"project@hostname.com"}
}

bin 很多的包都会有执行文件需要安装到 PATH 中去。这个字段对应的是一个 Map,每个元素对应一个{ 命令名:文件名 }。这些可执行文件的头部需要加上 #!/usr/bin/env node

{ "bin": { "npm": "./cli.js","command": "./bin/command"}
}

private 是一个布尔值。如果 private 为 true,可以保证包不会被发布到 npm。这可以防止私有 repositories 不小心被发布出去。

preferGlobal 是一个布尔值。如果你的包是个命令行应用程序,需要全局安装,就可以设为 true。

{"private": true,"preferGlobal": true
}

browserslist 指定项目所支持的浏览器版本。

{"browserslist": ["last 3 Chrome versions","last 3 Firefox versions","Safari >= 10","Explorer >= 11",]
}

engines 字段指明了该项目运行的平台,比如 Node 的某个版本或者浏览器,也可以指定适用的 npm 版本。

{"engines": {"node": ">= 12.16.2","npm": ">= 6.14.8"},
}

man 用来指定当前项目的 man 文档的位置。

{"man" :[ "./doc/calc.1" ]
}

style 指定供浏览器使用时,样式文件所在的位置。样式文件打包工具 parcelify,通过它知道样式文件的打包位置。

{"style": ["./node_modules/tipso/src/tipso.css"]
}

cpu 指定 CPU 型号。

{"cpu" : [ "x64", "ia32" ],"cpu" : [ "!arm","!mips" ]
}

os 指定项目可以在什么操作系统上运行。

{"os" : [ "darwin","linux" ],
}

files 当你发布项目时,具体哪些文件会发布上去。如果需要把某些文件不包含在项目中,添加一个 .npmignore 文件。这个文件和 gitignore 类似。

{"files": ["src","dist/*.js","types/*.d.ts"],
}

publishConfig 是一个布尔值。如果你的包是个命令行应用程序,需要全局安装,就可以设为 true。

engineStrick 是一个布尔值。如果你肯定你的程序只能在制定的 engine 上运行,设置为 true。

还有一些特殊的字段,比如 prettierunpkgbabeljest 等,他们配合工具使用。

根据 package.json 内容自动生成 README.md 文件

对于任何开源项目来说,最重要的文档就是 README。

这里介绍一个好用的工具 readme-md-generator,它将根据 package.json 文件内容自动生成漂亮 README文件

readme-md-generator 能够读取您的环境(package.json,git 配置等),创建项目的 README 文件。

以下是该模式提供的一个示例演示:

使用示例

基本配置

确保已安装 npx(自 npm 以来默认 npx 5.2.0)

只需在项目根部运行以下命令并回答问题:

$ npx readme-md-generator

或使用 -y 标志默认生成:

$ npx readme-md-generator -y

假设我们有如下配置:

{"name": "vue3","version": "0.1.0","private": true,"description": "vue3-demo","author": "lio-zero <licroning@163.com>","license": "MIT","engines": {"node": ">= 12.16.2","npm": ">= 6.14.8"},"repository": {"type": "git","url": "git+https://github.com/lio-zero/vue3.git"},"homepage": "https://github.com/lio-zero/vue3.git#readme","keywords": ["vue3","cli"],"scripts": {},"dependencies": {},"devDependencies": {}
}

效果如下:

生成 README.md

package.json 详解相关推荐

  1. npm中package.json详解

    通常我们使用npm init命令来创建一个npm程序时,会自动生成一个package.json文件.package.json文件会描述这个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息,格 ...

  2. python自动解析json_Python语言解析JSON详解

    本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...

  3. C# - JSON详解

    C# - JSON详解 转载于:https://www.cnblogs.com/macT/p/10214396.html

  4. Java包(package)详解

    Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...

  5. php result json,详解JsonResult的使用方法

    这篇文章主要介绍了详解mvc使用JsonResult返回Json数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. controller 中定义以下方法:public JsonResult Up ...

  6. Go语言从入门到精通 -【web项目实战篇】- Json详解

    本节核心内容 介绍GoLang自带的json包的核心功能方法 介绍如何利用Tag对Json结构体实现更多的控制 介绍Json的编码器和解码器 介绍如何解决复合结构体的数据读取问题 介绍了开发中一些常见 ...

  7. Android Gson解析json详解

    目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...

  8. Json详解以及fastjson使用教程

    Json是一种轻量级的数据交换格式,采用一种"键:值"对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言.在使用Java做Web开发时,不可避免 ...

  9. android Json详解

    Json:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.J ...

最新文章

  1. java -jar Incompatible argument to function
  2. 重装windows2003遇到的老问题:0X0000007B和显卡驱动安装不上。
  3. 交换器无法根据自身类型和路由键找到符合条件队列时,有哪些处理?
  4. rust腐蚀几人组队_直播圈近几年爆火的求生游戏,人渣基本已经凉凉,rust没挂不敢玩...
  5. oracle10g自带的公共同义词,Oracle10g实战教程第07讲视图、同义词、序列
  6. CSS transform 使 fixed 定位失效?
  7. 请描述定时器初值的计算方式_51单片机定时器初值计算器
  8. NHibernate初探(五) 多对多关系测试示例
  9. PHP使用缓存生成静态页面
  10. python爬虫使用seleium+超级鹰+Image模块自动登录12306(附源码和登录视频)
  11. word文档批量给图片添加题注
  12. 解读联想重组:终于裁员了
  13. kali Linux的设置和优化(双系统)
  14. Python零基础学习笔记(三十三)—— 窗体的控制...
  15. 赌运挖洞之Apache目录浏览
  16. 小程序开发之全栈开发(一)
  17. 《斯坦福极简经济学》读书笔记
  18. 计算机dns怎么设置方法,dns设置_dns怎么设置【步骤|图文教程】-太平洋IT百科
  19. 浅谈用企业微信生态做私域流量运营的策略!
  20. iPhone手机调试工具Safari

热门文章

  1. Url跳转和伪静态html解决方案
  2. SSH 官网下载地址
  3. 如何改变默认的checkbox样式
  4. 对数损失函数与最大似然损失函数
  5. Ubuntu系统安装webrtc
  6. Artemis架构解析
  7. PERT 活动图 关键路径
  8. 滑模控制学习笔记(六)
  9. html抓取网址某链接,URL 筛选小工具 提取网页中的链接地址
  10. 互联网快讯:华为正式开启二手机业务;法院审理认定阿卡索赔猿辅导20万;极米高性能投影产品获用户青睐;谷歌Pixel 6 Pro首次放弃使用高通基带