package.json 文件是用来管理本地安装 npm 包的唯一文件。它描述了当前项目依赖的包的列表,包含项目依赖包的版本,便于项目管理和移植
一、创建
1、npm init 即可在当前目录创建一个 package.json 文件,跟着步骤选项,手动创建package.json文件
2、npm init --yes 可以跳过回答问题步骤,直接生成默认值的 package.json 文件
二、package.json两部分
比如:
{
"name": "shixinzhang-demo-package",
"version": "1.0.0"
}
其他内容:
我们可以为 init
命令设置一些默认值
> npm set init.author.email "[email protected]"
> npm set init.author.name "shixinzhang"
> npm set init.license "MIT"
在 package.json
文件中指定项目依赖的包,这样复制项目时,可以使用 npm install
下载
包有两种依赖方式:
依赖包版本选择:
版本号规范
项目的版本号都是从 1.0.0 版本开始。以后要升级版本应该遵循以下标准:
使用 npm 安装 package 有两种方式:本地(当前项目路径)安装 或者 全局安装
如果在你的项目里有 package.json
文件,运行 npm install
后它会查找文件中列出的依赖包,然后下载符合语义化版本规则的版本。
npm install
默认会安装 package.json
中 dependencies
和 devDependencies
里的所有模块。
如果想只安装 dependencies
中的内容,可以使用 --production
字段:
npm install --production
npm 使用下面的命令下载一个包:
npm install
后面就是要安装包的名称。这个命令会在当前目录创建一个 node_modules
目录,然后下载我们指定的包到这个目录中。
安装指定版本:
npm install
默认安装最新版本,如果想要安装指定版本,可以在库名称后加 @版本号
:
$ npm install sax@latest
$ npm install [email protected]
$ npm install sax@">=0.1.0 <0.2.0"
package.json
文件,下载包时会下载这个文件中指定的版本; package.json
文件,就会下载指定包的最新版本。如果下载报错:npm install error saveError ENOENT: no such file or directory, open '/Users/zhangshixin/package.json'
解决办法:
- 在目录下执行 npm init 创建 package.json,输入初始化信息
- 然后再执行下载命令
--save
和 --save -dev
添加依赖时我们可以手动修改 package.json
文件,添加或者修改 dependencies
devDependencies
中的内容即可。
另一种方式是用命令行,在使用 npm install
时增加 --save
或者 --save -dev
后缀:
下载后 node_modules
文件夹中有要使用的包,我们就可以使用其中的代码了。
比如在 Node.js 项目中,我们可以用 require(XXX)
引入它。
在使用 require('lodash')
后引入了 lodash 库,然后调用了它的 without()
方法,这个方法可以去除第一个数组参数中与第二个参数重复的数据。
保存这个文件后,使用 node index.js
运行这个文件,成功的话就可以得到运行结果[2,3];
如果报错,先先在当前目录下重新运行 npm install lodash
安装,看是否报错。
有时候我们想知道依赖的包是否有新版本,可以使用 npm outdated
查看,如果发现有的包有新版本,就可以使用 npm update
更新它,或者直接 npm update
更新所有:
一开始,我们package.json里面定义的lodash的版本是3.10.1,
当我们用npm outdated,能看到最新版本是4.17.10
要更新到最新版本,我们需要把package.json改为*,然后执行npm update
只有当前模块版本低于远程,package.json 中的版本语义规则满足情况,才能更新成功。
npm uninstall
同时node_modules/lodash文件夹,以及package.json里面的"lodash": ....也一并删除了
如果你想要直接在命令行中使用某个包,比如 jshint
,你可以全局安装它。
全局安装比本地安装多了个 -g
:
npm install -g
以 jshint
为例,全局安装命令是:
npm install -g jshint
安装后可以使用 npm ls -g --depth=0
查看安装在全局第一层的包。
3.使用其他包管理器帮你解决这个问题
卸载 node,然后使用 Homebrew 重装 node:
brew install node
Homebrew 会帮我们处理好权限的问题。
npm outdated -g --depth=0:
查看需要更新的包
npm update -g
更新指定的包:
npm update -g:
要更新所有全局包
官方说在 2.6.1 以下的 npm ,直接使用 npm update -g
并不安全,因为它会递归地更新所有全局依赖。
npm check:检查当前版本与最新版本的比照图
npm uninstall -g :
卸载全局 packagepackage.json
中 scripts
指定的脚本:{
"name": "demo",
"scripts": {
"lint": "jshint **.js",
"test": "mocha test/"
}
}
npm run 是 npm run-script 的缩写,命令行输入 npm run lint 或者 npm run-script lint 就会执行 jshint **.js 。
npm run 会创建一个Shell,执行指定的命令,并临时将node_modules/.bin加入PATH 变量,这意味着本地模块可以直接运行。
package.json 中的 scripts 执行的脚本是本地项目内 node_modules -> .bin 内的脚本。
直接运行 npm run 会列出当前项目的 package.json 中 scripts 属性下的所有脚本命令。
npm install 也可以直接从 github 下载:
$ npm install git://github.com/package/path.git
$ npm install git://github.com/package/path.git#0.1.0
npm info
npm adduser 用于在npmjs.com注册一个用户:
npm home
npm repo
npm prune “修剪”,npm prune 可以检查出当前项目的 node_modules目录中,没有在 package.json里提到的模块。