npm简介(NPM简介)
1.1 npm的用途
NPM(node package manager),主要功能就是管理node包。
包括:安装、卸载、更新、查看、搜索、发布等。npm详细记录了每个包的信息(作者、版本、依赖、授权信息等)。是一个统一的代码包管理平台,解决了当项目依赖的代码越来越多,所维护的代码日益增加,所以需要以组件化的方式统一管理可复用的模块或工具。项目的结构清晰,减少模块的耦合低,增加开发的效率。需要变更的功能不用去维护所有项目的代码,只需维护 npm 上的版本,更新到每个项目,然后解决兼容并通过测试。
1.1.2 npm的安装
Node 已经内置了npm,所以只要安装 node 就自带了 npm
可以从Node官网安装,安装完后在控制台输入:
// 查看 node 版本
node -v
// 查看 npm 版本
npm -v
1.1.3 npm的更新
更新npm :
npm install -g npm
更新node版本:
- mac、linux:
// 先清除npm缓存:
npm cache clean -f
// 然后安装n模块:
npm install -g n
// 升级node.js到最新稳定版:
n stable
// 如果是mac升级出现错误,在命令前面加sudo
- windows:
windows 更新 node 比较简单,下载官方版本覆盖更新就行
1.2 npm的用法
1.2.1 安装包
// 本地安装
npm install <模块名称>
// 全局安装
npm install <模块名称> -g
// -dev的简写,配合package,安装到devDependencies中,推荐使用
npm install <模块名称> -D
// 同时安装多个包,模块名中间空格就行
npm install <模块名称> <模块名称> <模块名称> -D
全局安装和本地安装的区别主要是路径不同:
本地安装
- 安装包是放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
- 可以通过 require() 或 import from 来引入本地安装的包。
全局安装
- 安装包是放在 /usr/local 下或者你 node 的安装目录。
- 可以直接在命令行里使用。
npm install 安装包时发生了什么?
安装之前,npm install会先检查,项目./node_modules目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。
如果你希望,一个模块不管是否安装过,npm 都要强制重新安装,可以使用-f或--force参数。
npm install <模块名称> --force
npm 如何安装指定版本的包?
// npm 5.0.0以后的版本 --save 可以省略
npm install jquery@3.0.0 --save
1.2.2 查看安装包的信息
// 查看所有全局安装的模块
npm list -g
// 查看某个模块的版本号
npm list <模块名称>
在模块目录下的 package.json 文件中包含了该模块的详细信息,用于定义包的属性:
- name - 包名。
- version - 包的版本号。
- description - 包的描述。
- homepage - 包的官网 url 。
- author - 包的作者姓名。
- contributors - 包的其他贡献者姓名。
- dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在node_module 目录下。
- repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
- main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
- keywords - 关键字
1.2.3 更新包版本
npm update <模块名称>
1.2.4 卸载包
npm uninstall <模块名称>
1.3package.json
1.3.1 npm依赖包版本号~和^和*的区别
- ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
- ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
- * 这意味着安装最新版本的依赖包
"dependencies": {
"axios": "^0.18.0",
"xxx-ba": "*",
"xxx-filter": "*",
"xxx-util": "*",
"vant": "^1.6.17",
"vue": "^2.5.2",
"vue-router": "^3.0.1",
"vuex": "^3.1.0",
"weixin-js-sdk": "^1.4.0-test"
},
devDependencies": {
"ali-oss": "^6.0.1",
"autoprefixer": "7.2.3",
"babel-core": "6.26.0"
}
1.3.2 dependencies和devDependencies的区别
- dependencies是运行时依赖,其中的包在可运行环境才会使用
- devDependencies是开发时依赖,其中的包在开发环境才会使用
正如 1.2.1 中讲到的 --save 和 --save-dev,--save 是将包安装在dependencies下,--save-dev则是在devDependencies下。
什么情况需要devDependencies?
- dependencies,在可运行环境,只需要我们能正常运行该项目所需要的模块, 比如vue,vue-router,express等等这些,项目没有这些依赖会出错
- devDependencies,在开发环境中我们所做的单元测试,webpack,gulp,supervisor等这些工具,都只是在开发阶段需要,一旦项目投入使用便不再需要。
1.4 npm的缺陷
- 更新速度慢
- 拉取的包可能版本不同(.lock)
- 本地包支持比较落后(私有仓库)
解决方案
以上有些问题也不是不能解决,有一些另辟蹊径的方法可以避免。
类比yarn
安装速度:yarn 是同步执行所有包的下载,npm 是队列下载。所以随着安装包数量增多,yarn 的安装速度相对会更快。