是 Node 本身提供的一个核心模块,专门用来处理路径。

|

path.basename

获取一个路径的文件名部分

path.dirname

| 获取一个路径的目录部分 | | |

path.extname

| 获取文件后缀名 | |

文件路径操作

  • process.cwd:返回当前工作目录的绝对路径

    1. /Users/wangjiayan/Desktop/mycode/源码阅读/lerna
  • path.parse:返回路径的属性

    1. {
    2. root: "/",
    3. dir: "/Users/wangjiayan/Desktop/mycode/源码阅读",
    4. base: "lerna",
    5. ext: "",
    6. name: "lerna",
    7. }
  • **path.join**:把一段路径拼接起来。

    • 如果没传入path,则将返回'.',表示当前工作目录。
      1. path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
      2. // Returns: '/foo/bar/baz/asdf'
  • **path.resolve**:把一段段路径解析成绝对路径,拼接的过程就是从左到右执行**cd**的过程。

    • 如果没传入path,则返回当前工作目录的绝对路径。 ```javascript

path.resolve(‘wwwroot’, ‘static_files/png/‘, ‘../gif/image.gif’); // If the current working directory is /home/myself/node, // this returns ‘/home/myself/node/wwwroot/static_files/gif/image.gif’

  1. - `**path.relative**`,上面`**path.resolve**`返回的是绝对路径,这里返回的是`**path.resolve**`解析出来的相对路径。
  2. - `[**pkg-dir**](https://www.npmjs.com/package/pkg-dir)`**:给定一个目录,返回包含**`**package.json**`**的根目录。**
  3. 这个库的暴露方式也很有意思,除了`module.exports.default`之外,还可以挂载其他方法`module.exports.sync`
  4. ```javascript
  5. module.exports = pkgDir;
  6. // TODO: Remove this for the next major release
  7. module.exports.default = pkgDir;
  8. module.exports.sync = cwd => {
  9. const filePath = findUp.sync('package.json', {cwd});
  10. return filePath && path.dirname(filePath);
  11. };
  • [**findUp**](https://www.npmjs.com/package/find-up): 向上找某个某个文件,返回路径
  • [**locatePath**](https://www.npmjs.com/package/locate-path):返回包含当前路径名
  • [**path-exists**](https://www.npmjs.com/package/path-exists): 检查路径是否存在。
  • ensureFileSync:确保路径存在,不存在的话,就创建文件夹。

    glob

    glob,global 的简写,使用通配符来匹配大量文件

  • [glob ](https://github.com/isaacs/node-glob)

无限遍历目录

  1. import * as glob from 'glob';// 可以无限遍历目录
  2. export const load = (folder: string, options: LoadOptions = {}): KoaRouter => {
  3. const extname = options.extname || '.{js,ts}'
  4. // 把folder目录下的以js,ts结尾的文件都引入进来
  5. glob.sync(require('path').join(folder, `./**/*${extname}`)).forEach((item) => require(item))
  6. return router
  7. }