您当前的位置: 首页 > 

止步前行

暂无认证

  • 0浏览

    0关注

    247博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Node知识点记录

止步前行 发布时间:2022-04-27 13:48:34 ,浏览量:0

文章目录
  • 1. Node.js介绍
  • 2. Node.js和浏览器的区别
  • 3. 模块化
  • 4. 模块化深入理解
  • 5. npm包管理器
  • 6. 如何从 Node.js 读取环境变量
  • 7. 使用 exports 从 Node.js 文件中公开功能
  • 8. 如何使用或执行 npm 安装的软件包

本文知识点参看下面文档

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.jsonnpm -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/ 文件夹下。

关注
打赏
1657848381
查看更多评论
立即登录/注册

微信扫码登录

0.0406s