使用V8引擎开发的js运行环境
模块化开发,工程化开发的地基
node环境中,会将单个js文件中的所有代码,通过一个匿名函数包裹,以确保模块的封闭性。
参数
exports
导出成员的方法(不建议使用),不能重新赋值,会改变指向。
大概可以看成是下面这样。
let export = module.exports
require
引入模块
require('./example.js')
引入相对路径下的 example.js 模块
require('./example')
引入相对路径下的example.js ;如果没有该文件则查找路径下是否有同名目录,如果有则引入该目录中的index.js ;如果没有index.js,则引入相对路径下package.json文件中main属性指定的入口文件;都没有则报错
require('example.js')
引入node_modules 里面的example.js 模块
require('example')
首先查找是否是node内置模块;如果不是则到node_modules里面去查找是否是 第三方模块
module
当前模块,他的exports属性,用于导出模块里面的成员
__filename__
带有完整绝对路径的文件名
__dirname
目录的绝对路径。等同于path.dirname(__filename) (需要导入path模块)
this
node环境中的全局作用域下this指向一个空对象
global
node环境中的global 类似 浏览器环境中的 window对象
cjs 表示 CommonJS module。 esm 表示 ES module。NodeJS 使用的CJS标准。
webpack 打包时 ES6模块 会被打包成 CJS标准 以便兼容NodeJS
nvm管理nodejs版本
nrm
nrm管理npm源
安装nrm
npm i nrm -g
美美的CMD控制台
命令
npm init
初始化包描述文件
npm init -y
一路yes 生成默认的package.json
npm config get registry
(config可以省略)npm get registry
查询当前 包(模块)下载地址
npm config set registry http://...
(同上)npm set registry http://...
设置 包(模块)下载地址
npm install 包名
缩写npm i 包名
npm install
缩写npm i
不加包名默认会下载 package.json中 dependencies(生产依赖) 属性和devDependencies(开发依赖)属性 中提及的包。
npm install 包名 --save
缩写npm i 包名 -S
下载包,并且添加到生产环境依赖,默认就是添加到生产环境依赖(参与打包)
npm install 包名 --save-dev
缩写npm i 包名 -D
下载包,并且添加到开发环境依赖(不参与打包)
下载完成后会在package.json文件 dependencies 属性 保存下载的包的信息
package-lock.json 记录第三方包的详情(例如下载时快速定位下载地址)
npm remove 包名
缩写 npm r 包名
npm install 工具包 --global
缩写npm i 工具包 -g
全局安装
npm和yarn命令对比
npm yarn npm init yarn init npm init -y yarn init -y npm install yarn npm install xxx yarn add xxx npm install --global xxx yarn global add xxx npm uninstall xxx yarn remove xxx npm install xxx@版本号 yarn add xxx@版本号 npm install xxx --save yarn add xxx npm install xxx --save-dev yarn add xxx --dev npm update --save yarn upgrade npm run yarn run npm run xxx yarn run xxx
所有的模块都需要引入才能使用
路径分隔符
windows系统 路径分割符可以 斜杠 / 也可以是反斜杠 \
linux系统 路径分隔符只能是 斜杠 /
path.join()
根据NodeJS的系统环境,返回正确格式的路径地址
let url = path.join('a','b','c') # a\b\c let baseurl = path.join(__dirname,url) # 当前文件的绝对路径\a\b\c
path.resolve()
根据相对路径返回绝对路径
let relative_path_to_absolute_path = path.resolve('./a/b/c/example.txt') #文件的绝对路径\a\b\c\example.txt
由于Node环境执行的JavaScript代码是服务器端代码,所以,绝大部分需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码,否则,同步代码在执行时期,服务器将停止响应,因为JavaScript只有一个执行线程。
服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时,可以使用同步代码,因为这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行。
文件描述符:File descriptor,简称fd',当应用程序请求内核打开/新建一个文件时,内核会返回一个文件描述符用于对应这个打开/新建的文件,其fd本质上就是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开
原文链接:彻底搞懂文件描述符fd_Linux-IT乾坤技术博客
异步
fs.open(path[,flags[,mode]],callback(err,fd)) 打开文件
flags 限定打开文件后 进行的操作
'r'
读 默认值 文件必须存在,否则报错
'w'
写 如果文件不存在,则先创建一个文件
'r+'
读写 文件必须存在,否则报错
'rs+' 同步读写 指示操作系统绕过本地文件系统缓存
'wx'
类似'w'
如果路径存在则失败
'w+'
读写 如果文件不存在,先创建文件
'wx+'
类似'w+'
如果路径存在则失败
'a'
追加 如果文件不存在,先创建文件
'a+'
读取和追加 如果文件不存在先创建文件
'ax'
类似'a'
如果路径存在则失败
'ax+'
类似'a+'
如果路径存在则失败
mode 文件权限 默认值:0o666 (可读可写)
callback
err
fd
无返回值
fs.readFile() 读文件
fs.writeFile() 写文件
fs.stat() 获取文件信息
fs.close() 关闭文件
同步
fs.openSync(path[,flags[,mode]])
返回 文件描述符(fd)的整数
fs.readFileSync()
fs.writeFileSync()
fs.statSync()
fs.closeSync()
Buffer
Buffer存储的是二进制机械码,以16进制呈现。一个字节8位,可以存储0~255种状态。如果溢出,则只存储后8位。(用法和数组类似)
Buffer.from() 字符串转Buffer数据类型
Buffer.toString() Buffer数据类型转字符串
Buffer.alloc() 创建一个Buffer对象(不设置fill,则默认填满0)
Buffer.allocUnsafe() 创建一个Buffer对象(从内存中随机截取一段数据,可能包含敏感数据,也可能使垃圾数据),申请空间速度快。
未完待续。。。。。