nodejs初探
2021年8月11日
17:22
从cmd理解文件调用
- 命令
dir打开
cd改变目录
md、rd创建、删除文件
- 目录
. /
当前目录(可以省略)
../
上级目录
- path环境变量
变量中有许多路径,命令(1)先在当前目录寻找对象,如果没有(2)再在path中的路径依次寻找,如果没有再报错。【作用域链】
|
|
将要经常使用的程序或者文件加入环境变量。
2.进程和线程
进程
- 负责为程序运行提供必备的环境。
- 进程相当于工厂车间
线程
- 最小计算单位,负责执行程序
- 相当于工厂里面的工人
单线程
- js是单线程
多线程
node.js
服务器端JavaScript运行环境。node.js扩大了js的适用范围,从前端到系统。
I/O操作阻塞线程问题。
用node执行
文件夹下node hello.js
创建一个js文件
/创建日期/
console.log(“HELLO”);
模块化
引入模块(一个js文件)
必须按照先后顺序(缺乏模块系统)
CommonJS具有模块功能
- 一个js文件就是一个模块。
定义一个模块就是创建一个模块。
- 每个js文件的js代码都是独立运行在函数中不是以全局变量。
别的模块无法访问。模块间是封闭的,需要暴露属性。
- exports来暴露变量和方法。
exports.x = “晚上上一个文件的x”;
exports.fn = function(){}
模块引入
在一个js文件引入其他外部模块使用:
require(“传递文件的路径”);
路径以.或者..开头
”./文件.js“
使用require();引入后,该函数会返回一个对象
var md = require("./文件.JS");
对象【md】中包含了引入模块中export过的变量和函数。
例子:引入math模块进行运算
/文件1math.js/
exports.add=function(a,b){return a+b;}
exports.mul = function(a,b){return a*b;}
引用模块是,路径就是模块的标识。模块分为核心模块和文件模块。
核心模块由node.js提供,标识就是名字。
var fs= require(“fs”);
文件模块使用局对或者相对路径,相对路径需要./或许../
var math =require("./math.js");
math.add(1,2);
全局变量
global全局变量对象,所有的全局变量都是他的属性。
var a=2;局部变量
a=1;全局变量
console.log(global.a);
console.log(arguments);在函数里面运行
console.log(arguments.callee + “”);保存了单钱函数执行的对象
exports
- 该对象用来将变量或者函数暴露到外部
requie
- 函数,用来引入外部模块
module
- 代表当前模块本身
- exports就是module的属性
- exports==module.exports
__filename
- 当前模块的完整路径
__dirname
- 当前模块所在文件夹的路径
module.exports和exports
module.exports:改对象(堆 )
exports:改变量(栈)
浅拷贝和深拷贝
新建对象只有一个内存地址
包
模块放进文件夹,文件夹就是包。
- 基本结构
包结构
- package.json描述文件,整体描述(必须的)
- bin文件夹可执行二进制文件
- lib文件夹js代码
- doc文件夹放文档功能性的
- test文件夹放单元测试
包描述文件
dependencies依赖的包
description描述作用
devDependencies开发依赖
license权限
main主文件
name包的标识
ketwords
可以自动穿件,不能写任何注释。
- 写了JS文件加个package.json就是一个包
包就是大模块。
通过npm实践。
NPM
不要大写
npm -v版本
npm帮助
npm search KEYWOED搜索关键词
npm install/i package当前目录局部安装(要有一个package.json:目录下npm init初始化)
npm install package -g全局安装
npm remove 包:删除
引入模块
直接require(“math”);
项目文件
package.json(npm init)
npm_modules(npm安装一个包)
- bao
- bao2
index.js(初始化的接口)
缓冲区buffer
传输数据的介质
- 结构和素组很像,但buffer一旦创建不能改变大小,内存位数和值溢出。
- 数组不能存储二进制文件,buffer专门干这个
- 以二进制储存,十六进制显示。元素范围是00~ff(0~255)8bit=1byte(字节)
- buffer的一个元素占内存一个字节。
汉字占三个字节,字母一个字节。
fs文件系统
node操作文件
- 引入var fs = require(“fs”);
- sync同步
在内存里面打开了返回值描述符。
var fd = fs.openSync(“hello.txt”,“w”);
fs.writeSync(fd,string[,position[,encosing]]);
fs.closeSync(fd);
- 不带sync异步,callback
var fs= require(“fs”);
fs.open(“path”,“w”,function(err,fd))
结果通过回调函数的参数返回:
err 错误对象,没有则为null
fd 文件的描述符