当前位置: 首页 > 编程日记 > 正文

Node.js入门(含NVM、NPM、NVM的安装)

本文最初发表于博客园,并在GitHub上持续更新前端的系列文章。欢迎在GitHub上关注我,一起入门和进阶前端。

以下是正文。

Node.js的介绍

引擎

引擎的特性

JS的内核即引擎。因为引擎有以下特性:

(1)转化的作用:

  • 汽油柴油等等->动能

  • 模板+数据--->页面

  • js引擎:js 代码--->机器码\字节码

(2)移植性。

有哪些引擎

20180302_1258.png

备注:Node是用V8引擎去解析 js,此时,我们不用去考虑浏览器的兼容性问题。

什么是 Node.js

1、官方解释:

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js使用了一个事件驱动非阻塞式I/O的模型( Node.js的特性),使其轻量级又高效。 Node.js 的包管理器 nmp 是全球最大的开源库生态系统。

20180301_1540.png

如上图所示:

  • Node 内部采用 Google Chrome 的 V8 引擎,作为 JavaScript 语言解释器;

  • 通过自行开发的 libuv 库,调用操作系统资源。

2、非官方解释:

Node.js:是 JavaScript 语言在服务器端的运行环境(平台)。

3、运行环境(平台)的含义:

  • 首先,JavaScript 语言通过 Node 在服务器运行,在这个意义上,Node 有点像 JavaScript 虚拟机。

  • 其次,Node 提供大量工具库,使得 JavaScript 语言能与操作系统互动(比如读写文件、新建子进程),在这个意义上, Node 又是 JavaScript 的工具库。

总结:

Node.js 是一个 JavaScript 的运行环境(平台),不是一门语言,也不是 JavaScript 的框架。

Node 的历史

  • 2008年左右,随着 AJAX 的逐渐普及,Web 开发逐渐走向复杂化,系统化;

  • 2009年2月,Ryan Dahl 想要创建一个轻量级,适应现代 Web 开发的平台;

  • 2009年5月,Ryan Dahl 在 GitHub 中开源了最初版本,同年11月,JSConf 就安排了 Node 讲座;

  • 2010年底,Joyent 公司资助,Ryan Dahl 也加入了该公司,专门负责 Node 的开发;

  • 2011年7月,在微软的支持下登陆 Windows 平台。PS:node 的生产环境基本是在 Linux 下。

据 Node.js 创始人 Ryan Dahl 回忆,他最初希望采用 Ruby,但是 Ruby 的虚拟机效率不行。

注意:是 Node 选择了 JavaScript,不是 JavaScript 发展出来了一个 Node。

国内外的应用情况

以下几个项目都用到了 Node:

  • https://github.com/nodejs/node-v0.x-archive/wiki/Projects,-Applications,-and-Companies-Using-Node

  • https://nodejs.org/en/foundation/members/

  • https://github.com/NetEase/pomelo

还有以下几个网站:

  • LinkedIn移动版From RoR to Node.js, base on Joyent

  • Paypal From Java to Node.js

  • Twitter的队列:收集需要保存的Tweets,传给负责写入的进程

  • 知乎的推送

  • 网易、阿里、各种创业团队等

Node.js的主要应用领域

  • RESTFul API

  • 实时通信:如消息推送等

  • 高并发

  • I/O阻塞

知名度较高的Node.js开源项目

20180301_2009.png

  • express:Node.js中最有名的web服务器框架。

  • PM2:node 本来是单进程的,PM2可以实现和管理多进程。

  • jade:非常优秀的模板引擎,不仅限于 js 语言。

  • CoffeeScript:用简洁的方式展示 JavaScript 优秀的部分。

  • Atom:文本编辑器。

  • socket.io:实时通信框架。

  • mocha:功能强大的 node.js 测试框架。

Node.js 的环境配置

Node.js 安装包(不推荐)

去 Node.js 的官网下载安装包:

20180301_1505.png

我们也可以在https://nodejs.org/en/download/releases/上下载历史版本。

20180301_1507.png

注意,我们以一定要用偶数版(V4、V6等),不要用奇数版(比如V5),因为奇数版不稳定。

我们并不推荐直接采用 Node.js.msi 安装包进行安装,不方便 node 的更新,原因如下:

  • 以前版本安装的很多全局的工具包需要重新安装;

  • 无法回滚到之前的版本;

  • 无法在多个版本之间切换(很多时候我们要使用特定版本)。

因此,我们暂时先不用安装 Node.js,稍后用 NVM 的方式来安装 Node.js。

通过 NVM 安装Node.js(推荐)

NVM:node.js version manager,用来管理 node 的版本。安装的步骤如下。

(1)我们去官网下载 NVM 的安装包:

20180301_1603.png

下载下来后,直接解压到 D:\web目录下:

20180301_1610.png

(2)在上面的目录中,新建一个settings.txt文件,里面的内容填充如下:

root: D:\web\nvm
path: D:\web\nodejs
arch: 64
proxy

上方内容的解释:

  • root 配置为:当前 nvm.exe 所在的目录

  • path 配置为:node 快捷方式所在的目录

  • arch 配置为:当前操作系统的位数(32/64)

  • proxy 不用配置

(3)配置环境变量:

  • NVM_HOME = D:\web\nvm(当前 nvm.exe 所在目录)

  • NVM_SYMLINK = D:\web\nodejs (node 快捷方式所在的目录)

  • PATH += ;%NVM_HOME%;%NVM_SYMLINK%

配置成功后,重启资源管理器。

验证:(在 cmd 中输入命令)

(1)输入nvm命令查看环境变量是否配置成功:

20180301_1645.png

(2)输入 nvm ls,查看已安装的所有 node 版本。

(3)输入 nvm -v,查看 已安装的 nvm 版本。

(4)输入 node -v,查看正在使用的 node 版本。

  • 参考链接:安装npm,nvm,node

如果 node 安装失败,可以参考上面这个链接。

Mac 下安装 NVM

打开 终端.app,输入:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bashsource ~/.nvm/nvm.sh

安装以后,nvm的执行脚本,每次使用前都要激活,建议将其加入~/.bashrc文件(假定使用Bash)。激活后,就可以安装指定版本的Node。

也可以使用 Homebrew 安装(更方便,维护更简单):

brew install nvm

NVM 的常用命令

安装指定版本的node:

nvm install 版本号 [arch]

比如:nvm install 4.2.2

卸载指定版本node:

nvm uninstall 版本号

切换使用指定版本的node:

nvm use 版本号 [arch]

查看当前使用的 nvm 版本:

nvm -v

查看本地安装的所有的 node 版本:

nvm list|ls

Node 的常用命令

在 查看 node 的版本:

$ node -v

执行脚本字符串:

$ node -e 'console.log("Hello World")'

运行脚本文件:

$ node index.js
$ node path/index.js
$ node path/index

查看帮助:

$ node --help

进入 REPL 环境:

$ node

REPL 的全称:Read、Eval、 Print、Loop。类似于浏览器的控制台。

20180301_1900.png

如果要退出 REPL 环境,可以输入.exitprocess.exit()

在 VS Code 里,我们可以在菜单栏选择“帮助->切换开发人员工具”,打开console控制台。

包和 NPM

什么是包

由于 Node 是一套轻内核的平台,虽然提供了一系列的内置模块,但是不足以满足开发者的需求,于是乎出现了包(package)的概念:
与核心模块类似,就是将一些预先设计好的功能或者说 API 封装到一个文件夹,提供给开发者使用。

Node 本身并没有太多的功能性 API,所以市面上涌现出大量的第三方人员开发出来的 Package。

包的加载机制

如果 Node中自带的包和第三方的包名冲突了,该怎么处理呢?原则是:

  • 先在系统核心(优先级最高)的模块中找;

  • 然后到当前项目中 node_modules 目录中找。

比如说:

requiere(`fs`)

那加载的肯定是系统的包。所以,我们尽量不要创建一些和现有的包重名的包。

NPM的概念

包的生态圈一旦繁荣起来,就必须有工具去来管理这些包。NPM 应运而生。

NPM:Node Package Manager。官方链接: https://www.npmjs.com/

随着时间的发展,NPM 出现了两层概念:

  • 一层含义是 Node 的开放式模块登记和管理系统,亦可以说是一个生态圈,一个社区。

  • 另一层含义是 Node 默认的模块管理器,是一个命令行下的软件,用来安装和管理 Node 模块。

NPM 的安装(不需要单独安装)

NPM 不需要单独安装。默认在安装 Node 的时候,会连带一起安装 NPM:

20180302_1105.png

NVM、Node、NPM 安装之后,目录分布如下:

20180302_1134.png

20180302_1137.png

20180302_1138.png

输入 npm -v,查看 npm 的版本:

20180302_1139.png

如果上方命令无效,可能是之前的 node 并没有完全安装成功。解决办法:https://segmentfault.com/a/1190000011114680

另外,Node 附带的 NPM 可能不是最新版本,可以用下面的命令,更新到最新版本:

$ npm install npm -g

NRM的安装

由于 NPM 的资源都在国外,有时候会被墙,导致无法下载或者很慢。此时可以用到NRM。

NRM:Node Registry Manager。作用是:切换和管理包的镜像源。项目地址:https://www.npmjs.com/package/nrm

安装 NRM:

    npm install -g nrm

20180302_1208.png

NRM 的常用命令:

nrm ls  //显示全部的镜像nrm use taobao  // 使用淘宝的镜像

效果入下:

20180302_1215.png

推荐的国内加速镜像:https://npm.taobao.org/

我的公众号

想学习代码之外的软技能?不妨关注我的微信公众号:生命团队(id:vitateam)。

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:

2016040102.jpg

相关文章:

GitHub日收7000星,Windows计算器项目开源即爆红!

说起此番微软开源 Windows 计算器,有道是“春风得意马蹄疾,一日‘摘星’ 7000”……整理 | 仲培艺来源 | CSDN(ID:CSDNnews)微软又来给自己拥抱开源的决心送”证明素材“了!昨日,微软官宣在 MIT…

域环境下的***

首先还是先简要看一下域的概念吧: 域 (Domain) 是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行…

如何重构“箭头型”代码

本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各式各样的问题和想法。按道理来说这些都是编程的基本功,似乎不太值得写一篇文章,不过我觉得很多…

让数百万台手机训练同一个模型?Google把这套框架开源了

作者 | 琥珀出品 | AI科技大本营(公众号id:rgznai100)【导语】据了解,全球有 30 亿台智能手机和 70 亿台边缘设备。每天,这些电话与设备之间的交互不断产生新的数据。传统的数据分析和机器学习模式,都需要在…

【OpenCV】cv::VideoCapture 多线程测试

cv::VideoCapture多线程测试结果: 在多线程中使用抓取摄像头视频帧时线程安全的,但是,多个线程会共用摄像头的总帧率。 比如,我用两个线程测试30帧的摄像头,每个线程差多都是15帧。

都有Python了,还要什么编译器!

编译的目的是将源码转化为机器可识别的可执行程序,在早期,每次编译都需要重新构建所有东西,后来人们意识到可以让编译器自动完成一些工作,从而提升编译效率。但“编译器不过是用于代码生成的软机器,你可以使用你想要的…

【Qt】Qt发布程序时,报错: could not find or load the Qt platform plugin xcb

问题描述 Qt程序在发布时,报错: This application failed to start because it could not find or load the Qt platform plugin “xcb” in “”. Reinstalling the application may fix this problem Aborted (core dumped) 原因 没有将libqxcb…

jsky使用小记

jsky是一款深度WEB应用安全评估工具,能轻松应对各种复杂的WEB应用,全面深入发现里面存在的安全弱点。 jsky可以检测出包括SQL注入、跨站脚本、目录泄露、网页木马等在内的所有的WEB应用层漏洞,渗透测试功能让您熟知漏洞危害。 打开——新建扫…

BSP场景管理方法简介

BSP(Binary Space Partition,二叉空间分割)方法,在大型3d游戏场景管理方面,可以认为是已经证明了的,最成熟的,最经得起考验的场景管理方法。诸如虚幻系列引擎(Unreal 1,2,3)&#xf…

【Qt】Qt样式表总结(一):选择器

官方资料 https://blog.csdn.net/u010168781/article/details/81868523 注释 qss文件中使用:/**/ 来注释 样式规则 样式表由样式规则序列组成。样式规则由选择器和声明组成。选择器指定受规则影响的部件;声明指定应在小部件上设置哪些属性。 如: QLabel { color: white;…

JVM-01:类的加载机制

本文从  纯洁的微笑的博客  转载 原地址:http://www.ityouknow.com/jvm.html 类的加载机制 1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.…

CVPR 2019 | 惊艳的SiamMask:开源快速同时进行目标跟踪与分割算法

作者 | 周强(CV君)来源 | 我爱计算机视觉(公众号id:aicvml)责编 | Jane上面这张Gif图演示了 SiamMask 的效果,只需要鼠标滑动选择目标的包围框,即可同时实现目标跟踪与分割。这种视频里目标的像…

看看Entity Framework 4生成的复杂的分页SQL语句

之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题。 >>> 来看一看,瞧一瞧! 上代码: 看生成的SQL语句: 1. Entity Framework…

这份“插件英雄榜Top20”才是Chrome的正确打开方式!

作者 | zhaoolee整理 | Jane出品 | AI科技大本营(公众号id:rgznai100)前言”一入开源深似海”!给大家推荐优秀的开源项目、实用工具已经成为 AI科技大本营的固定节目。“我待开源如初恋”,逛淘宝,点收藏&am…

【Qt】Qt样式表总结(二):冲突和命名空间

Qt样式表总结(一):选择器 解决冲突 针对同一个控件的相同属性,使用多种选择器时,会出现冲突。如: QPushButton#okButton { color: gray } QPushButton { color: red } 解决冲突的规则是:更…

编程自动化,未来机器人将超越人类?

近年,创业者陈曦正专注于一个项目——编程自动化。即机器人可以自己编程,这到底意味着什么呢? 在美国科幻大片《终结者2》中,20世纪末的1997年7月3日,人类研制的全球高级计算机控制系统“天网”全面失控,机…

Repeater 嵌套 Repeater

作为一个刚入行的IT小鸟,每天学习,是必须的! 光自学肯定是不够的!由于本人IQ比较低,经常一个小问题都会想不明白。 还好有媳妇儿的帮助,才把这个功能给实现了。 现在就在这里总结下,以示敬意。o…

【Qt】Qt样式表总结(三):QObject 属性

【Qt】Qt样式表总结(一):选择器 【Qt】Qt样式表总结(二):冲突和命名空间 QObject 属性 可以使用 qproperty < 属性名称 > 语法,设置任何可以Q_PROPERTY的控件 MyLabel { qproperty-pixmap: url(pixmap.png); } MyGroupBox { qproperty-titleColor: rgb(100, 2…

CVPR2019 | 斯坦福学者提出GIoU,目标检测任务的新Loss

作者 | Slumbers&#xff0c;毕业于中山大学&#xff0c;深度学习工程师&#xff0c;主要方向是目标检测&#xff0c;语义分割&#xff0c;GAN责编 | Jane本文是对 CVPR2019 论文《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》的解…

ASP.NET页面之间传递值的几种方式

页面传值是学习asp.net初期都会面临的一个问题&#xff0c;总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说&#xff0c;常用的较简单有QueryString&#xff0c;Session&#xff0c;Cookies&#xff0c;Application&#xff0c;Server.Transfer。 一…

下一代安全威胁的内幕故事

当伊朗总统马哈茂德艾哈迈迪&#xff0d;内贾德在去年11月份宣布该国的核计划遭到软件***后&#xff0c;他证实了许多安全研究人员的猜测&#xff1a;原因是Stuxnet大爆发&#xff0c;篡改了控制处理铀所用的离心机电机的关键系统。 内贾德对这起***造成的影响轻描淡写&#xf…

国内少儿眼中的编程:“Coding即是代码”?

作者 | Greg Satell译者 | 刘旭坤责编 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;【编者按】上一个时代流行从小学奥数&#xff0c;现在“编程要从宝宝抓起”已经开始疯狂流行。随着 2017 年国务院印发《新一代人工智能发展规划》&#…

西门子发布最新版NX软件 助力零件制造的数字化

SiemensPLMSoftware近日发布最新版NXTM软件&#xff0c;集成了用于增材制造、计算机数控(CNC)加工、机器人和质量检测等新一代工具&#xff0c;以实现在统一的、集成的、端到端的系统中实现零件制造的数字化。 其中&#xff0c;用于计算机辅助制造(CAM)的先进自动化功能&#x…

【Qt】Qt国际化

参考博客&#xff1a;https://blog.csdn.net/hebbely/article/details/69388763 Qt官网&#xff1a;http://doc.qt.io/qt-5/linguist-manager.html 使用的工具 lupdate --> linguist --> lrelease 使用步骤 tr 在程序中将需要翻译的文本使用tr()函数来处理 修改pro…

回到未来 – 大胆畅想如何追赶并超越腾讯模式

其实&#xff0c;明天是什么样子&#xff0c;它就会是什么样子。 我总是喜欢幻想&#xff0c;无论是对过去还是对未来&#xff0c;对生活或是对爱情。 不过憧憬多过幻想。 一直比较关注互联网的动态&#xff0c;想象如果某某公司的某件产品如果是自己的&…

Python如何爬取实时变化的WebSocket数据

作者 | 韦世东来源 | 进击的Coder&#xff08;公众号id&#xff1a;FightingCode&#xff09;一、前言作为一名爬虫工程师&#xff0c;在工作中常常会遇到爬取实时数据的需求&#xff0c;比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图&#xff1a;Web 领域中…

【Qt】Qt样式表总结(四):CSS盒子模型

官网:http://doc.qt.io/qt-5/stylesheet-customizing.html#box-model 【Qt】Qt样式表总结(一):选择器 【Qt】Qt样式表总结(二):冲突和命名空间 【Qt】Qt样式表总结(三):QObject 属性 盒子模型 先来张图片,引自Qt官网 使用样式表时, 每个小部件都被视为具有四个同…

1.试述大数据对思维方式的重要影响。 2.详细阐述大数据、云计算、物联网之间的区别与联系。 3.简述你对大数据应用与发展的看法,以及你在这次大数据浪潮中想扮演什么角色。...

1.大数称巨量资料&#xff0c;指的是需要新处理模式才能具有更强的决策力、洞察力和流程优化能力的海量、高增长率和多样化的信息资产。所以利用大数据的人们思维更加的敏锐&#xff0c;也会对人们的思维方式产生扩大化&#xff0c;通过大量的数据进行分析&#xff0c;从而形成…

有关GetPrivateProfileString的使用方法

函数返回值为string的长度(long型),而从ini文件获得的字符串则保留在目的缓冲器中 DWORD GetPrivateProfileString( LPCTSTR lpAppName, //配置文件的section名 LPCTSTR lpKeyName, //配置文件的key名 LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPC…

【Qt】QDebug和log4cplus的联合使用

问题描述 项目开始时&#xff0c;只使用QDebug将调试信息打印到终端上。后期添加了日志管理系统&#xff0c;比如log4cplus。如何在不修改打印语句&#xff0c;比如还使用qDebug&#xff0c;就能将日志打印到文件中。 解决方法 使用qInstallMessageHandler将调试消息重定向功…