Nodejs使用前准备,基本使用、常用命令

Ⅰ- 壹 - nodejs 一 什么是Nodejs Nodejs是使用了Javascript这门语言来开发。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,当你安装Node的时候就自动安装了npm,是全球最大的开源库生态系统,简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
Node.js中 DOM和BOM不存在所以事件不存在,使用req.on绑定事件
二 使用Node之前的准备 先安装nvm,下载node会自动有npm命令,然后下载yarn(以后下载尽量使用yarn)
1 NVM node版本管理器和nrm镜像管理
项目中可能遇到两个项目node版本不一样,nvm可以安装多个版本node,不同版本随意切换,切记安装完NVM之后在进行Nodejs的安装从官网上下载node 安装包进行安装,官网下载地址:http://nodejs.cn/download/ 按装之后会自动安装npm
NVM下载地址:https://github.com/coreybutler/nvm-windows/releases
解决 nvm 下载慢的问题 (选择性使用cnpm,正常不会有问题)
在程序安装目录下找到 settings.txt,添加下面两行。

  • node_mirror: https://npm.taobao.org/mirrors/node/
  • npm_mirror: https://npm.taobao.org/mirrors/npm/
(1)nvm常用指令
编号 NVm命令 简介
1 nvm version或nvm -v 查看nvm版本
2 nvm install 10.6.2或者nvm i XXXX 安装node10.6.2版本(附带安装npm)
3 nvm uninstall 10.6.2 卸载node10.6.2版本
4 nvm list 查看node版本
5 nvm use 10.6.2 将node版本切换到10.6.2版本
6 nvm root 查看nvm安装路径
7 nvm install latest 下载最新的node版本和与之对应的npm版本
(2) nrm 镜像管理 安装:
yarn global add nrm

编号 nrm命令 简介
1 nrm ls 查看所有的镜像
2 nrm add name url 添加自定义的npm源,name 为自定义源名称 ,url为npm源链接
3 nrm use name 切换npm镜像 name 为自定义源名称
2 npm和yarn
npm的海量模块,使得我们开发复杂的NodeJs的程序变得更为简单。www.npmjs.com
(1) npm常用命令
编号 npm命令 简介
1 npm install XXXX 安装Node包(XXXX包名称)标注a
2 npm uninstall XXXX 卸载Node包(XXXX包名称)–save-dev(本地项目卸载)/-g(全局包卸载)
3 npm config get prefix 查看全局安装路径
4 npm init 初始化目录生成package.json配置文件
5 npm cache clean 删除安装包缓存
6 npm update XXXX 更新安装包
7 npm ls 查看本地安装包
8 npm root 查看当前包安装路径 npm root -g 查看全局包安装路径
9 npm run XXX 运行某一个命令
10 npm install 安装package.json 中的所有文件
a 标注a npm install (1)npm install XXXX-g 为全局安装
(2)npm install XXXX@5.1.1 安装特定版本插件
(3)npm install XXXX–save 会在package.json的dependencies属性下添加XXXX即发布依赖时候任依赖的插件
  • –save是对生产环境所需依赖的声明(开发应用中使用的框架,库),会压缩到线上
(4)npm install XXXX–save-dev 会在package.json的devDependencies属性下添加XXXX依赖 即开发依赖插件
  • –save-dev是对开发环境所需依赖的声明(构建工具,测试工具).正常使用npm install时,会下载dependencies和devDependencies中的模块,不会压缩到线上仅仅作为开发时候使用例如 jQuery
(2) Yarn是什么? “Yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 ,正如官方文档中写的,Yarn 是为了弥补 npm 的一些缺陷而出现的。”这句话让我想起了使用npm时的坑了:
  • npm install的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。
  • 同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义。
yarn安装
npm i yarn -g

(4) Yarn常用命令 和npm类似
编号 yarn命令 简介
1 yarn add XXXX 安装Node包(XXXX包名称)标注a
2 yarn remove XXXX 卸载Node包(XXXX包名称)yarn global remove X(删除全局)
3 yarn install或 yarn 安装package.json 中的所有文件
4 yarn update XXXX 更新安装包 不填写则安装全部
5 yarn list 列出当前项目的依赖
6 yarn config list 显示当前配置
7 yarn init 初始化目录生成package.json配置文件
8 yarn run XXX 运行某一个命令可简写yarn XXXX
a 标注a yarn install (1)yarn global add XXXX 为全局安装
(2)yarn add XXXX @5.1.1 安装特定版本插件
(3)yarn add XXXX–save yarn默认会在package.json的dependencies属性下添加XXXX即发布依赖时候任依赖的插件
(4)yarn add XXXX–dev 会在package.json的devDependencies属性下添加XXXX依赖 即开发依赖插件 yarn 简写 -D
b yarn修改全局安装路径和环境配置 解决使用yarn安装的插件不可用的情况
在终端中
#1.改变npm 全局安装位置 npm config set prefix "你的磁盘路径" #这里是我的路径 npm config set prefix "D:\appCache\nodejs\node_global"

#2. 改变 npm 缓存位置 npm config set cache "你的磁盘路径" #这里是我的路径 npm config set cache "D:\appCache\nodejs\node_cache"

然后配置一下系统环境变量
D:\appCache\nodejs\node_globalD:\appCache\nodejs\node_global\node_modules 这两个添加到你的系统环境变量中。
我们需要将 D:\appCache\yarn\global\node_modules\.bin 整个目录 添加到系统环境变量中去,否则通过yarn 添加的全局包 在cmd 中是找不到的。
检查当前yarn 的 bin的 位置
yarn global bin

检查当前 yarn 的 全局安装位置
yarn global dir

3 nodemon实时监听器
用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。
终端输入
npm install -g nodemon

安装完 nodemon 后,就可以用 nodemon 来代替 node 来启动应用:
nodemon [node.js文件](相当于 node [node.js文件])
(1) nodemon报错解决 Nodejs使用前准备,基本使用、常用命令
文章图片

在使用的时候可能会遇到这种情况nodemon无法使用的情况,首先是否全局安装npm install nodemon -g
如果还是不可以那就是没有配置环境变量以步骤
a 解决方法1
  1. 首先在终端输入命令npm config get prefix 查看npm安装路径,
  2. 复制路径打开我的电脑找到该路径下=>node_modules=>可以看到所有的安装模块找到nodemon找到bin然后复制路径
  3. 在系统环境变量的path中添加刚刚复制的路径
    我的电脑右击属性=>高级系统设置=>环境变量=>系统变量中找到path把刚刚复制的路径新建添加
  4. 重启vscode
b 解决方法2 也可以解决yarn报错问题
  1. 搜索找到powerShell以管理员的身份打开
  2. 输入set-ExecutionPolicy RemoteSigned
  3. 选择 A 或者 Y,然后重启
Ⅱ - 贰 - Nodejs模块 因为node.js是基于CommonJs规范的,所以在node.js模块系统中,每个文件都被视为是一个独立的模块。
node.js模块主要分为三类:内置模块、第三方模块、自定义模块。
一 第三方模块 在 npmjs.com官网上,我们可以下载别人已经封装好的模块到自己的项目中使用,这些模块都是第三方模块
例如 jquer 安装的时候会根据后缀安装 -g全局安装会安装在本地 不填写默认安装在本项目的node_modules(没有的话会自动创建)文件目录下
二 自定义模块 自定义模块取自网络
我们可以从官网上下载别人写好的模块直接使用,也可以按照自己的项目需要,封装模块,发布到官网上,让别人来下载使用。
这里说一下npm包发布的流程:
  1. 注册npmjs官网账号,官网地址:https://www.npmjs.com/;
  2. 创建你要发布的项目,创建完成后,在终端执行npm init -y, 生成Package.json 文件,填写包的名称、版本号、入口文件等,要保证包的名称在官网上是唯一的;
  3. 执行发布,终端输入npm login回车,输入账号,密码,登录npmjs官网;然后输npm publish,就可以将包发布到官网了;
  4. 查看,打开npmjs网站 ,进入个人中心–>packages,就可以看到发布的包;
  5. 更新,修改完代码内容后,改变package.json里面版本号,再执行npm publish,就可以更新发布了,在官网上可以看到自己发布过的版本;
  6. 使用方式,终端中使用npm i 包名称安装包,然后在文件中使用require(包名称),将包导入自己的项目中,就可以使用了;
  7. 撤销已经发布的包版本,终端中输入npm unpublish 包名称@版本号
三 内置模块 (0)常用Nodejs模块
内置模块名称 简介
url 用于处理与解析 URL
querystring 用于解析和格式化 URL 查询字符串;
http HTTP服务;
path 路径,用于处理文件路径和目录路径;
fs 文件系统,用于文件的读写操作;
events 事件触发器,用于事件的派发与监听;
(1)url
  • hostname,获取及设置 URL 的主机名部分,它和host的区别是,它不包含端口。
  • pathname,获取及设置 URL 的路径部分,也就是端口号后面的所有内容。
  • port,获取及设置 URL 的端口部分。http协议的默认端口号是80,https协议的默认端口号是443。ftp协议的默认端口号是21。
  • search,获取及设置 URL 的序列化查询部分。也就是 ?号后面的所有内容,包含?号。
url.parse() 解析传进来的路径。
(2) querystring
  • querystring.parse()将 URL 查询字符串 str 解析为键值对的集合。
  • querystring.stringify()将传入的对象拼接成字符串。
(3) http
  • http.createServer:创建server对象
  • http.get:执行http get请求
  • http.request() :一般用来发送POST请求。
(4) path
  • path.basename:返回一个路径的最后一部分
  • path.dirname:返回一个路径的目录名
  • path.extname:返回一个路径的扩展名
  • path.join:用于拼接给定的路径片段
  • path.normalize:将一个路径正常化
标注 以上详解转至另一位大神地址:https://blog.csdn.net/Charissa2017/article/details/104951488
Ⅳ - 肆 - Node的使用 一 ES6和Nodejs导出文件和导入文件 在Nodejs中导出带有./为自定义模块 内置的不需要添加路径
//es6的模块导出 export default class Box{}//node的模块导出 module.exports=obj; //默认导出一个对象exports.o=o; exports.o1=o1; exports.abc=abc; // node导出多个对象 */

//es6中导入模块 import Box from "./js/a.js"; //node中导入模块 var obj=require("./js/a"); obj.a(); obj.b();

二 创建一个Node服务 (1) 统配
const http = require('http') var app = http.createServer((request, response) => { request.method; //判断是GET请求还是POST请求 request.url; //路径端口号后面的内容 request.header; //请求头内容 request.on("data",()=>{}); //收到客户端发来的数据 request.on("end",()=>{//数据接收完毕 response.setHeader(); //设置响应头内容 response.write(str); //发送数据给客户端 response.end(); //响应完毕 }); }) app.listen(3000, () => { //开启服务 console.log('localtion start 3000') })

(2) 前后通信 在html中的请求数据的接口要对应请求的服务器接口,因为是本地服务器所以域名为当前计算机的域名
index.js
//载入http内置模块 var http = require("http"); //内置模块 将 URL 查询字符串 str 解析为键值对的集合。 var querystring = require("querystring"); var server = http.createServer(function (req, res) { // req 请求对象 // res 响应对象var datahttps://www.it610.com/article/= ""; //收到客户端发过来的数据 req.on("data", function (_data) { data += _data; }); //数据接收完毕 req.on("end", function () { //对数据的处理判断数据去除空格后长度 if (data.trim().length === 0) data = https://www.it610.com/article/req.url.split("?")[1]; else { try { //把数据转换为数组 data = https://www.it610.com/article/JSON.parse(data); } catch (error) {} } if (typeof data ==="string") { try { //将 URL 查询字符串 str 解析为键值对的集合。 data = https://www.it610.com/article/querystring.parse(data); } catch (error) { res.end("错误的消息"); return; } } // if (!data) { res.end("错误的消息"); return; } //200 为响应码 res.writeHead(200, { //解决乱码问题 "content-type": "text/html; charset=utf-8", //允许跨域请求 *代表通配符 "Access-Control-Allow-Origin": "*" //cors跨域 }); res.write((data.user ? data.user : "你没有user") + "欢迎光临"); //发送数据给客户端 res.end(); //响应完毕 }) }); //监听服务器访问设置端口号4006 //listen 参数有三个分别是端口号 IP地址 回调函数 server.listen(4006, "10.9.65.202", function () { console.log("创建服务成功") });

index.html
Document - 锐客网
//或者使用Ajax 请求数据 <-- > var obj={ user:"xietian", age:30, sex:"男" }var xhr=new XMLHttpRequest(); //XMLHTTPRequest xhr.addEventListener("load",loadHandler); xhr.open("GET","http://10.9.65.239:4006?user=xietian"); xhr.send(); function loadHandler(e){ console.log(xhr.response); }-->

0 - 0 - 知识点: 一 全局变量 __dirname:当前文件的目录
【Nodejs使用前准备,基本使用、常用命令】__filename:当前文件的绝对路径

    推荐阅读