1. 什么是package.json
- 官方定义:管理本地安装的npm软件包管理工具
-
a)包含package.json文件描述的程序的文件夹。
b)包含(a)的压缩tarball。
c)解析为(b)的URL。
d)<name>@<version>用(c)在注册表上发布的A。
e)<name>@<tag>指向(d)的A。
F)甲<name>,其具有latest满足标签(E)。
g)git克隆后得到(a)的URL。
// 有点看不懂
2.它可以干什么
列出您的项目所依赖的软件包。
- 允许您使用语义版本控制规则指定项目可以使用的软件包的版本。
- 使您的构建具有可复制性,因此更易于与其他开发人员共享。
3.如何快速生成一个package.json
```需要手动填写默认信息,一半我们会在编辑器中修改,这样更加的方便,所以更推荐下方的写法
npm init or npm init —yes (初始化一个空的package.json文件) or # 简写 npm init -y
1. 这是通过`npm init -y `创建的packages.json文件
```json
这是通过 npm init -y生成的package.json
请注意如果文件路径包含中文请更换成英文,否则会报错
{
"name": "my_npm-abc",// 仅支持小写字母加"_","-"
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
补充:
"dependencies":{
"包名": "版本号"
"vue": "^2.6.10",
},
"devDependencies":{
"包名": "版本号"
"vue-style-loader": "^4.1.2",
}
}
name
:当前目录名称(也是你最后发布到npm上的包名称)version
:默认版本号1.0.0
(大版本.小版本.补丁版)- 大版本,做了不兼容的API修改
- 小版本,添加了向后兼容的功能
- 补丁版,做了向后兼容的bug修复
description
:描述这个包的信息,或者为空字符串""
,有助于别人发现你的包。main
:默认为index.js(入口文件),
当前包程序的入口(定义了npm
包的入口文件,browser 环境和 node 环境均可使用)scripts
:默认情况下会创建一个空test
脚本keywords
:描述这个包的关键字,或者为空字符串""
,有利于npm搜索框展示你的包author
:这个包的作者 或者为空字符串""
license
: 使用许可说明dependencies
: 开发环境 和 生产环境 需要的包devDependencies
: 仅开发环境依赖和打包时候依赖的包,- 注意
name
是必须含有的,只能是小写英文,可以含有破折号和下划线version
是必须的 遵循semver规范- 如果中没有描述字段
package.json
,npm将使用README.md
或README 的第一行。该描述可帮助人们在搜索npm时找到您的包裹,因此在中进行自定义描述package.json
对于使您的包裹更容易查找绝对有用 - 请注意如果文件路径包含中文请更换成英文,否则会报错(创建后更改成中文不影响,因为name只能是小写的)
以下为其他附加字段解释信息
- homepage:项目主页网址
- bugs:当项目出现问题 大家可以通过你在此处提供的联系方式 上报错误 ```json { “url” : “https://github.com/owner/project/issues“ , “email” : “project@hostname.com” } or “https://github.com/owner/project/issues“
your don`t bugs:”project@hostname.com”
- contributors:贡献者,所有参与当前项目贡献的人员姓名都可以在这里列出来
- browser: 定义 `npm` 包在 browser 环境下的入口文件
- module : 定义 `npm` 包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用
- **bin:**
它是一个命令名和本地文件名的映射。在安装时,如果是全局安装(-g),npm将会使用符号链接把这些文件链接到prefix/bin,如果是本地安装,会链接到./node_modules/.bin/。<br />这样我们就可以在命令行中使用一个包提供的命令,<br />ps:设置完bin命令后请运行`npm link后,`才可以在命令行中使用
![image.png](https://cdn.nlark.com/yuque/0/2020/png/539682/1595475105069-4d4de1a0-01b4-4961-a0b8-c63fcd11e3c0.png#align=left&display=inline&height=537&margin=%5Bobject%20Object%5D&name=image.png&originHeight=537&originWidth=1116&size=51763&status=done&style=none&width=1116)
- cpu:设置指定cpu可以使用我的包,也可以将架构列入黑名单
```json
"cpu":["x64","!arm","!mips"]
- os:设置指定系统可以使用我的包
"os" : [ "darwin", "linux","!win32" ]
4.设置值init 默认属性
如果想给设置一些默认属性,不用每次init之后再去填写
npm config set init.author.name "xxx"
npm config set init.author.email "xxx@gmail.com"
npm config set init.author.url "xxx.com"
npm config set init.license "MIT"
......
*注:
- 在终端输入
npm config edit
查看配置文件信息 - 如果要编辑全局
npm
设置,使用npm config edit -g
5.安装package
- 本地安装
```
一次安装一个
npm install
一次安装多个
npm install
安装指定版本号(包尾添加版本号)
npm install
- 安装的包仅在开发环境使用 **写入到 devDependencies 对象**
安装的包仅在开发环境使用 写入到 dependencies 对象
npm install
- 安装的包开发生产环境都需要使用 **写入到 dependencies 对象**
安装的包开发生产环境都需要使用 写入到 devDependencies 对象
npm install
2. 全局安装
一次安装一个
npm install
一次安装多个
npm install
3. 全局安装和本地安装的区别
> 全局安装多半是在命令行中使用,本地安装是在当前项目中使用
<a name="3Q9y5"></a>
#### 6.更新package
1. 更新项目中过时的package
npm update
2. **问题**,但这个命令会更新项目中所有过时的package,但我们并不想更新所有的依赖,这样可能会有意外的问题发生
2. **解决**: 安装指定的项目包,那个需要更新就安装那个
npm install
4. 查看当前项目中有哪些包过时了
没有过时的包 不会有任何输出
npm untdated
![image.png](https://cdn.nlark.com/yuque/0/2020/png/539682/1594963069279-d9884ce6-15ea-4f56-b728-8c13e50729dd.png#align=left&display=inline&height=393&margin=%5Bobject%20Object%5D&name=image.png&originHeight=393&originWidth=620&size=28560&status=done&style=none&width=620)
5. 更新全局所有的包
更新全部
npm update -g
更新一个
npm update -g
6. 查找全局中所有需要更新的包
npm outdated -g —depth=0
![image.png](https://cdn.nlark.com/yuque/0/2020/png/539682/1594966547585-64ca2b53-1ef1-4676-a66b-358262d634d2.png#align=left&display=inline&height=106&margin=%5Bobject%20Object%5D&name=image.png&originHeight=129&originWidth=612&size=11354&status=done&style=none&width=501)
<a name="DIuzd"></a>
#### 7.卸载 package
1. 卸载本地包
npm uninstall
2. 卸载全局的包
npm uninstall -g
<a name="do3JN"></a>
#### 8.关于 npm script
在生成的 `package.json` 文件中,有一个 `scripts` 对象,在这个对象中,`npm` 允许使用 `scripts` 字段定义脚本命令。
```json
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"staging": "vue-cli-service build --mode staging"
},
scripts
对象中每一个key对应的value 都是一个脚本命令,我们可以通过npm run <key>
的方式去使用它 (如npm run serve
)
9. npm scripts 是如何工作的
点我调转 sctipts链接