编程语言
首页 > 编程语言> > node.js基础知识

node.js基础知识

作者:互联网

node.js简介

概要:nodejs是一个基于Google V8引擎开发的一个javascript运行环境
特性:事件驱动 非阻塞 IO

nodejs命令行的 REPL模式 (交互式解释器)

运行js文件

直接在命令行通过 node命令 + 文件名的方式来执行js文件
可以省略文件后缀名 因为nodejs就是用来运行js文件的

nodejs的模块

理解:每一个js文件就是一个模块
使用:通过require来引入模块 exports或者module导出模块
模块化规范:

<script data-main="main" src="require.js"></script> 

我们需要使用 data-main来指定一个主模块来作为加载模块的入口文件

  1. 对于其各自所依赖的模块AMD是先加载的而CMD是延迟加载(懒加载)
  2. CMD 推崇依赖就近,AMD 推崇依赖前置。
    AMD也支持CMD的写法同时也可以把require当做依赖项传递

例:

// AMD
define(['./a,' .'/b'], function(a ,b) { // 依赖已经明确写好
  ..........
})

// CMD
define(function(require, exports, module) {
 var a = require('./a'); // 随时加载
 var b = require('./b');
})

nodejs运行js文件的过程分析 (个人理解)

问题1:在web端js中为什么没有require、exports等变量而nodejs中可以使用这些变量呢?
其实每一个js文件都运行在一个函数里 我们可以打印出这个函数看看长啥样。
创建一个js文件其内容如下:

console.log(arguments.callee.toString());

在命令行运行该文件
返回以下内容:

function (exports, require, module, __filename, __dirname) { console.log(arguments.callee.toString());}

可以看到这个函数里有五个参数:

1 export 就是我们用来导出的变量
2 require 用来引入模块的函数
3 module 模块对象
4 __filename 当前文件路径 包含自身文件名
5 __dirname 当前文件绝对路径

这样可以使我们的每个模块之间的变量相互独立互不影响

问题2:require和exports又是怎么实现导入导出模块的呢?
首先一个js文件的执行必然只有两种情况

导入导出过程分析:
1.执行js文件前先在外部定义一个module对象大致内容如下:

var module = {
  exports:{}
  filename:""
  ......
}

2.把文件内容放到一个如上面的函数里执行并传入module、 module.export、require、filename、dirname五个参数;

这样我们在使用module.exports或者exports导出变量的时候
因为module是引用值 所以就是在修改外部定义好的module对象的exports属性

例:在module.js文件导出内容如下:

exports.a = 10;

这时的module 对象:

module = {
 exports:{
    a: 10
  }
}

而我们在使用require导入的时候就是用以上步骤执行这个js文件后把module.exports的值返回
例:在module1.js中内容如下:

 const a = require("./module.js"); // 返回 {a:10}


标签:node,exports,require,module,基础知识,模块,js,加载
来源: https://www.cnblogs.com/flqq/p/16261200.html