参考视频
参考文档
简介
NodeJS是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。
Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。
Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。
Node主要用于编写像Web服务器一样的网络应用,这和PHP和Python是类似的。但是Node与其他语言最大的不同之处在于,PHP等语言是阻塞的而Node是非阻塞
Node是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽人意。
NodeJS下载安装
下载
选择LTS版,按照电脑操作系统下载相应版本。
安装
1.下载node-v14.16.0.pkg
2.双击node-v14.16.0.pkg
安装提示一步一步安装。
NodeJS与WebStorm整合
打开WebStorm,打开’首选项’,搜索’node’,选择Node.js and NPM,右边选择Node interpreter 解释器路径,点"OK"。
勾选Coding assistance for Node.js, Package manager会勾选npm,在这里稍微等一会儿,会自动选定npm路径。JS文件运行
方式1:终端中输入 node 文件路径
运行js文件
方式2:Nodejs 的IDE可以直接点击文件,通过文件run选项运行,
方式3:webstorm或VScode有终端界面,在终端界面输入 node 文件
运行
CommonJS规范
ECMAScript标准的缺陷:没有模块系统、标准库较少、没有标准接口、缺乏管理系统。
CommonJS规范的提出,主要是为了弥补当前JavaScript没有模块化标准的缺陷。其对模块的定义是:1.模块引用;2.模块定义;3.模块标识。
模块
JS模块分成两大类:
-
核心模块
-
由node引擎提供的模块
核心模块的标识就是,模块的名字,如fs,require(“fs”);
-
文件模块
-
由用户自己创建的模块:自定义模块,第三方模块:通过npm下载
文件模块的标识就是文件的路径(绝对路径,相对路径),如require(’./node.js’);
模块化定义
- 在Node中,一个js文件就是一个模块;
- 在运行环境中,提供了exports对象用于导出当前模块的方法或者变量,并且它是唯的导出的出口;
- 在模块中还存在一个module对象,它代表模块自身,exports是module的属性。
模块引用
-
在node中,通过require()函数来引入外部的模块,文件路径字符串作为参数;
-
可以使用绝对路径或相对路径,相对路径中.(当前目录)或…(上级目录)不可省略,文件后缀可省;
-
require()函数返回值是一个对象,代表引入的模块;
-
当一个项目多次引入某一模块时,只会加载一次,不会重复加载。【优先从缓存加载】
//main.js var a = require('./a.js'); console.log(b);//因为变量b声明提前,所以不报错。虽然b.js已加载,但是还未赋值给b,所以是undefined var b = require('./b.js'); //a.js console.log('a.js~'); require('./b.js'); //b.js console.log('b.js~'); //main.js运行结果为 a.js~ b.js~ undefined
第三方包引用:
通常过程:1.定位到当前目录的node_module 2.找到引用的包名的文件夹 3.找到包下的package.json 4.定位到package.json 中mian属性 5.main属性的值(一般是入口文件地址)就是首先打开的文件
特殊情况:1.package.json 文件不存在或 main 指定的入口模块不存在时,默认会打开该目录下的index.js;2.如果按上述方式找不到模块,则会进入上一级目录查找,直到磁盘根目录。如果还找不到,报错。
- 一般一个项目中有且仅有一个node_module文件夹,通常放在项目根目录下
模块标识
模块标识其实就是模块的名字,也就是传递给require()方法的参数。
核心模块标识:模块的名字(符合驼峰命名法的字符串)
自定义模块标识:./【当前文件夹】或…/【上一级文件夹】开头的相对路径或者绝对路径[一般不用]
第三方模块标识:包名。
node中的对象
global
node中有一个全局对象 global,它的作用和网页中window类似。在全局中创建的变量都会作为global的属性保存,函数都会作为global的方法保存。
当node在执行模块中的代码时,模块代码会被包裹在function (exports, require, module, __filename, __dirname) {}
中。
- export:该对象用来将变量或函数暴露到外部;
- require:函数,用来引入外部的模块;
- module:代表的是当前模块本身,exports就是module的属性,模块的属性或方法可以使用 exports 导出,也可以使用module.exports导出;
- __filename:当前模块的完整路径;
- __dirname:当前模块所在文件夹的完整路径
exports 和 module.exports
可以exports 或 module.exports暴露模块的属性或方法。
//方式1
exports.name = 'Tom';
//方式2
module.exports.name = 'Tom';
//方式3
module.exports = {
name:'Tom',
age:8
};
//注,exports不能直接通过{}来赋值暴露的属性或方法
exports = {
name:'Tom'
};//引入的模块名.name引用的结果是undefined
属性方法引用
- 在Node中,每一个js文件中的js代码都是独立运行在一个函数中而不是全局作用域,所以模块中的变量和函数在其他模块中无法直接访问
- 通过 exports 来向外部暴露变量和方法
//node1.js文件
exports.x = '暴露的x';
y = '非暴露的y';
exports.fn = function(){
console.log("暴露的函数fn");
};//暴露的函数
console.log('模块的代码');
//node2.js
var node1_obj = require('./node1.js');//模块的代码
console.log(node1_obj);//{ x: '暴露的x', fn: [Function (anonymous)] }
console.log(node1_obj.x);//暴露的x
console.log(node1_obj.y);//undefined
node1_obj.fn();//add暴露的函数fn
包package
将一组相关的模块组合到一起,形成一组完整的工具,称作包(package)。
CommonJS的包规范由包结构和包描述文件两个部分组成。
包结构:用于组织包中的各种文件。(package.json 描述文件、bin 可执行二进制、lib js代码、doc 文档、test 单元测试)
包描述文件:描述包的相关信息,以供外部读取分析。
每个项目最好有package.json 描述文件,里面有本项目的必备信息,例如项目版本version、项目描述description、项目入口main、依赖dependencies
NPM(Node Package Manager)
NPM帮助Node完成了第三方模块的发布、安装和依赖等工作。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。
NPM命令
npm --version
:查看npm版本,简写 npm -v
npm install --global npm
:npm升级
npm config list
:查看npm设置信息。npm config ls -l
查看npm所有的设置信息。
npm init
:按提示创建项目的package.json文件,npm init -y
跳过向导快速生成【这时项目名完全为项目文件名,大写不报警】
npm --help
:查看npm命令使用帮助,简写npm
npm 命令 --help
查看指定命令的使用帮助
npm search 包名
:搜索模块包,或者去npmjs官网搜索
npm install
:下载项目package.json文件中depandencies要求的所有第三方包。常在项目第三方包丢失时使用
npm install 包名
:在当前目录下安装包,放在项目的node_module文件夹;如果没有node_module文件夹,会生成该文件,并把包放在该文件夹中。简写npm i 包名
npm install 包名 --save
安装包并在项目package.json的depandencies属性中添加属性值,–save可在包名前或后,可简写为npm i -S 包名
npm install 包名 --global
全局模式安装包,简写npm i 包名 -g
npm uninstall 包名
:删除第三方包,只删除,json文件中的依赖信息仍存在。简写npm un 包名
npm uninstall --save 包名
删除第三方包的同时删除依赖信息,简写npm un -S 包名
NPM包引用
待补充
NPM注意
下载速度慢
原因:npm的服务器在国外,所以我们下载第三方包有时会很慢或者连接不上。
解决:从国内npm镜像下载,例如从淘宝npm