本文介绍:
- nodejs环境的搭建。
- nvm工具管理nodejs版本的使用。
- npm包管理工具的使用以及命令。
☀nodejs
☀概念:
什么是nodejs?
脚本语言需要一个解析器才能运行,JavaScript是脚本语言,在不同的位置有不一样的解析器,如写入html的js语言,浏览器是它的解析器角色。而对于需要独立运行的JS,nodejs就是一个解析器。
每一种解析器都是一个运行环境,不但允许js定义各种数据结构,进行各种计算,还允许js使用允许环境提供的内置对象和方法做一些事情。如运行在浏览器中的js的用途是操作DOM,浏览器就提供了document之类的内置对象。而运行在nodejs中的js的用途是操作磁盘文件或搭建http服务器,nodejs就相应提供了fs,http等内置对象。
能做什么?
NodeJS的作者说,他创造NodeJS的目的是为了实现高性能Web服务器,他首先看重的是事件机制和异步IO模型的优越性,而不是JS。但是他需要选择一种编程语言实现他的想法,这种编程语言不能自带IO功能,并且需要能良好支持事件机制。JS没有自带IO功能,天生就用于处理浏览器中的DOM事件,并且拥有一大群程序员,因此就成为了天然的选择。
如他所愿,NodeJS在服务端活跃起来,出现了大批基于NodeJS的Web服务。而另一方面,NodeJS让前端众如获神器,终于可以让自己的能力覆盖范围跳出浏览器窗口,更大批的前端工具如雨后春笋。
因此,对于前端而言,虽然不是人人都要拿NodeJS写一个服务器程序,但简单可至使用命令交互模式调试JS代码片段,复杂可至编写工具提升工作效率。
☀安装:
此处不介绍安装,nodejs版本安装可由nvm工具管理。
☀nvm
nvm就是nodejs version manage 叫做nodejs 版本管理,而nodejs有很多版本,场景如下:
1、而你手上开发的有多个项目又分别是不同的nodejs版本,咱们就可以用nvm轻松切换!
2、假设你正在开发的项目开始使用的nodejs版本是8.0,而现在因为某些原因,你需要升级 或者 降级 nodejs 版本,也可以使用 nvm 轻松切换
☀nvm下载、安装、设置
☀下载
- nvm-noinstall.zip:绿色免安装版,但使用时需进行配置。
- nvm-setup.zip:安装版,推荐使用。
☀安装
注:安装路径不要出现中文和空格。
双击安装文件 nvm-setup.exe
选择nvm安装路径
选择nodejs路径。
这个是一个映射文件的路径,相当于快捷方式。实际安装位置默认在nvm根目录。
确认安装即可
输入 nvm v,弹出版本号,表示安装成功。
☀设置 node 和 npm 镜像地址
在nvm安装目录,找到 setting.txt加上如下两行:
1 | node_mirror: https://npm.taobao.org/mirrors/node/ |
☀nvm操作nodejs(快速上手)
☀安装
安装你要的nodejs版本,必须是npm和nodejs都成功,因为有时候会npm或者nodejs不会下载成功,不成功的原因很多,前提必须按我的这个步骤,并且是之前没有装nodejs,或者是卸载干净了nodejs。
命令:nvm install 版本号
如上表示成功了,继续检验是否真的成功,进入nvm目录查看:
下图是ok的
下图是不行的
你可以自己去下载一个nodejs版本,但后解压后放复制到nvm目录,注意命名,如:v11.11.0,这样就不需要使用 nvm install 命令。nodejs官方单独下载地址 镜像地址也可以下载更快
系统原因可能nodejs过高版本不支持低版本的操作系统,根据操作系统下载版本。个人测试win7不支持v14,可以支持v13版本。
☀nvm切换版本
1 | nvm use 版本号 |
个人理解:nvm use实际做的就是更换映射的nodejs安装位置的。
☀nvm命令整理:
注:命令中的[xxx]将字符串括起来写更加规范。也可以直接写xxx。
命令 | 说明 |
---|---|
nvm list installed nvm list ♣nvm ls | 查看已经安装的版本 |
nvm list available | 查看网络可以安装的版本 |
nvm install [version] | 安装最新版本nvm |
nvm use [version] | 切换使用指定的版本node |
nvm uninstall [version] | 卸载指定版本的nodejs。 一般卸载不干净,直接找安装目录删除即可。 |
nvm alias [name] [version] | 给不同的版本号添加别名 |
nvm unalias [name] | 删除已定义的别名 |
nvm reinstall-packages [version] | 在当前版本node环境下, 重新全局安装指定版本号的npm包。 |
nvm on | 打开nodejs控制。 |
nvm off | 关闭nodejs控制,实际将nodejs映射路径文件夹删除。 |
nvm arch | 显示node是运行在32位还是64位。 |
nvm proxy [url] | 设置下载代理。不加可选参数url,显示当前代理。 将url设置为none则移除代理。 |
nvm node_mirror [url] | 设置或者查看setting.txt中的node_mirror, 不设置默认: https://nodejs.org/dist/ |
nvm npm_mirror [url] | 设置或者查看setting.txt中的npm_mirror, 不设置默认: https://github.com/npm/npm/archive/. |
nvm root [path] | 设置和查看root路径,(存储node的目录), 如果未设置,默认使用当前目录。 |
nvm version ♣nvm v | 查看当前的版本 |
☀npm
Npm(Node Package Manager) 是node的包管理工具,是用JavaScript写出来的工具 ,被内置进了node中,新版的nodejs已经集成了npm,所以之前npm也一并安装好了。
☀命令:
☀检测是否成功安装npm
1 | npm -v |
☀使用 npm 命令安装模块
1 | npm install <Module Name> //<Module Name>指的是模块名 |
安装多个模块
1 | npm install <Module Name> <Module Name> |
检测安装
1 | npm i <Module Name> |
npm i 和 npm install 的区别,实际使用的区别点主要如下(windows下):
- 用npm i安装的模块无法用npm uninstall删除,用npm i才卸载掉 。
- npm i会帮助检测与当前node版本最匹配的npm包版本号,并匹配出来相互依赖的npm包应该提升的版本号 。
- 部分npm包在当前node版本下无法使用,必须使用建议版本。
- 安装报错时intall肯定会出现npm-debug.log 文件,npm i不一定。
☀全局安装与本地安装
npm 的包安装分为本地安装(local),全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如
1 | npm install <Module Name> # 本地安装 |
如果出现以下错误:
1 | npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 |
解决办法为:
1 | npm config set proxy null |
☀本地安装
- 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录)如果没有 node_modules 目录,会在当前执行npm 命令的目录下生成node_modules 目录
- 可以通过 require() 来引入本地安装的包
☀全局安装
- 将安装包放在 /usr/local 下或者你 node 的安装目录
如果是nvm安装的node,安装在nvm根目录下的对应node目录中。
- 可以直接在命令行里使用
☀–save本地安装保存和根据配置复原依赖安装。
☀相同点
三者都会本地安装包到项目的node_modules目录中
☀区别
区别在于对项目package.json的修改,npm install不会修改package.json,而后两者会将依赖添加进package.json,后两者的区别请看下文循序渐进。
☀指定依赖包
指定包取决于你的项目,你需要在package.json
文件中列出你需要使用的包,有两种包可以选择:
- “dependencies”: 这些包都是你的应用程序在生产环境中所需要的。
- “devDepedencies”:这些包只是在开发和测试中需要的。
☀手动编辑package.json文件
你可以手动编辑你的package.json
。你需要在包的dependencies 对象中创建一个属性用来指出你需要添加的依赖。
例如下面的项目中,在主要生产环境中使用包my_dep的版本1.0.0,而在在开发环境中使用包 my_test_framework 的3.1.0版本。
1 | { |
--save
和--save-dev
下载标签
- 他们表面上的区别是–save 会把依赖包名称添加到 package.json 文件 dependencies 键下,–save-dev 则添加到 package.json 文件 devDependencies 键下.
- dependencies是运行时依赖,devDependencies是开发时的依赖。即devDependencies 下列出的模块,是我们开发时用的
比如 我们安装 js的压缩包gulp-uglify 时,我们采用的是 “npm install gulp-uglify --save-dev”命令安装,因为我们在发布后用不到它,而只是在我们开发才用到它。dependencies 下的模块,则是我们发布后还需要依赖的模块,譬如像jQuery库或者Angular框架类似的,我们在开发完后后肯定还要依赖它们,否则就运行不了。
补充:正常使用npm install时,会下载dependencies和devDependencies中的模块,当使用npm install --production或者注明NODE_ENV变量值为production时,只会下载dependencies中的模块。个人理解:这个功能类似于Ruby的bundle管理依赖包,
bundle install
非常好用。
npm install --force
会强制重新安装所有,一般卸载出问题后,就执行此命令。
☀安装package.json
1 | npm install #安装dependencies和devDependencies。 |
❤️❤️❤️❤️❤️注意:
刚下载下来的nodejs项目 package-lock.json 会阻碍一些报的安装,需要删除。
☀覆盖安装
经过测试,多次install一个包,会覆盖原来的包。
☀查看模块的版本号
1 | npm <Module Name> grunt |
☀安装指定版本
npm install 默认安装最新版本,如果想要安装指定版本,可以在库名称后加 @版本号
1 | npm install <Module Name>@latest |
☀更新模块
1 | npm update <Module Name> |
更新升级时应该把原本的node-modules文件夹删除,不然的话可能会报错
更新并将版本保存至本地。
1 | npm install hexo-butterfly-douban --update --save |
☀卸载模块
1 | npm uninstall <Module Name> |
参数:
--save 将package.json的版本也删除
简写:
1 | npm un <Module Name> |
注意:
如果用cnpm安装,同时也用cnpm卸载。
☀查看模块信息
1 | npm list <Module Name> |
☀查看模块地址
1 | npm view <Module Name> repository.url |
很多包的地址都是托管在github上
☀查看帮助信息
1 | npm help |
☀搜索模块,验证某个模块是否存在
发布一个npm包的时候,需要检验某个模块是否已存在
1 | npm search <Module Name> |
如果存在就会显示其完整信息
☀npm获取全局安装的默认目录
1 | npm config get prefix |
☀npm设置全局安装的默认目录
1 | npm config set prefix “directory” |
☀使用淘宝 NPM 镜像
大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像
你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步
你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
这样就可以使用 cnpm 命令来安装模块了:
1 | cnpm install [name] |
☀cnpm卸载与安装步骤
1.卸载原有旧的版本:
1 | npm uninstall -g cnpm --registry=https://registry.npm.taobao.org |
2.注册模块镜像:
1 | npm set registry https://registry.npm.taobao.org |
3.node-gyp 编译依赖的 node 源码镜像
1 | npm set disturl https://npm.taobao.org/dist |
4.清空缓存
1 | npm cache clean --force |
5.重新安装cnpm
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
☀重新安装所有依赖
1 | rm node_modules/rm -rf node_modules |
☀❤️npm使用心得和注意事项
- 刚下载下来的nodejs项目 package-lock.json 会阻碍一些报的安装,个人觉得没什么用,而且也会影响自动化部署删除,包的删除和更新,所以如果项目中携带了这个文件,建议直接删除,再进行npm的系列操作。