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
  • 弊端:这两种方式只能搭建一个版本
  • 搭建方式三
    • 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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐