Node JS 的基本使用
一、概述1.什么是Node.jsNode.js是一个基于"ChromeV8引擎"的JavaScript"运行环境";2.什么是V8引擎V8引擎是一款专门解释和执行JS代码的虚拟机,任何程序只要集成了V8引擎都可以执行JS代码例如将V8引擎嵌入到浏览器中,那么我们写的JavaScript代码就会被浏览器所执行;将V8引擎嵌入到NodeJS中,那么我们写的JavaScript代码就会被NodeJS所执
·
1.概述
- 1.什么是Node.js
- Node.js 是一个基于"Chrome V8 引擎" 的JavaScript "运行环境";
- 2.什么是V8引擎
- V8引擎是一款专门解释和执行JS代码的虚拟机, 任何程序只要集成了V8引擎都可以执行JS代码;
- 例如
- 将V8引擎嵌入到浏览器中,那么我们写的JavaScript代码就会被浏览器所执行;
- 将V8引擎嵌入到NodeJS中,那么我们写的JavaScript代码就会被NodeJS所执行;
- 3.什么是运行环境
- 运行环境 就是 生存环境
- 地球是人类的生存环境
- 浏览器是网页的生存环境
- windows是.exe应用程序的生存环境
- Android是.apk应用程序的生存环境
- 也就是说,运行环境就是特定事物的生存环境
- NodeJS也是一个生存的环境, 由于NodeJS中集成了V8引擎
- 所以NodeJS是JavaScript应用程序的一个生存环境
- 运行环境 就是 生存环境
- 4.总结
- NodeJS不是一门编程语言, NodeJS是一个运行环境;
- 由于这个运行环境集成了V8引擎, 所以在这个运行环境下可以运行我们编写的JS代码
- 这个运行环境最大的特点就是提供了操作"操作系统底层的API"
- 通过这些底层API我们可以编写出网页中无法实现的功能(诸如: 打包工具, 网站服务器等)
2.环境搭建
- 搭建方式一
- 1.官网下载.msi安装包: https://nodejs.org/zh-cn/
- 2.全程 下一步
- 3.在命令行工具中输入 node -v
- 搭建方式二
- 1.官网下载.zip安装包: https://nodejs.org/zh-cn/
- 2.解压下载好的安装包
- 3.在"高级系统设置"中手动配置环境变量
- 4.在命令行工具中输入 node -v
- 弊端:这两种方式只能搭建一个版本
- 搭建方式三
- 1.下载 NVM:https://github.com/coreybutler/nvm-windows
- https://github.com/coreybutler/nvm-windows/releases/download/1.1.7/nvm-noinstall.zip
-
- 2.在D盘创建dev目录
- 3.在Dev目中,创建两个子目录NVM和Node, 并且把nvm包解压进去nvm目录中
- 4.在install.cmd文件上面右键选择【以管理员身份运行】
- 在终端中直接按下回车
- 将弹出的文件另存为到NVM目录
- 5.打开settings.txt文件. 修改
- root:D:\Developer\Dev\VNM
- path:D:\Developer\Dev\Node
- 6.配置环境变量
- 属性-高级系统设置-环境变量-系统变量-新建
- NVM_HOME:D:\Developer\Dev\VNM
- NVM_SYMLINK:D:\Developer\Dev\Node
- 在Path中添加 %NVM_HOME% 和 %NVM_SYMLINK%
- 7.在命令行工具中输入 nvm version
- NVM常用命令
- nvm list #查看当前安装的Node.js所有版本
- nvm install 版本号 #安装指定版本的Node.js
- nvm uninstall 版本号 #卸载指定版本的Node.js
- nvm use 版本号 #选择指定版本的Node.js
3.Node程序执行方式
- 1.由于浏览器中集成了V8引擎, 所以浏览器可以解释执行JS代码
- 1.1 可以直接在浏览器控制台中执行JS代码
- 1.2 可以在浏览器中执行JS文件中的JS代码
- 2.由于NodeJS中也集成了V8引擎, 所以浏览器可以解释执行JS代码
- 2.1 可以直接在命令行工具中编写执行JS代码 (REPL -- Read Eval Print Loop:交互式解释器)
- 2.2 可以在命令行工具中执行JS文件中的JS代码
- 3.可以在WebStorm或VSCode中执行
WebStorm:需要配置 node.exe 和 npm 存放地址
VSCode:需要安装 Code Runner 插件
let a = 10;
let b = 20;
let res = a + b;
console.log(res);
4.Node环境和浏览器环境区别
- NodeJS环境,和浏览器环境一样,都是一个JS的运行环境, 都可以执行JS代码。但是由于 宿主不同,所以特点也有所不同
- 1.内置对象不同
- 浏览器环境中提供了window全局对象
- NodeJS环境中的全局对象不叫window, 叫 global
- 2.this默认指向不同
- 浏览器环境中全局 this,默认指向 window
- NodeJS环境中全局 this,默认指向空对象 { }
- 3.API不同
- 浏览器环境中,提供了操作节点的DOM相关API,和操作浏览器的BOM相关API
- NodeJS环境中,没有HTML节点也没有浏览器, 所以NodeJS环境中没有DOM/BOM
5.全局对象属性
官网地址:http://nodejs.cn/api/
- 和浏览器一样,Node环境中的全局对象,也提供了很多方法属性供我们使用
- __dirname:当前文件所在文件夹的绝对路径
- __filename:当前文件的绝对路径
- setInterval / clearInterval:设置 / 清理 定时器(每隔多久执行一次)
- setTimeout / clearTimeout:设置 / 清理 定时器(多久之后开始执行)
- console:打印函数
// 输出当前执行文件所在目录
console.log(__dirname); // c:\Users\86191\Desktop\Node-Study
// 输出当前执行文件的绝对路径
console.log(__filename); // c:\Users\86191\Desktop\Node-Study\02-global-属性.js
// 2秒后执行
// setTimeout(function(){
// console.log('123')
// },2000);
// 每隔1秒执行一次
// setInterval(() => {
// console.log('111')
// }, 1000);
6.模块
1.什么是模块
- 1.1 浏览器开发中的模块
- 在浏览器开发中为了避免命名冲突, 方便维护等等
- 我们采用类或者立即执行函数的方式,来封装JS代码, 来避免命名冲突和提升代码的维护性
- 其实这里的一个类或者一个立即执行函数,就是浏览器开发中一个模块
let obj = {
模块中的业务逻辑代码
};
(function(){
模块中的业务逻辑代码
window.xxx = xxx;
})();
- 存在的问题
- 没有标准没有规范
- 1.2 NodeJS开发中的模块
- NodeJS 采用 CommonJS 规范,实现了模块系统;
- 1.3 CommonJS规范
- CommonJS规范规定了如何定义一个模块, 如何暴露(导出)模块中的变量函数, 以及如何使用定义好的模块;
- 在CommonJS规范中一个文件就是一个模块;
- 在CommonJS规范中,每个文件中的变量函数都是私有的,对其他文件不可见的;
- 在CommonJS规范中,每个文件中的变量函数,必须通过 exports 暴露(导出)之后 其它文件才可以使用;
- 在CommonJS规范中,想要使用其它文件暴露的变量函数,必须通过 require() 导入模块才可以使用;
03-a.js
// 定义变量
let name = 'lilygg';
// 定义函数
function sum(a ,b){
return a + b;
}
// 暴露定义的变量与函数
exports.str = name;
exports.fn = sum;
03-b.js
// 导入模块
let aModule = require('./03-a');
console.log(aModule);
console.log(aModule.str);
console.log(aModule.fn(1,2));
2.暴露模块中的变量与函数
- 1.通过 exports.xxx = xxx 导出
- 2.通过 module.exports.xxx = xxx 导出
- 3.通过 global.xxx = xxx 导出(不推荐)
- 注意点
- 无论通过哪种方式导出, 使用时都需要先导入(require)才能使用
- 通过global.xxx方式导出不符合CommonJS规范, 不推荐使用
04-a.js
// 定义变量
let name = 'lilygg';
// 定义函数
function sum(a ,b){
return a + b;
}
// 暴露定义的变量与函数
// 方式1:
// exports.str = name;
// exports.fn = sum;
// 方式2:
// module.exports.str = name;
// module.exports.fn = sum;
// 方式3:(不推荐)
global.str = name;
global.fn = sum
04-b.js
// 导入模块
let aModule = require('./04-a');
// console.log(aModule);
// console.log(aModule.str);
// console.log(aModule.fn(1,2));
console.log(str);
console.log(fn(10, 20));
- exports 与 module.exports 的区别:
-
exports 只能通过 exports.xxx 方式导出数据, 不能直接赋值
-
module.exports 既可以通过 module.exports.xxx 方式导出数据, 也可以直接赋值
-
注意:在企业开发中,无论哪种方式都不要直接赋值
-
05-a.js
// 定义变量
let name = 'lilygg';
// 定义函数
function sum(a ,b){
return a + b;
}
// 暴露定义的变量与函数
// exports = name; // {}
module.exports = name; // lilygg
05-b.js
// 导入模块
let aModule = require('./05-a');
console.log(aModule);
3.require注意点
- 1.require导入模块时,可以不添加导入模块的类型
- 如果没有指定导入模块的类型, 那么会依次查找.js,.json,.node文件
- 无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们
- 2.导入自定义模块时,必须指定路径
- require可以导入"自定义模块(文件模块)"、"系统模块(核心模块)"、"第三方模块"
- 导入"自定义模块"模块时前面必须加上路径
- 导入"系统模块"和"第三方模块"是不用添加路径
- 3.导入"系统模块"和"第三方模块"是不用添加路径的原因
- 如果是"系统模块"直接到环境变量配置的路径中查找
- 如果是"第三方模块"会按照module.paths数组中的路径依次查找
7.Node包管理
1.什么是包
- 前面说过在编写代码的时候尽量遵守单一原则,也就是一个函数尽量只做一件事情
- 例如: 读取数据函数/写入数据函数/生成随机数函数等等,不要一个函数既读取数据又写入数据又生成随机数,这样代码非常容易出错, 也非常难以维护
- 在模块化开发中也一样, 在一个模块(一个文件中)尽量只完成一个特定的功能,但是有些比较复杂的功能可能需要由多个模块组成
- 例如: jQuery选择器相关的代码在A模块, CSS相关的代码在B模块, ...
- 我们需要把这些模块组合在一起才是完成的 jQuery
- 那么这个时候我们就需要一个东西来维护多个模块之间的关系,这个维护多个模块之间关系的东西就是"包"
- 简而言之:一个模块是一个单独的文件, 一个包中可以有一个或多个模块
2.NodeJS 包管理
- 在NodeJS中为了方便开发人员发布、安装和管理包, NodeJS推出了一个包管理工具
- NPM(Node Package Manager)
- NPM 不需要我们单独安装, 只要搭建好NodeJS环境,就已经自动安装好了
- NPM 就相当于电脑上的"QQ管家软件助手", 通过NPM我们可以快速找到我们需要的包
- 可以快速安装我们需要的包, 可以快速删除我们不想要的包等等
8.NPM的使用
(1).NPM包安装方式
- 本地安装:所安装的包,只能在当前项目(目录)下使用;
- 全局安装:所安装的包,在所有的目录下均可以使用;
- 1.1 全局安装 (一般用于安装全局使用的工具, 存储在全局node_modules中)
- npm install -g 包名 (默认安装最新版本)
- npm uninstall -g 包名
- npm update -g 包名 (更新失败可以直接使用install)
- npm config list #查看npm配置(D:\Program Files\nodejs\node_global)
- 全局安装,会安装到 D:\Program Files\nodejs\node_global 目录下
- 1.2 本地安装 (一般用于安装当前项目使用的包, 存储在当前项目node_modules中)
- npm install 包名 #安装
- npm install 包名@版本号 #安装指定版本的包
- npm uninstall 包名 #卸载
- npm update 包名 #更新
- 本地安装,在安装之前,需要先执行 npm init -y 初始化 package.json 文件
(2).初始化本地包
- npm init #初始化 package.json 文件
- npm init -y #初始化 package.json 文件
- -y 表示 -yes,就是在init时省去了敲回车的步骤,生成的默认的 package.json文件
- 直接在vscode中使用( Ctrl + ` 打开vscode终端 )
- npm install 包名 --save #生产环境( npm install 包名 )
- npm install 包名 --save-dev #开发环境
- package.json:包描述文件,定义了当前项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。
- 注意点:package.json文件中, 不能加入任何注释
- npm install:会根据 package.json 配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
- 将项目拷贝给其它人, 或者发布的时候, 我们不会将 node_modules 也给别人, 因为太大
- npm i #所有的包都会被安装
- npm i --production #只会安装dependencies中的包
- npm i --development #只会安装devDependencies中的包
- dependencies:生产环境包的依赖,一个关联数组,由包的名称和版本号组成
- devDependencies:开发环境包的依赖,一个关联数组,由包的名称和版本号组成
- 因为有的包可能只在开发阶段需要, 但是在上线阶段不需要, 所以需要分开指定
9.NRM的使用
(1).什么是 nrm
- 由于 npm 默认回去国外下载资源, 所以对于国内开发者来说下载会比较慢
- 所以就有人写了一个 nrm 工具, 允许你将资源下载地址从国外切换到国内
(2).nrm 的使用
- npm install -g nrm #全局安装NRM
- nrm --version #查看nrm版本,验证是否安装成功
- npm ls #查看允许切换的资源地址
- npm use taobao #将下载地址切换到淘宝
- PS:淘宝资源地址和国外的地址内容完全同步,淘宝镜像与官方同步频率目前为10分钟一次以保证尽量与官方服务同步;
10.CNPM的使用
(1).什么是 cnpm
- 由于 npm 默认会去国外下载资源, 所以对于国内开发者来说下载会比较慢
- cnpm 就是将下载源从国外切换到国内下载, 不过是将所有的指令从 npm 变为 cnpm 而已
(2).cnpm 的使用
- npm install cnpm -g –registry=https://registry.npm.taobao.org #全局安装CNPM
- cnpm -v #查看cnpm版本,验证是否安装成功
- 使用方式同 npm, 例如:npm install jquery 变成 cnpm install jquery 即可
11.YARN的使用
(1).什么是YARN
- Yarn 是由 Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具
- Yarn 是为了弥补 npm5.0之前 的一些缺陷而出现的
- 注意点
- 在 npm5.0之前,yarn的优势特别明显.但是现在NPM已经更新到6.9.x甚至7.x了,
- 随着NPM的升级,NPM优化甚至超越Yarn,所以个人还是建议使用NPM
(2).NPM的缺陷
- 2.1 npm install 的时候,巨慢
- npm 是按照队列执行每个 package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装
- 2.2 同一个项目,npm install 的时候,无法保持一致性
- “5.0.3”表示安装指定的5.0.3版本,
- “~5.0.3”表示安装5.0.X中最新的版本,
- “^5.0.3”表示安装5.X.X中最新的版本
(3).YARN的优点
- 3.1 速度快
- 并行安装:而 Yarn 是同步执行所有任务,提高了性能
- 离线模式:如果之前已经安装过一个软件包,用Yarn再次安装时之间从缓存中获取,就不用像 npm 那样再从网络下载了
- 3.2 安装版本统一
- 为了防止拉取到不同的版本,Yarn 有一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号
(4).YARN的安装
- npm install -g yarn #全局安装YARN
- yarn --version #查看yarn版本,验证是否安装成功
(5).YARN的使用
- 5.1 初始化包
- yarn init -y
- 5.2 安装包
- yarn add xxx (生产环境)
- yarn add xxx --save
- yarn add xxx --dev (开发环境)
- 5.3 移除包
- yarn remove xxx
- 5.4 更新包
- yarn upgrade xxx --latest
- 5.5 全局安装
- yarn global add xxx
- yarn global upgrade xxx
- yarn global remove xxx
更多推荐
已为社区贡献14条内容
所有评论(0)