前言
最近在做实践项目,分析npm管理的依赖关系,需要用到Node的相关路径以及文件操作,刚上手node还有很多操作需要一步一步搜索查找,掘金中有很多相关内容的分享,这里整理了我在项目中用到的一些知识点,下次再用就熟能生巧了。
包管理机制
npm包查找机制
- 寻找当前目录下的node_modules目录下是否安装有require的npm包
- 如果step1没有找到,查询父级目录中的node_modules,热然没有则沿着路径向上递归,直至根目录下的node_modules
- 找到包的位置后会加载package.json中main指向的文件,如果没有package.json则依次查找index.js、index.json、index.node
package.json
依赖配置
- dependencies:生产环境需要的依赖
- devDependencies:开发环境需要的依赖
- peerDependencies:同伴依赖,用于指定当前包的兼容宿主版本,并不会被自动安装
- optionalDependencies:可选依赖
- bundleDependencies:打包依赖
常用模块操作
path模块
const path = require('path')
path.join('a', 'b.js') // 输出 a/b.js
path.join('') // 返回. 代表当前文件夹
path.parse('a/b/c/d.js') /* 返回对象
{
root: '/',
dir: 'a/b/c',
base: 'd.js',
ext: 'js',
name: 'd'
} */
path.relative('/user/a/b/c', '/user/a/e/f') // 返回'../../e/f'
-
路径拼接与拆分
-
path.join()方法传入字符串路径片段作为参数,返回拼接好的路径(根据win或linux系统选择对应的分隔符)
-
path.sep 属性平台的文件路径分隔符,配合split使用
'foo/bar/baz'.split(path.sep), 返回['foo', 'bar', 'baz']
-
-
路径对象
-
path.parse()将路径字符串解析为对象
-
path.format()将对象转化为路径字符串
-
path.basename()返回路径参数对应的文件名
-
path.dirname()返回路径参数对应的目录部分
-
path.extname()返回路径参数对应的文件拓展名,即路径中最后一个'.'之后的部分;如果一个路径中并不包含'.'或该路径只包含一个'.' 且这个'.'为路径的第一个字符,则此命令返回空字符串
-
-
相对路径与绝对路径
-
path.resolve([from...], to)将 to 参数解析为绝对路径,给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径
-
path.relative(from, to)返回从 from 到 to 的相对路径
-
path.isAbsolute(path)判断path是否是绝对路径
-
-
常用路径
- __dirname:文件所在目录的绝对路径
- __filename:文件的绝对路径
- process.cwd():运行node命令时所在的目录
fs模块
const fs = require('fs')
-
文件读取
fs.readFile( filename [,encoding, callback(error, data)] )异步方式读取文件fs.readFileSync( filename [,encoding, callback(error, data)] )同步方式
-
文件写入
fs.**writeFile**(filename,data,[options],callback)写入文件fs.append**File**(filename,data,[options],callback)追加内容
-
检查文件/路径是否存在
fs.exists( path, callback)查看文件与目录是否存在fs.existsSync( path, callback)同步方式