nvm、nrm、npm、npx、yarn 小结
nvm (Node Version Manage)
- https://github.com/coreybutler/nvm-windows
- 常用命令:
- nvm version
- nvm install latest
- nvm install 版本号
- nvm uninstall 版本号
- nvm list
- nvm use 版本号
nrm
-
nrm 是一个管理 npm 源的工具。用来切换官方 npm 源和国内的 npm 源(如: cnpm),当然也可以用来切换官方 npm 源和公司私有 npm 源
-
全局安装
npm i nrm -g
-
查看当前 nrm 内置的几个 npm 源的地址:
nrm ls
-
切换到 cnpm:
nrm use cnpm
-
添加新源:
nrm add [名字] [源地址]
-
删除源:
nrm del [名字]
npm
-
npm i express --save
/npm i express -S
(安装 express,同时将 express 写入依赖) -
npm i express --save-dev
/npm i express -D
(安装express,同时将 express 写入devDependencies) -
npm i express --save --save-exact
(安装express,同时将 express 写入依赖 锁定版本)
建议线上的Node.js应用都采取这种锁定版本号的方式
npm config set save-exact true
每次这样 npm i xxx --save
的时候会锁定依赖的版本号,加相当于了 --save-exact
参数。
小提示:
npm config set
命令将配置写到了〜/ .npmrc文件,运行npm config list
查看。
- 其他常用的一些命令
npm config get registry // 查看npm当前镜像源
npm config set registry https://registry.npm.taobao.org/ // 设置npm镜像源为淘宝镜像
yarn config get registry // 查看yarn当前镜像源
yarn config set registry https://registry.npm.taobao.org/ // 设置yarn镜像源为淘宝镜像
- | npm | yarn |
---|---|---|
初始化 会自动生成一个package.json文件 | npm init | yarn init |
添加模块 | npm install 包名 | yarn add 包名 |
删除模块 | npm uninstall 包名 | yarn remove 包名 |
更新模块 | npm update 包名 | |
查看node.js全局包的安装路径 | npm root -g | |
查看当前项目npm包的安装路径 | npm root | |
查看全局安装的包列表 | npm list -g --depth 0 depth 0 是限制目录层级
|
|
清空缓存 | npm cache clean | |
查看安装的模块及依赖 | npm ls / list | |
cli commands | https://docs.npmjs.com/cli-documentation/ | https://yarnpkg.com/zh-Hans/docs/cli/ |
Mac npm 全局安装目录 /usr/local/lib/node_modules
npm nvm 一直提示 没权限
// liuxinya是用户名
sudo chown -R liuxinya ~/.npm
sudo chown -R liuxinya ~/.nvm
npx
npx 想要解决的主要问题,就是方便调用项目内部安装的模块。比如,项目内部安装了测试工具 Mocha
常规执行
# 项目的根目录下执行
$ node-modules/.bin/mocha --version
npx
npx mocha --version
原理:
- npx 运行的时候,会到node_modules/ .bin路径和环境变量$PATH里面,检查命令是否存在。
- 由于 npx 会检查环境变量$PATH,所以系统命令也可以调用。
- 注意,Bash 内置的命令不在$PATH里面,所以不能用。比如,cd是 Bash 命令,因此就不能用npx cd
# 等同于 ls
$ npx ls
这里多记录一个东西 node_modules/ .bin文件
-
npm run命令会自动在环境变量$PATH添加node_modules/.bin目录,所以scripts字段里面调用命令时不用加上路径,这就避免了全局安装NPM模块。
-
npm run如果不加任何参数,直接运行,会列出package.json里面所有可以执行的脚本命令。
-
npm run会创建一个Shell,执行指定的命令,并临时将node_modules/.bin加入PATH变量,这意味着本地模块可以直接运行。