陌笛-node.js基础

定义

Node.js 是⼀个基于Chrome V8引擎的JavaScript运⾏环境。Node.js使⽤了⼀个事件驱动、⾮阻塞式I/O的模型

浏览器和Node.js架构区别

浏览器与Nodejs的架构区别

V8引擎

⽀持语⾔:V8是⽤C ++编写的Google开源⾼性能JavaScript和WebAssembly引擎,它⽤于Chrome和Node.js等;(译:V8可以运⾏JavaScript和WebAssembly引擎编译的汇编语⾔等)
跨平台:它实现ECMAScript和WebAssembly,并在Windows 7或更⾼版本,macOS 10.12+和使⽤x64,IA-32,ARM或MIPS处理器的Linux系统上运⾏;
嵌⼊式:V8可以独⽴运⾏,也可以嵌⼊到任何C ++应⽤程序中;
JavaScript代码解析过程

特点
  • 它是⼀个Javascript运⾏环境
  • 依赖于Chrome V8引擎进⾏代码解释执⾏
  • 事件驱动
  • ⾮阻塞I/O
  • 轻量、可伸缩,适于实时数据交互应⽤
    V8引擎架构

模块规范

无模块化时代的弊端
  • 全局污染
  • 依赖管理

CommonJS

Commonjs 的提出,弥补 Javascript 对于模块化,没有统⼀标准的缺陷。nodejs借鉴了Commonjs的Module,实现了良好的模块化管理。
⽬前 commonjs ⼴泛应⽤于以下⼏个场景:

  • Node 是 CommonJS 在服务器端⼀个具有代表性的实现;
  • Browserify 是 CommonJS 在浏览器中的⼀种实现;
  • webpack 打包⼯具对 CommonJS 的⽀持和转换;也就是前端应⽤也可以在编译之前,尽情使⽤CommonJS 进⾏开发。

核心模块

像浏览器提供的 DOM/BOM API ⼀样,Node.js 不仅提供了 JavaScript 运⾏时环境,还扩展出了⼀系列平台API,例如:

  • ⽂件系统相关:对应fs模块
  • HTTP 通信:对应http模块
  • 操作系统相关:对应os模块
  • 多进程:对应child_process、cluster模块

node模块化原理

我们为什么能在js文件中直接使用require、module.exports的方法?

在node中,其实质上我们写的代码会拼接到一个包装函数中,比如说我们有一个代码如下:

const test =require('http');
let  test = () => {
    console.log("i am a teache")
}
module.exports = test;

其最终会被包装成这个样子:

(
  function (exports, require, module, __filename__, __dirname__) {
      // a模块的代码
      const http =require('http');
      let  test = () => {
          console.log("i am a teache")
      }
      module.exports = test;
  } 
)

而包装函数如下,其将返回一个字符串,可以通过eval方法来执行该字符串代码:

function wrap(script) {

    return 'function(exports, require, module, __filename__, __dirname__) {' +
     script 
+ '\n}'
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值