1.描述
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
是一门技术,不是一门语言。
作用:
方便测试JavaScript代码的运行环境
repl基本操作
变量、函数、对象
直接运行函数
使用下划线字符,表示上一个命令的返回结果
repl基本命令
.help .exit
2.下载/安装
第一种方式
https://nodejs.org/en/
下载下来直接安装即可
第二种方式
nvm方式安装
nvm install latest //安装最新的版本
3.版本管理工具nvm
1.下载地址:https://github.com/coreybutler/nvm-windows/releases
2.解压缩到某个文件夹中(elevate.cmd、elevate.vbs、install.cmd、LICENSE、nvm.exe)。例如 nvm
3.直接运行 install.cmd,忽略让输入的内容。直接回车即可。
4.在C盘根目录会生成 settings.txt
5.settings.txt文件内容
root: D:\Program Files\nvm
path: D:\Program Files\nodejs
arch: 64
proxy: none
node_mirror: http://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
6.配置环境变量
NVM_HOME D:\Program Files\nvm
NVM_SYMLINK D:\Program Files\nodejs
7.添加Path
%NVM_HOME%;%NVM_SYMLINK%;
8.cmd测试
nvm v 查看nvm版本
9.命令
查看本地安装的所有版本 : nvm list/nvm ls
安装指定版本node : nvm install 版本号
卸载指定版本node : nvm uninstall 版本号
切换使用指定版本的node :nvm use 版本号
4.helloworld程序
1.创建一个helloworld.js
d:/helloworld.js
2.编写代码
console.log("hello world");
3.运行程序
node helloworld.js
5.全局对象global
5.0 说明
global表示Node所在的全局环境,类似于浏览器的window对象
5.1 console
5.1.1定义变量 global.a=123和a=123的定义是一致的
var a = 123;
global.a = 1234;
console.log(a);
console.log(global.a);
5.1.2 断言 console.assert
var a = 1234;
console.assert(a==123,"判断失败了a不等于123");
5.1.3 输出代码的执行时间
console.time('time1');
for(var i = 0;i<1000;i++){}
console.timeEnd('time1');
注意:必须成对出现time1。
5.1.4 当前文件所在的文件路径 __dirname
console.log(__dirname);
5.1.5 当前文件的全路径
console.log(__filename);
5.2 process
5.6.1 说明
process对象是Node的一个全局对象,提供当前Node进程的信息。可以在脚本的任意位置使用。
5.6.2 使用
process.pid:当前进程的进程号。
console.log(process.pid);
process.version:Node的版本,比如v0.10.18。
console.log(process.version);
process.platform:当前系统平台,比如Linux。
console.log(process.platform);
process.env:指向当前shell的环境变量,比如process.env.HOME。
console.log(process.env);
process.stdout:指向标准输出。
process.stdout.write('shuaige');
process.stdin:指向标准输入。
process.stderr:指向标准错误。
5.3 module
Node内部提供一个Module构造函数,所有模块都是Module的实例
每个模块内部,都有一个module对象,代表当前模块.
module.id 带有绝对路径的模块文件名
module.filename 模块的文件名,带有绝对路径
module.loaded 表示模块是否已经完成加载
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块。
module.exports 模块对外输出的值
module.paths
5.4 exports
本身就是全局的,可以直接使用。
5.5 require
require操作的时候其实是去硬盘中去读js文件,把放入module对象当中去,内存中缓存中
在Node.js中,require命令用于加载模块文件
读取并执行一个JavaScript文件
然后返回该模块的exports对象
如果没有发现指定模块,会报错
加载规则
参数字符串以"/"开头
参数字符换以"./"开头
参数字符串不以"/"或"./",表示加载核心模块,或者一个位于各级node_modules目录已安装的模块
参数字符串可以省略后缀名
.js、.json、.node
.js会当做JavaScript脚本文件解析
.json会以JSON格式解析
.node会以编译后的二进制文件解析
5.6 模块 module.exports & require / exports & require
第一种写法:
代码:add.js
var add = function(a,b){
return a+b;
}
module.exports=add;
代码:one.js
var add = require("./add.js");
console.log(add(1,2));
第二种写法
var add = function(a,b){
return a+b;
}
exports.add=add;
var add = require("./add.js").add;
console.log(add(1,2));
var obj = require("./add.js");
console.log(obj.add(1,2));
6.node的模块
6.1 说明
一个文件就是一个模块
将方法挂载到exports对象上作为属性即可定义导出的方式
Node程序由许多模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。
Node.js本身就是一个高度模块化的一个平台
根据CommonJS规范,每一个模块都是一个单独的作用域
CommonJS规定,每个文件对外的接口是module.exports对象,该对象所有属性和方法,都可以被其它文件导入。
6.2 引用模块
模块引用require
6.3 模块标识
必须是符合小驼峰命名的字符串
以.、..开头的相对路径
绝对路径
可以没有文件名后缀.js
6.4 模块分类
6.4.1 核心模块 - 通过名字直接引入require('核心模块名')
fs(file system) 文件模块
http 网络请求模块
os 系统模块
path 路径模块
querystring 字符串查询模块,解析url查询字符串
url 地址模块,解析url
util 提供一系列实用小工具
.. 等等
核心模块的源码都在Node的lib子目录中。为了提高运行速度,它们安装的时候都会被编译成二进制文件
6.4.2 其它定义模块 - require('路径+模块名')
6.4.3 模块加载机制
如果require绝对路径的文件,查找时不会去遍历每一个node_modules目录,其速度最快。其余流程如下:
1. 从module path数组中取出第一个目录作为查找基准。
2. 直接从目录中查找该文件,如果存在,则结束查找。如果不存在,则进行下一条查找。
3. 尝试添加.js、.json、.node后缀后查找,如果存在文件,则结束查找。如果不存在,则进行下一条。
4. 尝试将require的参数作为一个包来进行查找,读取目录下的package.json文件,取得main参数指定的文件。
5. 尝试查找该文件,如果存在,则结束查找。如果不存在,则进行第3条查找。
6. 如果继续失败,则取出module path数组中的下一个目录作为基准查找,循环第1至5个步骤。
7. 如果继续失败,循环第1至6个步骤,直到module path中的最后一个值。
8. 如果仍然失败,则抛出异常。
6.5 总结
所有代码都运行在模块作用域,不会污染全局作用域
模块可以多次加载,但是只会在第一次加载的时候运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果
模块的加载顺序,按照代码的出现的顺序是同步加载的
require是同步加载模块的
7.npm包管理系统
7.1说明
一种含义是Node.js的开放式模块登记和管理系统
全球之最:最大的模块生态系统,里面所有的模块后者说是包,都是开源免费的,拿来即用
https://www.npmjs.com/
另一种含义是Node.js默认的模块管理器,是一个命令行下的软件,用来安装和管理node模块
7.2基础命令
npm init 【-y】 初始化一个package.json文件
npm install 包名 安装一个包
npm install jquery
npm install angular
npm install –save 包名 将安装的包添加到package.json的依赖中(dependencies)
npm install –g 包名 安装一个命令行工具
npm docs 包名 查看包的文档【非常有用】
npm docs jquery
npm docs angular
npm root -g 查看全局包安装路径
npm config set prefix “路径” 修改全局包安装路径
npm list 查看当前目录下安装的所有包
npm list -g 查看全局包的安装路径下所有的包
npm uninstall 包名 卸载当前目录下某个包
npm uninstall –g 包名 卸载全局安装路径下的某个包
npm update 包名 更新当前目录下某个包
npm update –g 包名 更新某个全局工具包
npm update 更新当前目录下安装的所有包
npm update –g 更新全局所有的工具包
7.3安装某个模块
7.4package.json