一、 package.json 的解析
{
// 必备属性
name: '', // 包名称,必须唯一
version: '', // 包版本
// 依赖
dependencies: { // 指定了项目运行所依赖的模块,开发环境和生产环境的依赖模块都可以配置到这里
antd: 'ant-design/ant-design#4.0.0-alpha.8', // 依赖包名称:GITHUB_URL, GITHUB_URL 即 github 的 username/modulename 的写法,你还可以在后面指定 tag 和 commit id
axios: '^1.2.0', // 依赖包名称:VERSION
test-js: 'file:../test', // 依赖包名称:LOCAL_PATH, LOCAL_PATH 是一个本地的依赖包路径,适用于你在本地测试一个npm包,不应该将这种方法应用于线上
test2-js: 'http://cdn.com/test2-js.tar.gz', // 依赖包名称:DWONLOAD_URL, DWONLOAD_URL 是一个可下载的tarball压缩包地址
}, // 生产环境依赖
devDependencies: { }, // 开发环境依赖,不会被安装到生产环境
peerDependencies: {
react: '>=16.0.0'
}, // 兼容依赖, 用于指定你正在开发的模块所依赖的版本以及用户安装的依赖包版本的兼容性,这里面的依赖会强制宿主环境安装
optionalDependencies: { }, // 不阻断安装依赖,与peerDependencies类似,但不会强行安装
bundleDependencies: [], // 打包依赖,值是一个数组,数组里可以指定一些模块,这些模块将在这个包发布时被一起打包
// 目录、文件相关
main: 'lib/index.js', // 程序入口, 实际上引入的就是 lib/index.js 中暴露出去的模块。
bin: {
webpack: './bin/webpack.js'
}, // 命令行工具入口, 当你的模块是一个命令行工具时,你需要为命令行工具指定一个入口,即指定你的命令名称和本地可指定文件的对应关系。如果是全局安装,npm 将会使用符号链接把可执行文件链接到 /usr/local/bin,如果是本地安装,会链接到 ./node_modules/.bin/
files: ['dist', 'lib', 'es'], // 发布文件配置, 用于描述你 npm publish 后推送到 npm 服务器的文件列表,如果指定文件夹,则文件夹内的所有内容都会包含进来
man: [], // man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息
directories: {
lib: 'src/lib/',
bin: 'src/bin/',
man: 'src/man/',
doc: 'src/doc/',
example: 'src/example/'
}, // 规范项目目录,即文件必须要这么命名
// 描述信息
description: '', // 描述-描述信息, 用于添加模块的的描述信息,方便别人了解你的模块
keywords: [], // 描述-关键字,用于给你的模块添加关键字,利于模块检索
author: {}, // 作者-主要作者
contributors: [], // 作者-贡献者
homepage: 'https://github.com/ant-design/ant-design-pro#readme', // 用于指定该模块的主页
repository: {
type: 'git',
url: 'git+https://github.com/ant-design/ant-design.git'
}, // 地址-代码仓库
bugs: {
url: 'https://github.com/ant-design/ant-design/issues'
}, // 地址-提交bug地址
//协议
license: 'MIT/Apache/GPL/...', // 开源协议
// 脚本配置
script: {
test: 'jest --config .jest.js --no-cache',
dist: 'antd-tools run dist',
compile: 'antd-tools run compile',
build: 'npm run compile && npm run dist'
}, // 用于配置一些脚本命令的缩写
config: { port : '8080' }, // 用于配置脚本中使用的环境变量
// 发布配置
private: false, // 限制发布,属性设置为 true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。
preferGlobal: false, // 警告本地安装,如果你的 node.js 模块主要用于安装到全局的命令行工具,那么该值设置为 true ,当用户将该模块安装到本地时,将得到一个警告。这个配置并不会阻止用户安装,而是会提示用户防止错误使用而引发一些问题
publishConfig: {
registry: 'https://registry.npmjs.org/'
}, // 限制发布仓库和版本, 可以配置只发布某个 tag、配置发布到的私有 npm 源
os: [ '!win32' ], // 限制用户安装系统
cpu: [ 'x64', 'ia32' ] // 精准的限制用户安装环境
}
二、剖析包版本管理机制
-
查看npm包版本
- 执行 npm view react version 查看 react 的最新版本
- 执行 npm view react versions 查看 react 在npm服务器上所有发布过的版本
- 执行 npm ls 可查看当前仓库依赖树上所有包的版本信息
-
SemVer规范
- 标准版本
SemVer规范的标准版本号采用 X.Y.Z 的格式,其中 X、Y 和 Z 为非负的整数,且禁止在数字前方补零。X 是主版本号、Y 是次版本号、而 Z 为修订号。每个元素必须以数值来递增。- 主版本号(major):当你做了不兼容的API 修改
- 次版本号(minor):当你做了向下兼容的功能性新增
- 修订号(patch):当你做了向下兼容的问题修正
- 先行版本
当某个版本改动比较大、并非稳定而且可能无法满足预期的兼容性需求时,你可能要先发布一个先行版本。
先行版本号可以加到“主版本号.次版本号.修订号”的后面,先加上一个连接号再加上一连串以句点分隔的标识符和版本编译信息。- 内部版本(alpha)
- 公测版本(beta)
- 正式版本的候选版本rc: 即 Release candiate
- 发布版本
在修改 npm 包某些功能后通常需要发布一个新的版本,我们通常的做法是直接去修改 package.json 到指定版本。如果操作失误,很容易造成版本号混乱,我们可以借助符合 Semver 规范的命令来完成这一操作:- npm version patch : 升级修订版本号
- npm version minor : 升级次版本号
- npm version major : 升级主版本号
- 标准版本
-
版本工具使用
在开发中肯定少不了对一些版本号的操作,如果这些版本号符合 SemVer规范 ,我们可以借助用于操作版本的npm包semver来帮助我们进行比较版本大小、提取版本信息等操作。 -
依赖版本管理
"dependencies": { "signale": "1.4.0", "figlet": "*", "react": "16.x", "table": "~5.4.6", "yargs": "^14.0.0" }- “signale”: “1.4.0”: 固定版本号
- “figlet”: “*”: 任意版本(>=0.0.0)
- “react”: “16.x”: 匹配主要版本(>=16.0.0 <17.0.0)
- “react”: “16.3.x”: 匹配主要版本和次要版本(>=16.3.0 <16.4.0)
- ~: 当安装依赖时获取到有新版本时,安装到 x.y.z 中 z 的最新的版本。即保持主版本号、次版本号不变的情况下,保持修订号的最新版本。
- ^: 当安装依赖时获取到有新版本时,安装到 x.y.z 中 y 和 z 都为最新版本。即保持主版本号不变的情况下,保持次版本号、修订版本号为最新版本。
npm outdated 可以帮助我们列出有哪些还没有升级到最新版本的依赖: 黄色表示不符合我们指定的语意化版本范围 - 不需要升级 ,红色表示符合指定的语意化版本范围 - 需要升级
npm update 会升级所有的红色依赖。 -
锁定依赖版本
- 升级依赖: 修改 package.json文件的依赖版本,执行 npm install
- 降级依赖: 直接执行 npm install package@version(改动package.json不会对依赖进行降级)
- 注意改动依赖后提交lock文件
3. node_module 里的package.json
node_module里的 package.json 里有一些下划线的参数,这些是在执行 npm install 的时候 npm 保存了一些有用的信息在里面,并不是原来的包的作者写上去的,所以在开源项目的文档中找到不到这些参数的解析。这些参数只是提供一些额外的信息,并不会对项目产生影响
参考链接:
链接1
4448

被折叠的 条评论
为什么被折叠?



