01-node.js基本概念、安装node、运行以及node执行多个脚本

这是我学习node的整理笔记。是我对各个视频和文档的综合理解,以备我日后复习存储。如果有错误的地方,还请各位大佬多多赐教。

一、基本概念

1、什么是Node.js?

       Node.js 是一个在Chrome 的 V8 引擎 的基础上建立的 javaScript 运行时环境。它既不是一门语言也不是一门框架。

a、Node.js中的JavaScript 与 浏览器中的JavaScript 的区别以及联系

      在Chrome 的 V8 引擎出现以前,只有浏览器可以解析执行 JavaScript 代码, 2009年 Ryan Dahl 为了加快浏览器的运行速度借助 V8 引擎 发明了 Node.js , Node.js 可以解析和执行 JavaScript 代码,它往往充当服务器与前端中间的小服务器。两者之间的区别与联系如下表:

基本语法浏览器中的JavaScriptNode.js中的JavaScript
ECMAScript
BOM×
DOM×

b、Node.js中的JavaScript 详情

b.1、ECMAScript、没有DOM、BOM
b.2、require加载模块:核心模块、第三方模块、用户自定义模块

      require作用:
            1. 加载文件模块并执行里面的代码
            2.拿到被加载文件模块导出的接口对象。在每个文件模块中提供了一个 对象 exports(默认是一个空对象)

b.2.1、核心模块(服务级API)

            常用的核心模块如下

操作核心模块
文件操作fs
服务构建http
路径操作path
操作系统信息os

            模块代码引入示例:

		var fs = require('fs');
		var http = require('http');
		var path = require('path');
		var os = require('os');

更多模块详情 请看 node官网

b.2.2、第三方模块
b.2.3、用户自定义模块

            用户自己编写的文件模块加载
            示例如下:

		require('./a');

注意:这里引入的路径必须是相对路径,以 ./ 开头

2、Node.js的特点是什么?

      JavaSCript语言是单线程的,这决定了 Node.js 也是 单线程 去处理数据。单线程并不意味着速度就慢,相反我们可以把 Node.js的单线程 看成一个 超级管理员 ,它可以同时去处理多个请求,从而阻止阻塞IO模型。

在这里插入图片描述

Node.js 的特点总结如下:

  • 事件驱动
  • 非阻塞IO模型(异步)
  • 轻量高效

3、Node.js可以做什么?

  • web服务器后台
  • 命令行工具
    - npm(node)
    - hexo(node)

二、软件安装

1、下载软件并安装

下载地址 选择自己电脑相应的版本,然后点击下一步下一步安装就行。
在这里插入图片描述

2、检测是否安装成功

在这里插入图片描述

三、运行"hello Word!"

1、创建编写JavaScript 脚本文件

注意:不可以使用 node.js 去命名文件

在这里插入图片描述

2、打开终端,定位到脚本文件所属目录

在这里插入图片描述

3、输入node 文件名执行对应的文件

在这里插入图片描述

四、node模块规范以及如何实现多个脚本之间通信运行

1、node模块规范

a、什么是模块化

  • 模块(文件)作用域
  • 模块(文件)间通信

注意

  1. 模块中的所有代码都运行在模块作用域,不会污染全局作用域
  2. 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
  3. 模块加载的顺序,按照其在代码中出现的顺序

b、CommonJS模块过程

node 应用由模块组成,采用的commonjs模块规范。拥有以下特点:

  • 模块作用域
  • 使用require方法来加载模块
  • 使用module对象用来导出模块中的成员(注意 module 对象中还有一个对象 exports 也可以用来导出模块中的成员)

2、加载用户自定义模块

       node 只能一次解析执行一个javaScript文件,如果我们想要执行多个文件,就需要把我们自己编写的文件引入即,加载用户自定义模块
注意:这里引入的路径必须是相对路径,以 ./ 开头
示例如下:
       如果我们想要 同时执行 我们所编写的a.js和b.js文件
在这里插入图片描述
       我们可以把我们写的一个文件加载到另一个文件中,例如把 a.js 加载到 b.js 文件中。

		require('./a');

在这里插入图片描述
运行文件:
       具体运行步骤参考上面运行"hello Word!"
在这里插入图片描述

3、注意:在node中没有没有全局作用域,只有模块作用域,所以模块之间不可以直接通信

       也就是说a文件中的变量函数等只能在a文件中引用,即使a被加载到b文件中,b文件也不能引用a文件的变量函数等。

  • 外部(b.js)访问不到内部(a.js)
  • 内部(a.js)访问不到外部(b.js)

在这里插入图片描述
在这里插入图片描述

4、解决模块之间的通信–导出多个成员(由多个成员组成的对象)

       想要解决模块之间的通信,我们需要用到 node 中的 commonjs 模块规范:拿到被加载文件模块导出的接口对象把我们所有需要被外部访问的成员挂载到 module.exports 这个对象的属性上

注意:为了简化操作,node底层 封装了var exports = module.exports (这里是传址)(也就是说,我们可以直接使用exports) ,最后默认return module.exports (一旦给 exports 重新赋值,指针丢失,就无法返回其值了)

在这里插入图片描述

5、解决模块之间的通信–导出单个成员(成员是什么类型拿到的就是什么类型)

       想要解决模块之间的通信,我们需要用到 node 中的 commonjs 模块规范:拿到被加载文件模块导出的接口对象把我们所有需要被外部访问的成员挂载到 module 这个对象上
在这里插入图片描述

6、node模块规范优先从缓存加载

在这里插入图片描述

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值