{"id":18777271,"url":"https://github.com/iyowei/fs-deep-walk","last_synced_at":"2026-05-20T07:32:58.201Z","repository":{"id":57119749,"uuid":"443287819","full_name":"iyowei/fs-deep-walk","owner":"iyowei","description":"专注于深度扫描指定磁盘位置。","archived":false,"fork":false,"pushed_at":"2022-01-06T04:17:12.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-16T06:32:54.645Z","etag":null,"topics":["crawler","directory","file","folder","folder-tooling","fs","nodejs","recursively-search","scan","scandir","scandir-recursive","scanner","walker"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iyowei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-31T07:45:11.000Z","updated_at":"2022-01-06T04:17:15.000Z","dependencies_parsed_at":"2022-08-23T15:40:54.962Z","dependency_job_id":null,"html_url":"https://github.com/iyowei/fs-deep-walk","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyowei%2Ffs-deep-walk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyowei%2Ffs-deep-walk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyowei%2Ffs-deep-walk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyowei%2Ffs-deep-walk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iyowei","download_url":"https://codeload.github.com/iyowei/fs-deep-walk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239687435,"owners_count":19680732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crawler","directory","file","folder","folder-tooling","fs","nodejs","recursively-search","scan","scandir","scandir-recursive","scanner","walker"],"created_at":"2024-11-07T20:09:32.117Z","updated_at":"2026-05-20T07:32:53.176Z","avatar_url":"https://github.com/iyowei.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @iyowei/fs-deep-walk\n\n专注于深度扫描指定磁盘位置。\n\n- [x] 复用整个穷举，程序执行完成只发生一次穷举\n- [x] 内嵌仅搜索\n- [x] 编程式匹配方式，甚至可以请求远程接口，或者有需要的话可以自己实现功能最匹配需求但代码量最少的模块，类似 “fast-glob”\n\n## 目录\n\n- [fsDeepWalk({ from, worker })](#fsdeepwalk-from-worker-)\n- [fsDeepWalkSync({ from, worker })](#fsdeepwalksync-from-worker-)\n- [安装](#安装)\n  - [NPM](#npm)\n  - [PNPM](#pnpm)\n  - [Yarn](#yarn)\n- [为什么不使用 glob？](#为什么不使用-glob)\n- [参与贡献](#参与贡献)\n- [其它](#其它)\n\n## fsDeepWalk({ from, worker })\n\n- `from` { String } 指定磁盘位置，**必填**\n- `worker` 处理器，如果扫描的同时需要更新、过滤操作可提供，一定程度复用穷举，**可选**，{ Function }\n  - 返回 { Object | Boolean | Promise }\n    - `false` 过滤掉当前扫描结果\n    - `true` 保留当前扫描结果\n    - 对象字面量，保留 / 更新当前扫描结果\n    - 如果需要在处理器中需要安放些异步操作，如远程数据请求，可在处理器中返回一个 Promise，该 Promise 可返回，\n      - `false` 过滤掉当前扫描结果\n      - `true` 保留当前扫描结果\n      - 对象字面量，保留 / 更新当前扫描结果\n      - 其它类型则默认为没有任何处理\n    - 其它类型则默认为没有任何处理\n- 返回: {Promise} 扫描到的文件夹、文件\n  - `files` 文件扫描结果\n  - `dirs` 文件夹扫描结果\n\n```js\nimport { log, time, timeEnd } from 'console';\nimport { fsDeepWalk } from @iyowei/fs-deep-walk;\n\n(async () =\u003e {\n  time('fsDeepWalk');\n\n  const asyncrslt = await fsDeepWalk({\n    from: process.cwd(),\n    worker: (cur) =\u003e {\n      const excludes = ['.git', 'node_modules'];\n\n      if (cur.dirent.isDirectory() \u0026\u0026 excludes.includes(cur.dirent.name)) {\n        return false;\n      }\n\n      return true;\n    },\n  });\n\n  timeEnd('fsDeepWalk');\n\n  log(asyncrslt);\n})();\n```\n\n## fsDeepWalkSync({ from, worker })\n\n- `from` { String } 指定磁盘位置，**必填**\n- `worker` 处理器，如果扫描的同时需要更新、过滤操作可提供，一定程度复用穷举，**可选**，{ Function }\n  - 返回 { Object | Boolean | Promise }\n    - `false` 过滤掉当前扫描结果\n    - `true` 保留当前扫描结果\n    - 对象字面量，保留 / 更新当前扫描结果\n    - 如果需要在处理器中需要安放些异步操作，如远程数据请求，可在处理器中返回一个 Promise，该 Promise 可返回，\n      - `false` 过滤掉当前扫描结果\n      - `true` 保留当前扫描结果\n      - 对象字面量，保留 / 更新当前扫描结果\n      - 其它类型则默认为没有任何处理\n    - 其它类型则默认为没有任何处理\n- 返回: {Promise} 扫描到的文件夹、文件\n  - `files` 文件扫描结果\n  - `dirs` 文件夹扫描结果\n\n```js\nimport { log, time, timeEnd } from 'console';\nimport { fsDeepWalkSync } from @iyowei/fs-deep-walk;\n\ntime('fsDeepWalkSync');\n\nconst syncrslt = fsDeepWalkSync({\n  from: process.cwd(),\n  worker: (cur) =\u003e {\n    const excludeDirs = ['.git', 'node_modules'];\n\n    if (cur.dirent.isDirectory() \u0026\u0026 excludeDirs.includes(cur.dirent.name)) {\n      return false;\n    }\n\n    return true;\n  },\n});\n\ntimeEnd('fsDeepWalkSync');\n\nlog(syncrslt);\n```\n\n## 安装\n\n\u003c!-- 标明支持的宿主、宿主版本，模块类型 --\u003e\n\n[![Node Version Badge][node version badge]][download node.js] ![esm][esm]\n\n### NPM\n\n```shell\nnpm add @iyowei/fs-deep-walk\n```\n\n### PNPM\n\n```shell\npnpm add @iyowei/fs-deep-walk\n```\n\n### Yarn\n\n```shell\nyarn add @iyowei/fs-deep-walk\n```\n\n## 为什么不使用 glob？\n\n\"@iyowei/fs-deep-walk\" 面对的场景与 \"[fast-glob][fast-glob]\" 一类非常相似。后者非常棒，只是各自适应不同的场景，对比 \"@iyowei/fs-deep-walk\" 的设定就会产生如下差异，\n\n- 无法复用穷举\n- 内嵌 “搜索 + 匹配”，复杂的实现势必增加体积、性能损耗\n- 配置式，（glob）匹配规则等\n\n总的来说，\"[fast-glob][fast-glob]\" 一类与 \"@iyowei/fs-deep-walk\" 的区别类似 Grunt 与 Gulp 的区别。\n\n## 参与贡献\n\n![PRs Welcome][prs welcome badge]\n\n## 其它\n\n\"@iyowei/fs-deep-walk\" 使用 [@iyowei/create-esm][create-esm] 脚手架生成。\n\n[fast-glob]: https://github.com/mrmlnc/fast-glob\n[node version badge]: https://img.shields.io/badge/node.js-%3E%3D12.20.0-brightgreen?style=flat\u0026logo=Node.js\n[download node.js]: https://nodejs.org/en/download/\n[esm]: https://img.shields.io/badge/ESM-brightgreen?style=flat\n[prs welcome badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat\n[create-esm]: https://github.com/iyowei/create-esm\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiyowei%2Ffs-deep-walk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiyowei%2Ffs-deep-walk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiyowei%2Ffs-deep-walk/lists"}