Node.JS系统学习

Node.JS系统学习

1、命令行窗口(小黑屏)、CMD窗口、终端、shell

  1. 开始菜单
  2. 运行
  3. CMD
  4. 回车

image-20220727101530706

常用指令:

  • dir : 列出当前目录下的所有文件
  • cd 目录名:进入到指定目录
  • md 目录名:创建文件夹
  • rd 目录名:删除文件夹
  • 文件名:直接打开文件

目录:

  • 。表示当前目录
  • 。。表示上一级目录

环境变量(Windows系统中的变量):

  • path中存放的路径,每个路径都是分号结尾,所以将想要随时访问的文件所在的文件夹路径加入到path中,即可在命令行窗口随时访问该路径下的文件。
  • 原理:当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开,如果没有找到,则会依次到环境变量path的路径中寻找,知道找到为止。如果没有找到,则报错。
  • 所以我们可以将一些经常访问的程序和文件的路径添加到path中,这样我们就可以在任意位置来访问这些文件和程序了。

2、进程和线程

进程:

  • 进程负责为程序的运行提供必备的环境
  • 进程就相当于工厂中的车间

线程:

  • 线程计算机中的最小的计算单位,线程负责执行保存到进程中的程序
  • 线程就相当于工厂中的工人
  • 单线程:js是单线程的
  • 多线程

3、Node.js(节点 )特点:单线程

  • Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境
  • Node采用的Google开发的V8引擎运行的js代码,使用事件驱动非阻塞异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。

Node的用途

  • Web服务API,比如REST
  • 实时多人游戏
  • 后端的Web服务,例如跨域、服务器端的请求
  • 基于Web的应用
  • 多客户端的通信,如即时通信

Node特点

  • Node的服务器是单线程的
  • Node处理器请求时是单线程,但是后台拥有一个I/O线程池

4、Node执行js文件

  • 在文件所在目录直接打开命令行窗口,使用node 文件名.js来执行js文件。

5、Node整合webstorm

  1. 点击settings

image-20220727155638404

  1. 搜索配置路径

image-20220727155927681

6、ECMAScript标准的缺陷

  • 没有模块系统(ES6已经有了)
    • 如果程序设计的规模达到了一定程度,则需要对其进行模块化。
    • 模块化可以有多种形式,但至少应该提供能够将代码分割为多个源文件的机制。
    • CommonJS的模块功能可以帮我们解决该问题。
  • 标准库较少
  • 没有标准接口
  • 缺乏管理系统

7、CommonJS规范

  • CommonJS规范的提出,主要是为了弥补当前JavaScript)没有标准的缺陷。
  • CommonJS规范为S指定了一个美好的愿景希望S能够在任何地方运行。
  • CommonJS对模块的定义十分简单:
    • 模块引用
    • 模块定义
    • 模块标识

Node模块化

定义
  • 在Node中,一个js文件就是一个模块。

  • 在node中有一个全局对象global,它的作用和网页中window类似

    • 在全局中创建的变量都会作为global的属性保存
    • 在全局中创建的函数都会作为global的方法保存
  • nodejs代码运行

    • 当node在执行模块中的代码时,他会首先在代码的最顶部添加如下代码

      • function(exports,require,module,__filename,__dirname){
    • 在代码的最底部,添加如下代码

      • }
    • 实际上模块中的代码都是包装在一个函数中执行的,并且函数执行时,同时传递进5个实参

      • exports
        • 该对象用来将变量或函数暴露到外部
      • require
        • 函数,用来引入外部的模块
      • module
        • module代表的是当前模块本身
      • __filename
        • 当前模块的绝对路径
      • __dirname
        • 当前模块所在文件夹的绝对路径
  • 在Node中,每一个js文件中的js代码都是独立运行在一个函数中

    • 而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问
  • 向外部暴露属性或方法

    • 我们可以通过exports来向外部暴露变量和方法,只需要将需要暴露给外部的变量或方法设置为exports的属性即可。
      • 例如:
      • exports.x = "我是暴露的变量";
      • exports.fn = function(){ return "我是暴露的函数"};
引入其他模块
  • 在Node中,通过**require()**函数来引入外部的模块
    • require()可以传递一个文件的路径作为参数,node将自动根据该路径来引入外部模块
    • 这里路径,如果使用相对路径,必须以 . 或 … 开头
  • 使用require()引入模块以后,该函数返回一个对象,这个对象代表的是引入的模块
    • 所以可以定义一个变量来接收这个返回的对象
  • 我们使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块
  • 模块分为两大类:
    • 核心模块
      • 由node引擎提供的模块
      • 核心模块的标识就是,模块的名字
    • 文件模块
      • 由用户自己创建的模块
      • 文件模块的标识就是文件的路径(绝对路径,相对路径)

8、exports和module exports

  • 通过exports只能使用.的方式向外暴露内部变量
    • 例如exports.xxx = xxx
  • 而module.exports既可以通过.的形式,也可以直接赋值
    • 例如module.exports.xxx = xxx 或者 module.exports = {}

可以理解为NodeJS在运行js代码之前运行以下两行代码:

var module = new Module();
var exports = module.exports;

9、包简介(package)

  • CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。
  • CommonJS的包规范由包结构和包描述文件两个部分组成
  • 包结构
    • 用于组织包中的各种文件
  • 包描述文件
    • 描述包的相关信息,以供外部读取分析

包结构

包其实就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:

  • package.json 描述文件(必须存在,也就是说明书)
  • bin 可执行二进制文件
  • lib js代码
  • doc 文档
  • test 单元测试

包描述文件(json文件中不能写注释)

  • 包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件-package.json,位于包的根目录下,是包的重要组成部分。
  • package.json中的字段
    • name、description、version、keywords、maintainers、contributors、bugs、licenses、repositories、dependencies(依赖描述)、homepage、os、cpu、engine、builtin、directories、.implements、scripts,author,bin、main、devDependencies。

10、NPM(Node Package Manager)

  • CommonJS包规范是理论,NPM是其中一种实践。
  • 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好地一个生态系统。

NPM命令

  • npm -v

    • 查看版本
  • npm version

    • 打印所有模块的版本
  • npm

    • 查看帮助
  • npm search 包名

    • 搜索模块包
  • npm install / i 包名

    • 在当前目录安装包(需要当前目录存在package.json文件,可以使用npm init进行初始化自动创建)
    • 下载之后,npm自动在当前目录创建一个node_modules文件夹,然后将下载的包存储到文件夹内。
  • npm install / i 包名 --save

    • 安装包并添加到依赖中(特别重要)
  • npm install / i -g 包名

    • 全局模式安装包(全局安装的包一般都是一些工具)
  • npm remove / r 包名

    • 删除一个模块
  • npm install 文件路径

    • 从本地安装
  • npm install 包名 -registry=地址

    • 从镜像安装
  • npm config set registry 地址

    • 设置镜像源
  • npm install

    • 下载当前项目所依赖的包(特别重要)

可以配置淘宝镜像,然后使用cnpm进行操作可加快速度。

node搜索包流程

  • 通过npm下载的包都放到node_modules文件夹中
    • 我们通过npm下载的包,直接通过包名引入即可使用
  • node在使用模块名字来引入模块时,他会首先在当前目录的node_modules中寻找是否含有该模块
    • 如果有则直接使用,如果没有则取上一级目录的node_modules中寻找
    • 如果有则直接使用,如果没有则再去上一级进行寻找,直到找到为止
    • 直到找到磁盘的根目录,如果依然没有则报错。

e搜索包流程

  • 通过npm下载的包都放到node_modules文件夹中
    • 我们通过npm下载的包,直接通过包名引入即可使用
  • node在使用模块名字来引入模块时,他会首先在当前目录的node_modules中寻找是否含有该模块
    • 如果有则直接使用,如果没有则取上一级目录的node_modules中寻找
    • 如果有则直接使用,如果没有则再去上一级进行寻找,直到找到为止
    • 直到找到磁盘的根目录,如果依然没有则报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值