nodejs——nodejs简单介绍 & 模块 & 全局对象gl
一、命令行窗口
1、 打开命令行窗口(小黑屏)、CMD窗口、终端、shell
方法一:开始菜单 -> 运行 -> cmd -> 回车
方法二:直接url栏中输入cmd
2、常用指令
dir 显示目录里面的所有文件(包括文件夹和文件)
cd.. 回到上一级目录
cd\ 回到根目录
cd 路径 跳转到指定的目录
盘符名称: 切换盘符(比如:d:,回车后就会切换到d盘)
cls 清屏(清空屏幕)
md 目录名称 创建目录
rd 目录名称 删除目录
del 文件名 删除指定的文件
del 目录名 删除目录里面的全部文件
copy 命令用于复制文件
move 命令用于移动文件
文件名.后缀名 打开文件
3、环境变量(windows系统中变量)
path:环境变量中保存的是一个一个的路径,路径之间使用;隔开。里面放的都是路径,该路径下的文件,可以直接打开
作用:当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首选在当前目录下寻找文件程序,如果找到了则直接打开,如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止,如果没有找到则报错。所以我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样我们就可以在任意位置来访问这些文件和程序了。
二、进程和线程
1、进程
当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。
进程负责为程序的运行提供必备的环境。进程就相当于工厂中的车间。
2、线程
线程是计算机中的最小的计算单位,线程负责执行进程中的程序。线程就相当于工厂中的工人。
(1)多线程
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。java是多线程的。
(2)单线程
单线程就只有一个执行流。js是单线程的。
三、Nodejs
Nodejs官网
Node.js 就是运行在服务端的 JavaScript。是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。
1、I/O(Input/Output)
I/O操作指的是对磁盘的读写操作。
2、Node定义
Node是一个基于Chrome V8引擎的JavaScript代码运行环境。
浏览器(软件)能够运行JavaScript代码,浏览器就是JavaScript代码的运行环境。
Node(软件)能够运行JavaScript代码,Node就是JavaScript代码的运行环境。
版本:
LTS = Long Term Support 长期支持版 稳定版
Current 拥有最新特性 实验版
3、Node优势
(1)可以使用JavaScript语法开发后端应用
(2)生态系统活跃,有大量开源库可以使用
(3)前端开发工具大多基于Node开发
4、Node.js 的组成
JavaScript 由三部分组成,ECMAScript,DOM,BOM。
Node.js是由ECMAScript及Node 环境提供的一些附加API组成的,包括文件、网络、路径等等一些更加强大的 API。(ECMAScript + Node模块API)
四、模块化
1、模块化
软件中的模块化开发:一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行。将一个完整的程序分成一个一个小的程序,降低耦合度,方便代码的复用。
Node.js规定一个JavaScript文件就是一个模块,每一个js文件中的js代码都是独立运行在一个函数中。模块内部定义的变量和函数默认情况下在外部无法得到。模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块。
2、模块参数
每个独立的模块是一个私有的作用域,每一个独立模块其实就是独立方法。并且在函数执行时,同时传递进了5个参数:exports, require, module, __filename, __dirname。
(1)exports对象
exports:该对象用来将变量或函数暴露到外部。
nodejs中,导出当前模块的成员,可以用exports,也可以用module.exports。exports 实际指向 module.exports,最终导出的是module.exports对象。
① 用exports对象导出
exports导出成员时,不能重新给exports赋值一个新对象,只能一个一个导出。
let money = 10000
let city = '南京'
exports.money = money
exports.city = city
注意:不能采用下面的方式导出成员
exports = {
money:money,
city:city
}
② 使用module.exports
module.exports导出成员时,既可以一个一个导出,也可以通过赋值一个对象的方式导出。
module.exports.fun1 = fun1
module.exports = {
money:money,
city:city,
fun1:fun1
}
(2)require函数
require函数,用来导入其他模块里面的成员。require方法的参数是:模块的标识。require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块。
在nodejs中,通过require方法,导入其他模块。一般情况下,我们会通过解构赋值的方式,直接从导入的对象中获取需要的成员。
① 导入系统模块
通过系统模块的名称导入。
let path = require('path')
② 导入第三方模块
通过模块的名称导入(这个名称是package.json文件中name属性对应的名称)。
let path = require('path')
③ 导入自定义模块
通过模块的路径导入,路径可以是相对路径,也可以是绝对路径。
let bing = require('./bing')
(3)module对象
是当前模块本身,它里面的exports对象属性,也是用于导出当前模块里面的成员。
(4)__filename变量
返回当前模块文件的绝对路径。
console.log(__filename); // E:\kw\kwstudy\nodeJS\L01\index03.js
(5)__dirname变量
返回当前模块文件所在目录的绝对路径。
console.log(__dirname); // E:\kw\kwstudy\nodeJS\L01
3、系统模块
Node运行环境提供的API. 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提供的API为系统模块。
(1)系统模块path
① 定义
系统模块path,用于操作路径相关。
let path = require('path')
② join() 路径拼接
path.join('路径','路径',...) 该方法会根据当前nodejs所在的系统环境,返回正确格式的拼接路径。
不同的操作系统,路径的拼接符是不一样的。windows系统中,路径的拼接符是 / 或 \ ;linux系统中,路径的拼接符是 / ;我们用nodeJS开发的程序,将来部署到什么操作系统的服务器上是不确定的。所以,使用join()方法,返回拼接路径。
console.log(path.join('a','b','c','d')) // a\b\c\d
③ resolve() 返回绝对路径
带参数:path.resolve(相对路径)方法,返回一个相对路径的绝对路径。
console.log(path.resolve('./file/a.txt')) // E:\kw\kwstudy\nodeJS\1028\file\a.txt
不带参数:path.resolve()方法,返回当前模块所在目录的绝对路径。
console.log(path.resolve()); // E:\kw\kwstudy\nodeJS\1028
全局变量__dirname也是返回当前模块所在目录的绝对路径
console.log(__dirname); // E:\kw\kwstudy\nodeJS\1028
④ 返回指定包(math)的绝对路径
// E:\kw\kwstudy\nodeJS\1028\math
console.log(path.join(path.resolve(),'math'));
(2)系统模块fs
系统模块fs,用于操作文件相关。
f:file 文件 ,s:system 系统,文件系统。
let fs = require('fs')
4、第三方模块
(1)定义
别人写好的、具有特定功能的、我们能直接使用的模块即第三方模块。由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包。
npmjs.com:第三方模块的存储和分发仓库。
第三方模块有两种存在形式:
① 以js文件的形式存在,提供实现项目具体功能的API接口。
② 以命令行工具形式存在,辅助项目开发。
(2)第三方模块 nodemon
在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。
nodemon是一个命令行工具,用以辅助项目开发。可以自动监测文件的变化,当有变化时重新启动服务。(需要使用nodemon时,先关闭自动保存)
使用步骤:
① 全局安装nodemon:
npm install nodemon –g
② 在命令行工具中用nodemon命令替代node命令执行文件
nodemon ./index.js
5、Node.js中模块加载机制
(1)模块查找规则-当模块拥有路径但没有文件后缀
require('./find.js');
require('./find');
步骤:
① require方法根据模块路径查找模块,如果是完整路径,直接引入模块。
② 如果模块后缀省略,先找同名JS文件再找同名JS文件夹。
③ 如果找到了同名文件夹,找文件夹中的index.js。
④ 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件。
⑤ 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到。
(2)模块查找规则-当模块没有路径且没有后缀
require('find');
步骤:
① Node.js会假设该模块是系统模块
② 如果不是系统模块,再判断是不是第三方模块
③ Node.js会去node_modules文件夹中,首先看是否有该名字的JS文件;再看是否有该名字的文件夹。
④ 如果是文件夹看里面是否有index.js。如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件。否则找不到报错。
五、全局对象global
在node环境中,没有window对象。有一个全局对象global,类似于浏览器环境中的window对象。
在全局中创建的变量都会作为global的属性保存。在全局中创建的函数都会作为global的方法保存。
Node中全局对象下有以下方法,可以在任何地方使用,global可以省略:
console.log() 在控制台中输出
setTimeout() 设置超时定时器
clearTimeout() 清除超时定时器
setInterval() 设置间歇定时器
clearInterval() 清除间歇定时器