package.json 详解
当我们创建一个 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
项目作者信息,贡献者。它可以有两种写法。email
和 url
是可选的。
// 方式一:
{"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 只检测暂存区的文件,所以速度很快。
安装与配置
husky
和 lint-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。
还有一些特殊的字段,比如 prettier
、unpkg
、babel
、jest
等,他们配合工具使用。
根据 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 详解相关推荐
- npm中package.json详解
通常我们使用npm init命令来创建一个npm程序时,会自动生成一个package.json文件.package.json文件会描述这个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息,格 ...
- python自动解析json_Python语言解析JSON详解
本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...
- C# - JSON详解
C# - JSON详解 转载于:https://www.cnblogs.com/macT/p/10214396.html
- Java包(package)详解
Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...
- php result json,详解JsonResult的使用方法
这篇文章主要介绍了详解mvc使用JsonResult返回Json数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. controller 中定义以下方法:public JsonResult Up ...
- Go语言从入门到精通 -【web项目实战篇】- Json详解
本节核心内容 介绍GoLang自带的json包的核心功能方法 介绍如何利用Tag对Json结构体实现更多的控制 介绍Json的编码器和解码器 介绍如何解决复合结构体的数据读取问题 介绍了开发中一些常见 ...
- Android Gson解析json详解
目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...
- Json详解以及fastjson使用教程
Json是一种轻量级的数据交换格式,采用一种"键:值"对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言.在使用Java做Web开发时,不可避免 ...
- android Json详解
Json:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.J ...
最新文章
- java -jar Incompatible argument to function
- 重装windows2003遇到的老问题:0X0000007B和显卡驱动安装不上。
- 交换器无法根据自身类型和路由键找到符合条件队列时,有哪些处理?
- rust腐蚀几人组队_直播圈近几年爆火的求生游戏,人渣基本已经凉凉,rust没挂不敢玩...
- oracle10g自带的公共同义词,Oracle10g实战教程第07讲视图、同义词、序列
- CSS transform 使 fixed 定位失效?
- 请描述定时器初值的计算方式_51单片机定时器初值计算器
- NHibernate初探(五) 多对多关系测试示例
- PHP使用缓存生成静态页面
- python爬虫使用seleium+超级鹰+Image模块自动登录12306(附源码和登录视频)
- word文档批量给图片添加题注
- 解读联想重组:终于裁员了
- kali Linux的设置和优化(双系统)
- Python零基础学习笔记(三十三)—— 窗体的控制...
- 赌运挖洞之Apache目录浏览
- 小程序开发之全栈开发(一)
- 《斯坦福极简经济学》读书笔记
- 计算机dns怎么设置方法,dns设置_dns怎么设置【步骤|图文教程】-太平洋IT百科
- 浅谈用企业微信生态做私域流量运营的策略!
- iPhone手机调试工具Safari