文章目录
一、npm
npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等);
首先安装nodejs , 官网下载 nodejs
↓
安装完后打开控制台win+R 输入cmd
↓
然后输入node -v 查看版本 显示v x.x.x 表示安装成功
↓
npm是内嵌在nodejs的,nodejs安装完成后,npm自动安装,查看版本npm -v
1.1 npm基本命令
说明:npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等);
使用npm安装插件:命令提示符执行npm install [-g] [–save-dev]
;
node
插件名称。例:npm install gulp-less –save-dev
-g:
全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm,并且写入系统环境变量; 非全局安装:将会安装在当前定位目录; 全局安装可以通过命令行在任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,通过require()调用
–save:
将保存配置信息至package.json(package.json是nodejs项目配置文件)
-dev:
保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点;一般保存在dependencies的像这些express/ejs/body-parser等等
为什么要保存至package.json?因为node插件包相对来说非常庞大,所以不加入版本管理,将配置信息写入package.json并将其加入版本管理,其他开发者对应下载即可(命令提示符执行npm
install,则会根据package.json下载所有需要的包,npm install
–production只下载dependencies节点的包)。
使用npm卸载插件:npm uninstall [-g] [–save-dev] PS:不要直接删除本地插件包
删除全部插件:npm uninstall gulp-less gulp-uglify gulp-concat
借助rimraf:npm install rimraf -g 用法:rimraf node_modules
使用npm更新插件:npm update [-g] [–save-dev]
更新全部插件:npm update [–save-dev]
查看npm帮助:npm help
当前目录已安装插件:npm list
二、 cnpm
说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事
来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟
一次以保证尽量与官方服务同步。”
2.1 安装cnpm
官方网址:http://npm.taobao.org
↓
安装:命令提示符执行 npm install cnpm -g --registry=https://registry.npm.taobao.org
注意:安装完后最好查看其版本号cnpm -v或关闭命令提示符重新打开,安装完直接使用有可能会出现错误;
↓
注:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm(以下操作将以cnpm代替npm)
2.2 cnpm回调npm
如果像上面一样进行了淘宝镜像的话,那平时都需要将npm 改用成 cnpm,那如果我们想用回来npm怎么操作呢?
npm config delete registry
npm config delete disturl
或者
npm config edit
找到淘宝那两行,删除
因为我们镜像时有两种方式:
npm config set registry https://registry.npm.taobao.org
npm config set disturl https://npm.taobao.org/dist
所以知道通过哪种方式镜像的话,就对应删除即可,成功后即可使用npm了
三、npx
npx是一种在npm中安装工具,也可以被单独的下载使用
在npm 5.2.0 的时候发现会买一送一,自动安装了npx。
3.1 npx的好处
我们如果没有接触npx的时候,全局安装一些包都是通过npm的(npm install <node> -g
),但是这种方式是不推荐的,尤其在工作中,例如我们需要使用Node进行环境的开发,起初我们全局安装了Node v6.x.x的版本;由于版本的迭代,项目此时需要升级Node的版本才能继续进行开发,此时原本的项目运行在这个Node v6.x.x版本下的代码,则需要全局卸载再进行新版本的Node安装,周而复此每次需要更新全局安装的包时都要这样进行,否则项目由于环境的影响会出现报错,此时npx就出来了,它解决的问题就是这个,我们往下看,首先我们来对比一下优劣势
全局安装劣势:
- 占用本机空间
npm会在machine上创建一个目录(mac是/usr/local/lib/node_modules)存放所有global安装的包, 其实node_module占用的空间比较大的 - 版本问题
假如一个项目中的某一个dependency是全局安装的,也就意味着不同的开发人员使用的这个dependency版本完全基于本地的版本,也就会导致不同的开发人员使用不同的版本
使用npx的优势也就凸显出来了:
当在执行 npx <command>
的时候,npx会做什么事情,它的优点有哪些?
例如我们全局安装一个express时 → npx express --view=ejs <项目名称>
- 帮你在本地(可以是项目中的也可以是本机的)寻找这个 command → 找到了: 就用本地的版本 || 没找到: 直接下载最新版本,完成命令要求
- 使用完之后不会在你的本机或者项目留下任何东西
- 不会污染本机
- 永远使用最新版本的dependency
任何command都通过npx在machine任何位置使用
举个例子,在某一个项目中使用 npm install --save-dev @babel/core @babel/cli
安装babel。此时:
你在命令行中使用 babel script.js
一定会报错说babel不存在,即便你的 node_module
中babel静静的躺在那里,你只有两种方式可以使用babel
↓
你可以通过在 package.json
的script中使用babel去compile某一个directory(用 npm run-script
的形式)
↓
你也可以通过使用 ./node_modules/.bin/babel script.js
用babel去compile某一个script文件(使用babel包中的可执行文件)
从上面来看npm的局限性就很大
虽然你的node_module中有babel,等价于你的machine上有babel,但是你不能方便的在任何位置使用babel,只能通过以上的两种方式。
但是有了npx在任何位置使用babel command似乎就不是难题了
当你任何位置(根目录下/项目根目录下)运行 npx babel script.js
不会再报错说babel不存在了:npx会帮你找到本机下的babel然后运行
关于更具体的用法可以参考下面两篇文章
四、 nrm
4.1 什么是nrm
nrm 是一个 npm 源管理器,允许你快速地在 npm 源间切换。
4.2 安装nrm
在命令行执行命令,npm install -g nrm
,全局安装nrm
或者使用 npx nrm
(推荐)
4.3 使用方法
执行命令nrm ls查看可选的源
↓
nrm ls
* npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
taobao ----- https://registry.npm.taobao.org/
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
其中,带*的是当前使用的源,上面的输出表明当前源是官方源
↓
切换:如果要切换到taobao源,执行命令 nrm use taobao
↓
增加:你可以增加定制的源,特别适用于添加企业内部的私有源,执行命令 nrm add <registry> <url>
,其中reigstry为源名,url为源的路径
↓
删除:执行命令 nrm del <registry>
删除对应的源