node.js,npm规范简介
I/O
- input和output 输入和输出
- 一般值对文件的读写操作
js在客户端运行
- Js在客户端浏览器中运行,不能对客户端本地的文件进行读写操作
- input:type=‘file’,文件上传,这种除外,但是得用户手动选择
js在服务器端运行,
- (基于node运行),可以对服务器端的文件进行操作
- node赋予js进行I/O操作的能力(内置模块fs)
window & global
- 在客户端浏览器运行js,全局对象为window(提供了很多属性和方法)
- 在node中运行js,js的全局对象是globa 或者是 当前模块
- process:node中进程管理的属性
- process.nextTick();下个任务
- process.env
- Buffer 文件数据流格式
- setImmediate 立即执行(类似于setTimeout(func,0));
- 在REPL命令中输出的this是global,但是在.js文件中输出的this是当前模块本身
npm
-
模块管理
-
npm i xxx -g /安装到全局
-
npm i xxx /安装到本地项目
- 把模块设置为开发依赖 npm i xx --save-dev
- 开发依赖npm i xxx -D
- 把模块设置为生产依赖 npm i xxx --save
- 项目依赖npm i xxx -S
- 把模块设置为开发依赖 npm i xx --save-dev
-
在本地安装模块之前,最好先npm init -y,用来生成package,json模块配置文件
- 把安装的模块生成配置清单,存放在package.json中,后期别人需要部署项目的时候,只需要执行npm i ,就可以把所有的依赖项重新安装一遍“跑环境”
-
安装在全局的对任何项目都有作用(也有可能导致冲突),但是只能基于命令的方式管理,不能基于CommonJS中的require导入使用(通俗的说,不能导入到文件中基于代码来处理)
- npm root -g 查看全局安装到的目录
- 之所以可以使用命令操作,是因为在全局目录下生成了个xxx.amd
-
安装在本地默认不能基于命令管理,但是可以导入到文件中基于代码使用,且只对当前项目有用
-
在package.json中,可以基于script选项配置本地可执行的脚本命令
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uEFgg4yo-1660124961821)(en-resource://database/902:1)]
-
在配置可执行脚本命令的时候,基于process的环境变量区分开发还是生产环境
CommonJs模块管理机制
- AMD:require.js
- CMD:sea.js
- CommonJS:node.js
- ES6: Module
- 这些模块化思想,规定了在JS中我们如何创建,如何导入和导出
- 内置模块:NODE中自带的
- http/https 创建和管理服务器的模块
- fs 基于JS进行I/O操作的
- url 解析URL地址的
- path 管理路径的
- …
- 第三方模块:基于npm安装的,别人写的
- less
- mime
- qs
- express
- express-session
- body-parser
- …
- 自定义模块:自己写的模块
- node是基于CommonJS的思想
node中的模块化管理
-
在node环境下中每创建一个js就是创建了个模块
-
模块中的方法也是模块的私有方法,不同模块之间的同名方法不会冲突
-
module。exports就是NODE天生自带的用来导出模块中方法的方式
- 这里面的属性方法就是暴露给外面调取使用的
-
require 是NODE天生提供的用来导入模块的方法
- 语法:let [模块名] = require([模块的地址])
- 可省略.js后缀名
- 如果调取自己定义的模块名,则需要加/(根目录) ./(当前目录) …/(上级目录) 这三个中的一个的某一个
- 不加上述地址,则先找第三方模块(安装在本地的),如果没有安装,则找内置模块,在没有就报错
- 每一次导入模块就是把导入的模块中的JS代码从上到下执行一遍
- 可在获取时直接结构,就不用B.方法了
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRVbIcxz-1660124961822)(en-resource://database/903:1)]
-
给文件写入内容
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FROnmoNW-1660124961822)(en-resource://database/904:1)]
- fs.writeFile(‘./js/AA/txt’,‘哈哈哈哈’,‘utf-8’,err=>{console.log(err)}
- readFile 读取文件
- writeFile 写入文件
- unlink 删除文件
- appendFile 追加写入文件
- fs.rmdir 删除目录
- fs.mkdir 创建目录