Node基础原理
环境变量
(windows系统中变量path)
当我们在一个命令行窗口打开一个文件或程序时,
系统首先会在当前目录下寻找文件程序,如果找到了则直接打开
如果没有找到则会依次到环境变量path的路径中查找,直到找到为止
如果没有找到则会报错 xxx不是内部或外部命令,也不是可运行的程序或批处理文件
下载安装完node之后,在控制台输入node -v 若提示以上红字信息,则需要配置环境变量
环境变量的配置过程:
计算器右键属性 》高级系统设置 》 环境变量 》将安装node的目录位置放置在 变量为path 的值中
注意用;分开
进程和线程
进程
- ·进程负责为程序的运行提供必备的环境
- ·进程就相当与工厂中的中间
线程
- 线程是计算机中的最小单位,线程负责执行进程中的程序
- 线程就想当与工厂中的工人
node.js是一个能够运行在服务器端运行的代码,跨平台的javascript运行环境
node采用Google开发的V8引擎执行js代码,使用事件驱动、非组塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模
Node历史
- node版本中偶数为开发稳定版(生产版本)4 6 8 10 12 。。。
- node版本中奇数为开发测试版(开发版本)5 7 9 11 13 。。。
Node精髓
- 在node中,一个js文件就是一个模块
- 在node中,每一个js文件中的js代码都是独立运行在一个函数中,而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问
通过module.exports 导出 成员变量 ,通过 require () 加载模块,进行访问
NodeJs是CommonJS规范的实现,webpack也是以CommonJs的形式来书写
通过require(" 模块名称 "); 进行加载
通过exports导出模块文件
require()有两个作用
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象
exports
- 多个接口对象导出:module.exports.属性 = 值
- 单个接口对象导出:module.exports = 值
exports === module.exports , 所以可以省略module
但是最终返回的是module.exports
启动node(在当前文件下执行)
node app.js(也就是文件名)
验证node中,js代码是否独立运行在一个函数中
验证方式1
函数中 声明的变量 var 是 局部变量,而没有var则是隐士全局变量,即为全局变量 所以在var的情况下 报错 str is not defined
而在没有var的情况下正常输出了 node
验证方式2
js在浏览器端可以通过window对象找到全局属性,但是js在node中并没有window对象,而有global全局对象
验证方式3
通过arguments.callee 用于引用该函数的函数体内当前正在执行的函数,看到真正的函数内部
当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
function (exports,require,module,__filename,__dirname){
在代码的最底部,添加如下代码
}
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传进了5个实参
- exports:该对象用来将变量或函数暴露到外部
- require:用来引入外部的模块
- module:代表的是当前模块本身,exports就是module的属性
- __filename:当前模块的完整路径
- __dirname:当前模块所在文件夹的完整路径
exports 和 module.exports
通过exports 只能使用.的方式来向外暴露内部变量
exports.xxx = xxx
而module.exports既可以通过.的形式,也可以直接赋值
module.exports = {}
module.exports.xxx = xxx
node在使用模块名字来引入模块时,会首先在当前目录的node_modules中查找是否含有该模块,如果有,则直接使用,没有则向上一级目录的node_modules中查找,直到找到为止
直到找到磁盘的根目录,如果依然没有,则报错
包和NPM
包(package)
CommonJS包规范由包结构和包描述文件两个部分组成
包结构:用于组织包中各个文件
包描述文件(package.json):描述包的相关信息,以供外部读取分析
NPM(Node Package Manager)包管理工具
CommonJS包规范是理论,NPM是其中一种实现、
对于Node而言,npm帮助其完成了第三方模块的发布、安装和依赖等。
借助npm,node与第三方模块之间形成了一个很好的生态系统
npm常用命令:
- npm init 初始化 package.json 文件
-
npm version 查看版本(npm,node,v8引擎等)
- npm search 包名 : 搜索包
- npm install / i 包名: 下载包
- npm remove / r 包名 :删除包
- npm install 包名 --save : 安装包并添加到依赖中
- npm install : 下载当前项目所依赖的包
- npm install 包名 -g :全局安装的包,一般都是一些工具
- npm config set registry 地址 : 设置npm下载地址