文章目录
- 前言
- 基础常识
- 一、认识Node.js
- 下载安装
- 1.1、Node.js的诞生
- 1.2、node.js运行代码的两种方式
- 1.3、node.js与浏览器的部分区别
- 二、创建第一个应用
- 三、npm使用介绍
- 常用命令
- 镜像源相关
- npm安装node_modules提示报错
- npm修改包安装路径
- npm更新
- nvm管理node.js版本
- node use切换不生效
- 参考资料
前言
本篇博客是介绍Node.js的安装配置以及npm使用,若文章中出现相关问题,请指出!
所有博客文件目录索引:博客目录索引(持续更新)
基础常识
网页渲染流程:其中会先经历HTML解析器,接着遇到css会使用css解析器,遇到js会使用JS引擎。
Chrome V8引擎
:JavaScript引擎实现,主要有两个阶段:编译与执行,在用户使用时完成编译并执行。
-
渲染引擎
:能够将HTML/CSS/JavaScript文本及相应的资源文件转换成图像结果。主要作用就是将资源文件转化为用户可见的结果。 - 可参考文章:Chrome V8引擎介绍
JavaScript
语言:是一种解释性语言,边解释边执行(在执行时已完成编译,可直接执行)。运行时确认变量类型,正因为该特性,在运行时计算和决定类型,则会严重影响语言的性能,这也是js运行效率比c++、java低很多的原因。
一、认识Node.js
下载安装
官网:Node.js。下载地址:Node.js—Downloads
1.1、Node.js的诞生
曾经的js只能运行在浏览器中,node.js出现之后不管是服务器上,还是在自己笔记本中只要安装了node.js,就可以运行js代码了。
Node.js
:基于Chrome V8引擎的js运行环境(或者说是一个js语言的解释器),基于C++开发。V8引擎执行Javascript的速度非常快,性能非常好。web前端的js代码最终还是运行在浏览器中的。运行时或产品环境下不依赖于node.js。
诞生初衷:是为了提升服务器的效率(初始是用来写服务器端的),没想到在前端中大放异彩。原本后端需要使用java、ruby、c++来写,出现node.js之后可以使用js来写后端了。现在成为前端开发的一个基本设施。
- node.js的出现让前端大爆发。如react、vue.js这些的前端框架开发的环境变得强大,node.js就是这些开发环境运行的基础。
两大优点:事件驱动,非阻塞IO。
- 当时成就
node.js
的满足条件:①js符合非阻塞模型以及事件驱动。②Chrome的V8引擎开源。
目的说明
对于前端,不懂PHP,Python等动态语言,想创建服务!
对于后端,想要部署一些高性能的服务!
1.2、node.js运行代码的两种方式
方式一:进入node.js的交互环境命令:node
1、node
:能够进入node.js的交互环境。例如普通的加法能够进行运行执行。
- 退出交互环境:
ctrl+d
。
说明:一般常见是将代码写入到文件中输出。
方式二:创建文件命令以及执行js文件的命令,将代码写入文件,接着使用命令对js文件解释执行。
创建文件命令:code xx.js
。
执行js文件:node xx.js
1.3、node.js与浏览器的部分区别
介绍三个不同点:
- ①全局变量使用不同。
- ②在node.js环境中无法使用document对象了,浏览器可以使用。在node.js环境中有
http
对象。
C:\Users\93997>node -- 进入node.js的交互环境
Welcome to Node.js v12.18.3.
Type ".help" for more information.
> http -- 查看http对象
{
_connectionListener: [Function: connectionListener],
METHODS: [
'ACL', 'BIND', 'CHECKOUT',
'CONNECT', 'COPY', 'DELETE',
'GET', 'HEAD', 'LINK',
'LOCK', 'M-SEARCH', 'MERGE',
'MKACTIVITY', 'MKCALENDAR', 'MKCOL',
'MOVE', 'NOTIFY', 'OPTIONS',
'PATCH', 'POST', 'PROPFIND',
'PROPPATCH', 'PURGE', 'PUT',
'REBIND', 'REPORT', 'SEARCH',
'SOURCE', 'SUBSCRIBE', 'TRACE',
'UNBIND', 'UNLINK', 'UNLOCK',
'UNSUBSCRIBE'
],
STATUS_CODES: {
'100': 'Continue',
'101': 'Switching Protocols',
'102': 'Processing',
'103': 'Early Hints',
'200': 'OK',
'201': 'Created',
'202': 'Accepted',
'203': 'Non-Authoritative Information',
'204': 'No Content',
'205': 'Reset Content',
'206': 'Partial Content',
'207': 'Multi-Status',
'208': 'Already Reported',
'226': 'IM Used',
'300': 'Multiple Choices',
'301': 'Moved Permanently',
'302': 'Found',
'303': 'See Other',
'304': 'Not Modified',
'305': 'Use Proxy',
'307': 'Temporary Redirect',
'308': 'Permanent Redirect',
'400': 'Bad Request',
'401': 'Unauthorized',
'402': 'Payment Required',
'403': 'Forbidden',
'404': 'Not Found',
'405': 'Method Not Allowed',
'406': 'Not Acceptable',
'407': 'Proxy Authentication Required',
'408': 'Request Timeout',
'409': 'Conflict',
'410': 'Gone',
'411': 'Length Required',
'412': 'Precondition Failed',
'413': 'Payload Too Large',
'414': 'URI Too Long',
'415': 'Unsupported Media Type',
'416': 'Range Not Satisfiable',
'417': 'Expectation Failed',
'418': "I'm a Teapot",
'421': 'Misdirected Request',
'422': 'Unprocessable Entity',
'423': 'Locked',
'424': 'Failed Dependency',
'425': 'Unordered Collection',
'426': 'Upgrade Required',
'428': 'Precondition Required',
'429': 'Too Many Requests',
'431': 'Request Header Fields Too Large',
'451': 'Unavailable For Legal Reasons',
'500': 'Internal Server Error',
'501': 'Not Implemented',
'502': 'Bad Gateway',
'503': 'Service Unavailable',
'504': 'Gateway Timeout',
'505': 'HTTP Version Not Supported',
'506': 'Variant Also Negotiates',
'507': 'Insufficient Storage',
'508': 'Loop Detected',
'509': 'Bandwidth Limit Exceeded',
'510': 'Not Extended',
'511': 'Network Authentication Required'
},
Agent: [Function: Agent] { defaultMaxSockets: Infinity },
ClientRequest: [Function: ClientRequest],
IncomingMessage: [Function: IncomingMessage],
OutgoingMessage: [Function: OutgoingMessage],
Server: [Function: Server],
ServerResponse: [Function: ServerResponse],
createServer: [Function: createServer],
get: [Function: get],
request: [Function: request],
maxHeaderSize: [Getter],
globalAgent: [Getter/Setter]
}
- ③对于ES6新特性的支持程度不同。
二、创建第一个应用
使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。
三步骤:
- ① 引入required模块载入nodejs模块
- ② 创建服务器(可监听客户端请求,如Apache、Nginx等HTTP服务器)
- ③ 可以进行接收与响应请求(服务器创建完之后,可以进行发送请求)
// ① 使用require指定载入http模块,将实例化http赋值给变量
var http = require('http');
// ② 创建服务器,使用listen来进行监听,参数为一个函数,里面编写一个请求响应
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
使用node js名称
运行访问即可!!! 浏览器访问对应http://127.0.0.1:8888/即可查看 ctrl+c
停止运行
三、npm使用介绍
npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。
官网:npm—搜索包
npm
:node的包管理系统。我们想要实现的各种功能都能找到现成的别人写好的包,直接拿来用即可。大多数一个包对应github上的一个项目,其中包含对应的文档使用会很方便。
常用场景:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
常用命令
安装npm:新版的node.js已经集成了npm工具,可以通过npm -v
来测试是否安装成功
升级npm工具:
-
npm install npm -g
- 淘宝镜像:
npm install -g cnpm --registry=https://registry.npm.taobao.org
安装模块:npm install <Module Name>
安装目录:D:\nodejs\node_modules\npm\node_modules
- npm install –save:生产环境依赖的模块dependencies,-dev就是开发环境安装的依赖放在
devDependencies
中。
npm i 包名 -g # 安装全局包
npm uninstall 包名 -g # 卸载全局包
卸载模块 :npm uninstall express
这里列举express
更新模块 :npm update express
搜索模块:npm search express
查看安装信息:npm list -g
查看某个模块版本:npm list grunt
镜像源相关
npm install -g cnpm --registry=https://registry.npm.taobao.org
查看镜像源:npm config get registry
设置淘宝镜像:npm config set registry https://registry.npm.taobao.org
设置原来地址的镜像:npm config set registry https://registry.npmjs.org
npm安装node_modules提示报错
报错: npm resource busy or locked…
解决方法:
先删除以前安装的node_modules
npm cache clean
npm install
npm修改包安装路径
npm修改包的安装位置、修改node.js默认的npm安装目录
若是我们通过一步步安装node.js的,npm下载全局模块默认安装到C盘AppData的Roaming目录下:C:/用户/[用户名]/AppData/Roming/npm/node_meodules
,之后的全局模块都会默认安装在C盘。
- 最简单的方式就是通过解压缩的形式直接指定到D盘,见:npm修改包的安装位置
对于当前全局模块设置在C盘时,如何修改见下:
- 查看你npm的相关配置:
npm config ls
。(若是想要查看所有细节:npm config ls -l
) - 在D盘的指定路径创建一个文件夹,我的是:
D:\nodejs\installnpm\npm
# 修改全局模块路径和缓存路径
npm config set prefix "D:\nodejs\installnpm\npm"
npm config set cache "D:\nodejs\installnpm\npm\cache"
- 测试安装一下是否设置成功(通过安装一个包来测试):
npm install express -g
。(若是新建的node-modules文件里有就说明成功了)
要记得添加环境变量:D:\nodejs\installnpm\npm
,否则之后安装一些包的工具不能够正常使用。
npm更新
npm 升级到最新版本:npm install -g npm
npm升级到指定版本
//比如升级到5.6.0
npm install -g npm@5.6.0
注意命令中间一个空格,多了会报错
npm与nodejs版本对应关系:https://nodejs.org/zh-cn/download/releases/
nvm管理node.js版本
nvm的下载,安装与使用
打开nvm
安装目录中的settings.txt
文件,添加node
与npm
的下载源:
root: D:\nvm
path: D:\nodejs
arch: 64
proxy: none
originalpath: .
originalversion:
# 这是两个国内镜像源
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
相关命令
下载node版本:nvm install 12.13.0
查看当前所有版本:nvm ls
使用指定node版本:nvm use 版本
nvm install latest //安装最新版本的node
nvm uninstall [version] //卸载node
nvm list available //查看可以安装的node版本
node use切换不生效
原因:
原本使用nvm下载好指定的node.js之后,使用`nvm use 版本`进行切换node.js的版本
之后我们使用nvm ls进行查看发现对应的版本号前没有*号,并且使用node -v命令没有用!
解决方法:将安装nvm
时指定的nodejs
目录名称改为nodejsx
即可!真就很奇怪,之后再次尝试切换版本即可生效!!!
参考资料
[2]. Chrome V8引擎介绍 包括网页渲染流程,输入url到生成dom树,对于chrome v8引擎的详细发展过程都有详细说明。
我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳!
欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料
Q群:851968786 我们可以一起探讨学习
注明:转载可,需要附带上文章链接