Node知识点记录

1 篇文章 0 订阅

本文知识点参看下面文档

http://nodejs.cn/learn/introduction-to-nodejs

1. Node.js介绍

在了解Node.js之前要先了解下V8引擎。

  • V8 是驱动 Google Chrome浏览器的 JavaScript 引擎的名称

  • V8 提供了 JavaScript 执行的运行时环境,DOM 和其他 Web 平台 API 由浏览器提供。

V8是JavaScript引擎名称,它提供了JavaScript脚本执行的运行时环境

Node.js 是在浏览器之外运行 V8 JavaScript 引擎,所以Node.js也可以运行JavaScript脚本,这使得 Node.js 的性能非常好

Node.js具有如下介绍:

  • 通过Node.js可以使JavaScript脚本在服务器中运行
  • Node.js就是一款使用JavaScript编写的web服务器
  • Node.js底层是使用c++的编写的
  • Node.js的中JavaScript引擎使用的chromeV8引擎

Node.js特点:

  • 非阻塞、异步的I/O
  • 事件和回调函数
  • 单线程(主线程单线程,后台I/O线程池)
  • 跨平台

2. Node.js和浏览器的区别

浏览器和 Node.js 都使用 JavaScript 作为其编程语言,但构建在浏览器中运行的应用程序与构建 Node.js 应用程序完全不同。尽管它始终是 JavaScript,但有一些关键的差异使体验完全不同。

  • 在浏览器中,开发者所做的大部分工作都是与 DOM 或其他 Web 平台 API(如 Cookies)进行交互,这些在Node.js 中不存在,因为没有浏览器提供的 documentwindow 和所有其他对象

  • 在浏览器中,没有 Node.js 通过其模块提供的所有友好的 API,比如文件系统访问功能

  • 另一个不同之处是 Node.js 使用 CommonJS 模块系统,而在浏览器中,正在实施的 ES Modules 标准。在 Node.js 中使用 require(),在浏览器中使用 import

3. 模块化

ES5中没有原生支持模块化,只能通过script标签引入JavaScript文件来实现模块化

Node.js中为了对模块管理,引入了CommonJS规范

  • 模块的引用

    • 使用 require()函数来引入一个模块
    • 例子:var 变量 = require(“模块的标识”)
  • 模块的定义

    • Node.js中一个JavaScript文件就是一个模块

    • 默认情况下,在JavaScript文件中编写的内容,都是独立运行在一个函数中而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问

    • 导出变量和函数两种方式

      • 使用 exports

        exports.属性 = 属性值
        exports.方法 = 函数

      • 使用module.exports

        module.exports.属性 = 属性值
        module.exports.方法 = 函数

      module.exports = {}

  • 模块的标识

    • 模块的标识就是模块的名字或路径,Node.js通过模块的标识来寻找模块

    • 对于核心模块(npm中下载的模块),直接使用模块的名字对其进行引入

      var fs = require("fs");
      var express = require("express");
      
    • 对于自定义的文件模块,需要通过文件的路径来对模块进行引入,路径可以是绝对路径,如果是相对路径必须以./或 …/开头

      var router = require(“./router”);

4. 模块化深入理解

Node.js中有一个全局对象 global,它的作用和网页中window类似。

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

Node.js在执行模块中的代码时,它会自动将模块化的所有代码放在如下函数中

function (exports, require, module, __filename, __dirname) {
    // 模块化代码
}

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

  • exports:该对象用来将变量或函数暴露到外部

  • require:函数,用来引入外部的模块

  • module

    • module代表的是当前模块本身
    • exports就是module的属性
    • 既可以使用 exports 导出,也可以使用module.exports导出
  • __filename:当前模块的完整路径

      `C:\Users\scorpios\projects\node\module.js`
    
  • __dirname:当前模块所在文件夹的完整路径

C:\Users\scorpios\projects\node

5. npm包管理器

通过npm下载的包都放到node_modules文件夹中,通过npm下载的包,直接通过包名引入即可。

  • 通过npm可以对Node.js中的包进行上传、下载、搜索等操作
  • npm会在安装完Node.js以后,自动安装

Node.js在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块

  • 如果有则直接使用,如果没有则去上一级目录的node_modules中寻找
  • 如果有则直接使用,如果没有则再去上一级目录寻找,直到找到为止
  • 直到找到磁盘的根目录,如果依然没有,则报错

npm常用命令

命令作用
npm init 初始化项目创建package.json
npm -v查看npm的版本
npm version查看所有模块的版本
npm search 包名搜索包
npm install / i 包名安装包
npm remove / r 包名删除包
npm install 包名 --save安装包并添加到依赖中
npm install下载当前项目所依赖的包
npm install 包名 -g 全局安装包全局安装的包一般都是一些工具

6. 如何从 Node.js 读取环境变量

Node.js process 核心模块提供了 env 属性,该属性承载了在启动进程时设置的所有环境变量。

这是访问 NODE_ENV 环境变量的示例,该环境变量默认情况下被设置为 development

注意:process 不需要 "require"引入,它是自动可用的。

process.env.NODE_ENV // "development"

7. 使用 exports 从 Node.js 文件中公开功能

const library = require('./library')

可以导入存在于当前文件夹中的 library.js 文件中公开的功能。在此文件中,必须先公开功能,然后其他文件才能将其导入。

默认情况下,文件中定义的任何其他对象或变量都是私有的,不会公开给外界。

这就是 module 系统提供的 module.exports API 可以做的事。

当将对象或函数赋值为新的 exports 属性时,这就是要被公开的内容,因此,可以将其导入应用程序的其他部分或其他应用程序中。

可以通过两种方式进行操作。

第一种方式是将对象赋值给 module.exports(这是模块系统提供的对象),这会使文件只导出该对象:

const car = {
  brand: 'Ford',
  model: 'Fiesta'
}

module.exports = car
//在另一个文件中
const car = require('./car')

第二种方式是将要导出的对象添加为 exports 的属性。这种方式可以导出多个对象、函数或数据:

const car = {
  brand: 'Ford',
  model: 'Fiesta'
}

exports.car = car
// 或直接
exports.car = {
  brand: 'Ford',
  model: 'Fiesta'
}

在另一个文件中,则通过引用导入的属性来使用它:

const items = require('./items')
items.car

// 或
const car = require('./items').car

module.exportsexport 之间有什么区别?

前者公开了它指向的对象。 后者公开了它指向的对象的属性。

8. 如何使用或执行 npm 安装的软件包

当使用 npm 将软件包安装到 node_modules 文件夹中或全局安装时,如何在 Node.js 代码中使用它?

假设使用以下命令安装了流行的 JavaScript 实用工具库 lodash

npm install lodash

这会把软件包安装到本地的 node_modules 文件夹中。

若要在代码中使用它,则只需使用 require 将其导入到程序中:

const _ = require('lodash')

如果软件包是可执行文件,该怎么办?

在这种情况下,它会把可执行文件放到 node_modules/.bin/ 文件夹下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 以下是 JavaScript 的知识点树状图: ``` JavaScript 基础语法 变量 运算符 控制结构 函数 类型 对象 数据类型 字符串 数字 布尔值 null 和 undefined 数组 对象 高级语法 闭 this 关键字 原型和原型链 扩展运算符 解构赋值 箭头函数 类 模板字符串 迭代器和生成器 解构 浏览器 API DOM 操作 BOM 操作 事件 表单 历史 存储 媒体 动画 地图 语音 图像 视频 音频 第三方库 jQuery AngularJS React Vue.js Node.js Express Socket.io ``` 上面的知识点树状图仅提供了 JavaScript 的主要知识点,并不能完全覆盖 JavaScript 的所有内容。有关 JavaScript 的更详细信息,建议参考官方文档或其他教程。 ### 回答2: JavaScript的知识点树状图可以按照主题和细分领域进行组织和展示。以下是一个基本的JavaScript知识点树状图: - JavaScript基础语法 - 变量 - 数据类型 - 运算符 - 条件语句 - 循环语句 - 函数 - 对象 - DOM操作 - 元素选择 - 元素属性修改 - 元素样式修改 - 事件处理 - 动态创建和删除元素 - AJAX技术 - XMLHttpRequest对象 - 响应处理 - 异步请求 - JSON数据处理 - ES6新特性 - 箭头函数 - 解构赋值 - 模板字符串 - Promise - 类和继承 - 前端框架 - Angular - React - Vue - 浏览器对象模型(BOM) - 窗口对象 - 历史记录对象 - 定时器 - 弹窗提示 - 地理位置 - 常用库和工具 - JQuery - lodash - webpack - Babel - 前端安全 - XSS攻击 - CSRF攻击 - 防御措施 - HTTPS协议 这个树状图只涵盖了JavaScript的基础知识和一些常用的扩展知识点。随着JavaScript的不断发展和更新,还有许多其他的知识点和工具可以添加到这个树状图中。对于初学者来说,理解和掌握这些基本知识点是很重要的,它们将构建一个坚实的JavaScript编程基础。 ### 回答3: JavaScript的知识点树状图可以按照以下方式组织: 1. 基础知识: - 数据类型:括数字、字符串、布尔值、数组、对象和函数等;还有特殊的null和undefined。 - 运算符:括算术运算符、比较运算符、逻辑运算符和位运算符等。 - 控制流程:括条件语句(if-else语句、switch语句)、循环语句(for循环、while循环)和异常处理等。 - 函数:括函数的定义、调用、参数、返回值和作用域等。 - 对象:括对象的创建、属性的访问和修改、对象的方法等。 2. 高级特性: - 原型和原型链:括对象的原型、原型链的继承和对象的属性查找等。 - 闭:定义和使用闭函数。 - 异步编程:括回调函数、Promise、异步操作和事件循环等。 - ES6新特性:括箭头函数、模块化、解构赋值和类等。 3. 浏览器相关: - DOM操作:括节点查找、节点操作和事件处理等。 - BOM操作:括窗口大小、历史记录、cookie和定时器等。 - AJAX:括XMLHttpRequest对象、发送请求和处理响应等。 - jQuery:括选择器、动画效果和事件处理等。 4. 其他: - 错误处理:括try-catch语句和抛出异常等。 - 正则表达式:括正则的创建、匹配和替换等。 - 调试技巧:括使用控制台和调试工具等。 这只是一些主要的知识点,实际上JavaScript还有很多其他的特性和相关知识。对于不同的学习者来说,他们可以根据自己的需求和学习进度来选择性学习这些知识点

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

止步前行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值