# 介绍
主要属性介绍:
- name:包名称,必须少于 214 个字符,不能包含空格,只能包含小写字母、连字符
-
或下划线_
,这是因为当软件包在 npm 上发布时,它会基于此属性获得自己的 URL。 - main:引用时,指定默认位置。
- private:设置 true 可以防止意外地发不到 npm
- engines:设置了该包使用了哪个版本的 node
- browserslist:用于告知要支持哪些浏览器
- version:版本号
x.x.x
,这些数字的含义是,金修复缺陷的版本是补丁版本,引入向后兼容的更改的版本是次版本,具有重大更改的是主版本。 - licennpmse:软件包的许可证
- keywords:关键字,便于搜索用
# package.json官方字段
https://docs.npmjs.com/files/package.json (opens new window)
# package.json非官方字段
https://segmentfault.com/a/1190000016365409
# 软件包版本
语法使用了 semver(语义版本控制),具有以下规则:
~
: 如果写入的是 〜0.13.0,则只更新补丁版本:即 0.13.1 可以,但 0.14.0 不可以。^
: 如果写入的是 ^0.13.0,则要更新补丁版本和次版本:即 0.13.1、0.14.0、依此类推。*
: 如果写入的是 *,则表示接受所有的更新,包括主版本升级。>
: 接受高于指定版本的任何版本。>=
: 接受等于或高于指定版本的任何版本。<=
: 接受等于或低于指定版本的任何版本。<
: 接受低于指定版本的任何版本。
还有其他规则:
- 无符号:仅接收指定的特定版本。
- latest:使用可用的最新版本。
还可以在范围内组合以上大部分内容,例如:1.0.0 || >=1.1.0 <1.2.0,即使用 1.0.0 或从 1.1.0 开始但低于 1.2.0 的版本。
# 入口
# main
定义了 npm
包的入口文件,browser 环境和 node 环境均可使用
# bin
指定包指令
# module
非官方字段。定义 npm
包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用
# exports
Node.js 12+ 支持它作为“main”的替代方案,可以支持定义子路径导出和条件导出,同时封装内部未导出的模块。路径必须使用"./"开头
{
"exports": {
".": {
"import": "./dist/mymodule.mjs"
}
}
}
# resolutions
强行指定某个包的依赖包版本
"resolutions": {
"foo/bar": "1.0.0" // 这里的 key"foo/bar"表示foo的直接依赖bar,把版本区间重写成1.0.0。
"foo/**/bar": "1.0.0" // 不是直接依赖时,可以使用这种写法
"bar": "1.0.0" // 所有依赖这个包都指向这个版本
}
# browser
定义 npm
包在 browser 环境下的入口文件
# 优先级
browser
= browser+mjs
> module
> browser+cjs
> main
# 总结
如果 npm
包导出的是 ESM 规范的包,使用 module
如果 npm
包只在 web 端使用,并且严禁在 server 端使用,使用 browser。
如果 npm
包只在 server 端使用,使用 main
如果 npm
包在 web 端和 server 端都允许使用,使用 browser 和 main
其他更加复杂的情况,如npm
包需要提供 commonJS 与 ESM 等多个规范的多个代码文件,请参考上述使用场景或流程图
参考:https://juejin.cn/post/6844903862977953806
# files
files是一个文件数组,描述了将软件包作为依赖项安装时要包括的条目。如果在数组里面声明了一个文件夹,那也会包含文件夹中的文件。某些特殊文件和目录也被包括或排除在外,无论它们是否存在于文件数组中。
以下文件无论是否设置,总是包含:
* `package.json`
* `README`
* `CHANGES`/`CHANGELOG`/`HISTORY`
* `LICENSE`/`LICENCE`
* `NOTICE`
* The file in the “main” field
以下文件总是被忽略:
* `.git`
* `CVS`
* `.svn`
* `.hg`
* `.lock-wscript`
* `.wafpickle-N`
* `.*.swp`
* `.DS_Store`
* `._*`
* `npm-debug.log`
* `.npmrc`
* `node_modules`
* `config.gypi`
* `*.orig`
* `package-lock.json`(use shrinkwrap instead)
# dependencies
# Git URLs as Dependencies
Examples:
git+ssh://git@github.com:npm/cli.git#v1.0.27
git+ssh://git@github.com:npm/cli#semver:^5.0
git+https://isaacs@github.com/npm/cli.git
git://github.com/npm/cli.git#v1.0.27
实例:
{
...
"dependencies": {
"remember-scroll": "git+ssh://git@github.com:fengxianqi/remember-scroll.git#v0.1.1",
},
"devDependencies": {
...
}
}
# publishConfig
设置推送时候的地址:"publishConfig": { "registry": "https://registry.npmjs.com/"}
# type, typing(非官方字段)
就像 main
字段一样,定义一个针对 TypeScript
的入口文件。指定该字段后,vscode会自动引入类型提示。