node基础

node环境安装

  • 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我们可以编写出网页中无法实现的功能(诸如: 打包工具, 网站服务器等)

Node环境搭建

  • 搭建方式一:

  • 搭建方式二:

    • 1.官网下载.zip安装包: https://nodejs.org/zh-cn/
    • 2.解压下载好的安装包
    • 3.在"高级系统设置"中手动配置环境变量
    • 4.在命令行工具中输入 node -v
  • 搭建方式三(企业开发用,推荐):

    • 1.下载NVM: https://github.com/coreybutler/nvm-windows
    • 2.在D盘创建dev目录
    • 3.在Dev目中中创建两个子目录nvm和nodejs, 并且把nvm包解压进去nvm目录中
    • 4.在install.cmd文件上面右键选择【以管理员身份运行】,在终端中直接按下回车,将弹出的文件另存为到NVM目录
    • 5.打开settings.txt文件.
      修改root: D:\Developer\Dev\NVM
      path: D:\Developer\Dev\Node
  • 6.配置环境变量
    NVM_HOME: D:\Developer\Dev\NVM
    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

Node程序执行

  • 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代码
      • 2.3可以在webstorm中配置node.js,然后在文件中执行(==工作中推荐方式==)

Node环境和浏览器环境区别

  • 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

Node全局对象上的属性

  • 全局对象上的属性
    • __dirname: 当前文件所在文件夹的绝对路径
    • __filename: 当前文件的绝对路径
    • setInterval/clearInterval:和浏览器中window对象上的定时器一样,无限执行的定时器
    • setTimeout / clearTimeout : 和浏览器中window对象上的定时器一样,仅执行一次的定时器
    • console : 和浏览器中window对象上的打印函数一样

和浏览器一样Node环境中的全局对象也提供了很多方法属性供我们使用
中文文档地址: http://nodejs.cn/api/


Node模块

  • 什么是模块?
    • 1.1浏览器开发中的模块,在浏览器开发中为了避免命名冲突,方便维护等等.我们采用类或者立即执行函数的方式来封装JS代码,来避免命名冲突和提升代码的维护性.其实这里的一个类或者一个立即执行函数就是浏览器开发中一个模块
let obj = {
    模块中的业务逻辑代码
};
;(function(){
   模块中的业务逻辑代码
   window.xxx = xxx;
})();
  • 存在的问题: 没有标准,没有规范

  • 1.2NodeJS开发中的模块

    • NodeJS采用CommonJS规范实现了模块系统
  • 1.3CommonJS规范

    • CommonJS规范规定了如何定义一个模块,如何暴露(导出)模块中的变量函数,以及如何使用定义好的模块
      • 在CommonJS规范中一个文件就是一个模块
      • 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
      • 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用
      • 在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require('路径')导入模块才可以使用
      • 示例:
// 第一个Js文件
let name = '微双';
function sum(a,b) {
    return a + b;
}
exports.str = name;
exports.fn = sum;

// 第二个js文件
let newFn = require('./try'); // './try'就是第一个Js文件的路径

console.log(newFn.str);
console.log(newFn.fn);
let res = newFn.fn(10, 20);
console.log(res);

Node模块导出数据几种方式

  • 1.在NodeJS中想要导出模块中的变量函数有三种方式

    • 1.1通过exports.xxx = xxx导出(==推荐==)
    • 1.2通过module.exports.xxx = xxx导出(==推荐==)
    • 1.3通过global.xxx = xxx导出(不推荐)
  • ==注意点==

    • 无论通过哪种方式导出,使用时都需要先导入(require)才能使用
    • 通过global.xxx方式导出不符合CommonJS规范, 不推荐使用
exports和module.exports区别
  • 1.exports和module.exports区别

    • exports只能通过exports.xxx方式导出数据, 不能直接赋值
    • module.exports既可以通过module.exports.xxx方式导出数据, 也可以直接赋值
  • 注意点

    • ==在企业开发中无论哪种方式都不要直接赋值, 这个问题只会在面试中出现==
require注意点
  • 1.require导入模块时可以不添加导入模块的类型
    • 如果没有指定导入模块的类型,那么会依次查找.js .json .node文件.无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们
  • 2.导入自定义模块时必须指定路径
    • require可以导入"自定义模块(文件模块)"、"系统模块(核心模块)"、"第三方模块"
    • 导入"自定义模块"模块时前面必须加上路径
    • 导入"系统模块"和"第三方模块"是不用添加路径
      • 不用添加路径的原因:
        • 如果是"系统模块"直接到环境变量配置的路径中查找
        • 如果是"第三方模块"会按照module.paths数组中的路径依次查找

Node包和包管理

  • 1.什么是包?

    • 前面说过在编写代码的时候尽量遵守单一原则,也就是一个函数尽量只做一件事情
      • 例如:读取数据函数/写入数据函数/生成随机数函数等等,不要一个函数既读取数据又写入数据又生成随机数,这样代码非常容易出错, 也非常难以维护
    • 在模块化开发中也一样,在一个模块(一个文件中)尽量只完成一个特定的功能.但是有些比较复杂的功能可能需要由多个模块组成
      • 例如: jQuery选择器相关的代码在A模块, CSS相关的代码在B模块...我们需要把这些模块组合在一起才是完成的jQuery
      • 那么这个时候我们就需要一个东西来维护多个模块之间的关系
    • 这个维护多个模块之间关系的东西就是"包"
    • 简而言之: 一个模块是一个单独的文件, 一个包中可以有一个或多个模块
  • 2.NodeJS包的管理

    • 在NodeJS中为了方便开发人员发布、安装和管理包, NodeJS推出了一个包管理工具NPM(Node Package Manager)
    • NPM不需要我们单独安装,只要搭建好NodeJS环境就已经自动安装好了
    • NPM就相当于电脑上的"QQ管家软件助手",通过NPM我们可以快速找到我们需要的包,可以快速安装我们需要的包,可以快速删除我们不想要的包等等

NPM使用

  • 1.NPM包安装方式

    • 全局安装 (一般用于安装全局使用的工具, 存储在全局node_modules中)
      • npm install -g 包名 (默认安装最新版本)
      • npm uninstall -g 包名 (卸载)
      • npm update -g 包名 (更新版本) (更新失败可以直接使用install,也就是安装最新版本的指令)
    • 本地安装 (一般用于安装当前项目使用的包,存储在当前项目node_modules中)
      • npm install 包名
      • npm uninstall 包名
      • npm update 包名
  • 2.初始化本地包

    • npm init -> 初始化package.json文件
    • npm init -y -> 初始化package.json文件
    • npm install 包名 --save
    • npm install 包名 --save-dev
  • 初始化的package.json文件,也就是包描述文件,它定义了当前项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。

    • npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境
      • 注意点:==package.json文件中,不能加入任何注释==
    • dependencies:生产环境包的依赖,一个关联数组,由包的名称和版本号组成
    • devDependencies:开发环境包的依赖,一个关联数组,由包的名称和版本号组成
  • 注意:

    • 1.将项目拷贝给其它人, 或者发布的时候, 我们不会将node_modules也给别人, 因为太大。只需给.json文件即可,根据.json文件里的描述就可以下载对应的包
    • 2.因为有的包可能只在开发阶段需要,但是在上线阶段不需要, 所以需要分开指定
      • npm i npm i --development npm stall --development指令: 所有的包都会被安装(就是dependencies和devDependencies里的都会安装)
      • npm i --production指令: 只会安装dependencies中的包

NRM和CNPM使用

  • 由于npm默认回去国外下载资源,所以对于国内开发者来说下载会比较慢。可以将资源下载地址从国外切换到国内,两种方法:
    • 1.nrm工具(==推荐使用这个==)
      • npm install -g nrm指令: 安装NRM
      • nrm --version指令: 查看是否安装成功
      • npm ls指令:查看允许切换的资源地址
      • npm use taobao指令: 将下载地址切换到淘宝
        • PS:淘宝资源地址和国外的地址内容完全同步,淘宝镜像与官方同步频率目前为10分钟,一次以保证尽量与官方服务同步
    • 2.cnpm指令(不推荐,试验时报错了未解决)
      • 只不过是将所有的指令从npm变为cnpm而已
        • npm install cnpm -g –registry=https://registry.npm.taobao.org 安装CNPM
        • cnpm -v 查看是否安装成功
        • 使用方式同npm
          • 例如: npm install jquery 变成cnpm install jquery 即可

YARN使用及与NPM的区别(理解即可)

  • 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.NPM5.0之前的缺陷:

    • 2.1npm 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的安装

    • npm install -g yarn
    • yarn --version
  • 5.YARN和NPM的使用

    • 5.1初始化包
      • npm init -y
      • yarn init -y
    • 5.2安装包
      • npm install xxx --save
      • yarn add xxx
      • npm install xxx --save-dev
      • yarn add xxx --dev
    • 5.3移除包
      • npm uninstall xxx
      • yarn remove xxx
    • 5.4更新包
      • npm update xxx
      • yarn upgrade xxx --latest
    • 5.5全局安装
      • npm install -g xxx
      • yarn global add xxx
    • 5.6全局删除
      • npm uninstall -g xxx
      • yarn global upgrade xxx
    • 5.7全局更新
      • npm update -g xxx
      • yarn global remove xxx
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • Node 简介 客户端的JavaScript是怎样的 什么是 JavaScript?是一个脚本语言运行在浏览器(浏...
    jie_han阅读 227评论 0 3
  • Node基础 为什么学习Node? IO优势对于文件读写,Node采用的是非阻塞IO传统IO在读写文件的时候CPU...
    Victor_818阅读 132评论 0 0
  • nodejs是什么 node.js 是一个基于 Chrome V8 引擎的 JavaScirpt 运行环境。 no...
    追彩虹的小狐狸阅读 297评论 0 1
  • Node最近几年特别火爆,作为一门用js开发的后端语言,Java和PHP能实现的功能,Node同样可以实现,并且在...
    大海爱奔跑阅读 519评论 0 0
  • 一、什么是node Node.js is a JavaScript runtime.It is built on ...
    Linyqs阅读 178评论 0 0