nodejs项目实战教程04——npm相关概念及其使用
1. 包
之前的文章提到Nodejs可以使用核心模块和自定义模块,还可以使用第三方模块,所谓第三方模块,就是其他人写的模块(也可以是一组具有相互依赖关系的模块),他们发布到网上,我们下载后使用。但是通常我们把下载的某个第三方模块简称为包。
以md5这个包为例:在包的入口文件能够看到引用的其他模块
但是我们通常可以直接通过包的package.json文件查看包的主文件入口以及相关依赖模块等信息。
2. npm
npm是随同Nodejs一起安装的包管理工具,我们可以通过npm命令下载各种各样的包,这些包的源代码我们可以在https://www.npmjs.com/找到。目前为止,npm仍然是世界上最大的开放源代码的生态系统,它的使用场景有以下3种:
(1)允许用户从npm服务器下载别人编写的第三方包到本地使用。(这也是开发者最经常使用的功能)
(2)允许用户从npm服务器下载并安装别人编写的命令行程序(工具)到本地使用。(比如前面安装的nodemon或者supervisor)
(3)允许用户将自己编写的包或者命令行程序上传到npm服务器供别人使用。(可以参考我之前写的一篇文章《从零开始写node包,并完成发布、下载、使用和删除(最完整版)》)
3. npm常用命令
1.安装模块(包)
// ModuleName指代包的名称
npm install ModuleName
比如安装md5软件包,我们可以使用 npm install md5
进行下载,另外install在此时可以简写为 i ,即 npm i md5
同样可以安装md5模块
2.安装指定版本的包
npm install ModuleName@版本号
3.查看包的版本号
(1)查看当前包的所有历史版本号
npm view ModuleName versions
以md5软件包为例:
(2)查看当前包的最新版本
npm view moduleName version
以md5软件包为例:
(3)查看当前包的最新版本及更多信息
npm info moduleName
以md5软件包为例:
3.查看本地当前目录下安装的node包
npm list
为了说明,先安装md5和silly-datetime两个软件包,再执行 npm list
:
同样,也可以直接在node_modules平级的package.json文件中的dependencies中看到下载的包(根据翻译,此时也可以称为依赖)
4.卸载模块
npm uninstall ModuleName
以silly-datetime包为例:
可以看到package.json中的依赖项和mode_modules的依赖文件夹都已经删除,有时候需要刷新一下文件夹。
当需要删除的包过多时,我们还可以通过删除package.json文件中的dependencies中的需要删除的包和整个node_modules文件夹,然后再重新 npm i
下载整个项目的包。
5.安装整个项目的包
在第一次下载项目的时候,通常因为考虑到文件大小的问题,上传者不会上传node_modules文件夹,所以我们就需要通过package.json文件重新下载node_modules中的依赖。进入到整个项目的package.json的上一级目录,执行:
npm i
5.生成package.json
我们使用 npm i moduleName
命令安装依赖的时候也会自动生成package.json文件。
npm init --yes
6.查看当前npm版本
npm -v
4. package.json
创建package.json
npm init
或者
npm init --yes
我们在安装依赖的时候 npm i moduleName
,也会自动生成package.json文件。那么这两种生成package.json的方式有什么不同呢?
4.1 安装依赖生成的package.json文件
4.2 使用 npm init --yes
生成的package.json文件:
通过对比,不难直接通过安装依赖生成的package.json文件只有dependencies属性,而通过 npm init --yes
命令生成的package.json则更像是一个包的说明文档(注意package.json不允许添加注释,否则会报错,以下注释是为了说明而添加的),唯独缺少了dependencies属性:
{
"name": "demo04", // 包的文件夹
"version": "1.0.0", // 包的版本号
"description": "", // 包的描述
"main": "index.js", // 包的入口文件
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], // 包的关键词
"author": "", // 包的作者
"license": "ISC", // 包的执照
"dependencies": { // 包的依赖
"md5": "^2.3.0"
}
}
但是如果此时我们再安装依赖:
就会发现dependencies依赖属性就会出现了。
4.3 安装依赖后再执行npm init
通过安装依赖生成了package.json的项目,还可以再次使用 npm init
或者 npm init --yes
重新生成package.json文件吗?直接试试看。
4.3.1 使用 npm init
可以看到使用命令 npm init
按照提示可以设置package.json的属性值,预览,确定最终生成package.json文件,并且仍然保留原来的依赖,只是位置提前到了第一个。
4.3.2 使用npm init --yes
ctrl + z恢复package.json文件,再次使用 npm init --yes
命令初始化package.json:
发现除了属性是默认值外,和 npm init
命令作用相同,并且仍然保留原来的依赖。
5.安装淘宝镜像
淘宝npm镜像是一个完整的npmjs.org镜像,服务部署在国内(安装依赖速度会更快),和官方服务同步频率为10分钟一次,因此可以使用淘宝镜像代替官方版本使用。
npm包官网:http://www.npmjs.org
淘宝 npm 镜像官网:https://npm.taobao.org/
下载安装淘宝镜像命令行工具:
npm install -g cnpm --registry=https://registry.npmmirror.com
安装后就可以使用 cnpm 替代 npm 除了 publish 之外的所有命令,比如:
cnpm i moduleName