npm学习记要
文章目录
前言
npm是个前端js模块管理工具,类似maven里的pom.xml
安装npm
npm(node package manager,NPM是随同NodeJS一起安装的包管理工具,所以我们需要下载安装nodejs
下载地址,选择Windows Installer (.msi)版本安装。一路点next。
测试是否安装成功
在CMD命令行输入命令:
npm -v
有数据输出则表示安装成功
安装淘宝镜像
默认的镜像地址是:https://registry.npmjs.org/
,由于速度原因需要换成淘宝镜像
在CMD命令行执行如下命令:
npm config set registry http://registry.npm.taobao.org/
这时只是修改的镜像地址,命令还是使用npm
安装淘宝定制的 cnpm (gzip 压缩支持)
命令行工具:
npm install -g cnpm --registry=https://registry.npm.taobao.org"
以后就可以使用cnpm
代替npm
命令了
我们可以打开C:\Users\Administrator\.npmrc
文件,内容如下:
registry=http://registry.npm.taobao.org/
升级npm命令
由于npm自身的更新频率比Node.js高很多,所以通过上面的命令安装的npm可能不是最新版本
升级命令
npm install npm@latest -g
安装模块自动写入package.json命令
安装的模块分为两类
dependencies和devDependencies,分别对应生产环境需要的安装包和开发环境需要的安装包。
devDependencies开发依赖:npm install <package_name> --save-dev
dependencies生产依赖: npm install <package_name> --save
新安装的模块信息记录到package.json文件的dependencies和devDependencies依赖里。
如果安装带版本号的模块,需要在package_name后加@,例如express@1.2
版本
卸载模块自动删除package.json命令
普通的卸载命令:npm uninstall <package_name>
删除模块同时删除package.json里依赖如下
devDependencies开发依赖:npm uninstall --save
dependencies生产依赖:npm uninstall --save-dev
常用命令
常用命令中文文档
帮助命令:npm help
查看帮助命令:npm help 命令(如install)
卸载模块:npm uninstall 模块名
更新模块:npm update 模块名
搜索模块:npm search 模块名
创建模块:npm init
创建默认配置package.json创建模块:npm init --yes
清空NPM本地缓存:npm cache clear
查看当前已经安装插件:npm list
查看当前哪些包需要更新:npm outdated --depth=0
上面命令都是本地安装后使用的命令,如果是全局安装,则在尾部加个-g
查看全局安装的文件路径:npm root -g
发布模块和取消/卸载模块
发布模块:npm publish
取消模块:npm unpublish
废弃模块:npm deprecate <pkg>[@<version>] <message>
取消废弃模块:npm deprecate <pkg>[@<version>] ''
,取消作废操作,就是为message 参数指定一个空字符串("")
取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为
1 根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours)
2 即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)
npm unpublish的推荐替代命令:npm deprecate <pkg>[@<version>] <message>
使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告
更新版本
比如已经在npm中发布了一个1.0.0版本的包
1、本地更新版本号
比如我想来个1.0.1版本,注意,是最后一位修改了增1,那么命令:npm version patch
回车就可以了;
比如我想来个1.1.0版本,注意,是第二位修改了增1,那么命令 :npm version minor
回车就可以了;
比如我想来个2.0.0版本,注意,是第一位修改了增1,那么命令:npm version major
回车就可以了;
2、修改远端的版本,提交到远端npm中:
npm publish
本地安装和全局安装
本地安装安装在当前目录的node_modules目录下,没有node_modules则创建。
全局安装安装在C:\Users\Administrator\AppData\Roaming\npm\node_modules
目录下,安装命令只差-g
,
本地安装:npm install express
全局安装:npm install express -g
ps 安装nodejs时同时安装了一些模块,位置在
C:\Program Files\nodejs\node_modules\npm\node_modules
修改npm配置
以全局下载目录为例,默认下载目录在C:\Users\Administrator\AppData\Roaming\npm\node_modules
,导致C盘变大,修改在D盘的D:\node_modules_global
路径下。
打开配置
npm config list
内容如下:
D:\tmp\vsCode\test>npm config list
; cli configs
metrics-registry = "http://registry.npm.taobao.org/"
scope = ""
user-agent = "npm/6.1.0 node/v8.11.3 win32 x64"
; userconfig C:\Users\Administrator\.npmrc
registry = "http://registry.npm.taobao.org/"
; builtin config undefined
prefix = "C:\\Users\\Administrator\\AppData\\Roaming\\npm"
; node bin location = C:\Program Files\nodejs\node.exe
; cwd = D:\tmp\vsCode\test
; HOME = C:\Users\Administrator
; "npm config ls -l" to show all defaults.
prefix就是指定全局路径。
设置prefix:
npm config set prefix=D:/node_modules_global
查看prefix值:
npm config get prefix
再次打开C:\Users\Administrator\.npmrc
文件,内容如下:
registry=http://registry.npm.taobao.org/
prefix=D:/node_modules_global
#npm i和npm install的区别
两者都可以安装模块,但2者有区别
- 用
npm i
安装的模块无法用npm uninstall删除,用npm uninstall i
才卸载掉 - npm i会帮助检测与当前node版本最匹配的npm包版本号,并匹配出来相互依赖的npm包应该提升的版本号
- 部分npm包在当前node版本下无法使用,必须使用建议版本
- 安装报错时intall肯定会出现npm-debug.log 文件,npm i不一定
- npm install能生成
package.lock.json
文件,而npm i不能
总之建议使用npm install
命令
package.json作用
package.json是描述模块依赖关系以及包地址的配置文件。由于管理模块。
package-lock.json的作用
这个文件锁定了你第一次安装模块时的版本号,你和同事使用这个安装模块就不会出问题,package.json里的dependencies只能锁定大版本号,不能锁定你具体使用哪个版本号。2个json文件都是自动生成的,一般不手动修改。
#更好的依赖升级工具 —— npm-check
在中大型项目中,更新依赖需要十分谨慎,避免没有注意到新版本的依赖在 API 方面有重大更新(Breaking changes),而直接更新的情况。
官方文档npm-check
安装方法:
npm install -g npm-check
使用方法:
# 检查/更新全局依赖
$ npm-check -gu
# 检查/更新当前项目依赖
$ npm-check -u
更新全局依赖
$ npm-check -gu
更新当前项目依赖
$ npm-check -u
#yarn
#安装淘宝镜像
yarn config set registry https://registry.npm.taobao.org