{"id":14971232,"url":"https://github.com/ospoon/dart-skeleton","last_synced_at":"2026-02-14T19:31:40.093Z","repository":{"id":105556515,"uuid":"429445931","full_name":"OSpoon/dart-skeleton","owner":"OSpoon","description":"项目由如图三块内容组成分别是：脚本，逻辑，CLI。 ","archived":false,"fork":false,"pushed_at":"2021-12-08T16:04:14.000Z","size":43,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-20T13:33:49.514Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/OSpoon.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-18T13:45:59.000Z","updated_at":"2022-04-12T01:01:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"1a213347-6e73-43a6-a53b-f4b666f67c3f","html_url":"https://github.com/OSpoon/dart-skeleton","commit_stats":{"total_commits":20,"total_committers":2,"mean_commits":10.0,"dds":"0.44999999999999996","last_synced_commit":"0a9fffcfaef1ef2e6dc8080f500b777ccc060c80"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OSpoon/dart-skeleton","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fdart-skeleton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fdart-skeleton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fdart-skeleton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fdart-skeleton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OSpoon","download_url":"https://codeload.github.com/OSpoon/dart-skeleton/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fdart-skeleton/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273089730,"owners_count":25043829,"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","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-09-24T13:44:53.918Z","updated_at":"2026-02-14T19:31:40.068Z","avatar_url":"https://github.com/OSpoon.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## dart-skeleton\n\n### 项目结构图：\n项目由如图三块内容组成分别是：脚本，逻辑，CLI。\n![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dc2364ab5efd45cebcc84dc92fd5bdb3~tplv-k3u1fbpfcp-zoom-1.image)\n#### 🥝脚本：\n主要的功能就是对目标页面进行分析对指定的元素进行绘制为灰色块，并按条件跳过指定的干扰元素。因为我们的使用是在浏览器中所以在编译Ts的代码的时候我们将`target`和`module`分别设置成了`es5`和`es2015`，为了方便逻辑块的调用我们没有导出函数而是直接挂在到`window`对象上。调试本地html文件的话可以直接将编译后的`Js`引入页面，当我们需要调试在线的一些页面的话可以在浏览器的开发者工具=\u003e`Sources`=\u003e`Snippets`中新建一个片段将我们编译后的`Js`放进去，直接Run来执行。\n\n\n#### 🥦逻辑：\n主要的功能是使用`**Puppeteer**`来加载目标页面，并执行我们第一阶段调试的脚本，最终导出骨架片段并插入目标页面。逻辑块的代码由于我们后续想通过CLI的方式在`Node`环境执行，所以编译成了`CommonJS`模块。需要特殊记录一下的是脚本注入后的执行函数，如下：\n```typescript\n// 执行脚本获取生成的html片段\nhtml = await page.evaluate((res) =\u003e {\n\treturn window.evalDOMScripts.apply(window, res);\n}, opts);\n```\n#### 🍦CLI：\n这块的功能相对简单，主要是通过命令行的方式来收集用户的输入信息，构建初始化配置文件和执行逻辑部分导出的启动函数。\n\n### 使用说明：\n#### 🍕构建说明：\n\n1. 全局安装Typescript，调试代码推荐一起安装ts-node：`yarn global add typescript ts-node`\n2. 安装项目配置的依赖：`yarn`\n#### 🍿脚本\u0026源码编译：\n\n1. 编译脚本文件：`yarn build:script`\n1. 编译源码文件：`yarn build:source`\n#### 🥗链接模块到本地NPM：\n\n1. 建立连接命令：`npm link`\n1. 反建立连接命令：`npm unlink`\n\n注：目前无法发布到NPM仓库，提示原因是由于模块的版本或依赖的版本存在低于`1.2`的情况，不再允许添加到NPM的注册表，稳定的项目有效的托管的话挺不错，练手的就别提交上去浪费资源了🤣。\n#### 🍝CLI使用说明：\n\n1. 初始化配置文件：`ds init`\n1. 执行生成函数：`ds start`\n### 演示效果：\n#### 手机版百度页面：\n![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8afdf0b9fcce43ce95765daf9b6ba366~tplv-k3u1fbpfcp-zoom-1.image)![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6966f10366204deaad73d1473bce18dd~tplv-k3u1fbpfcp-zoom-1.image)\n#### 手机版京东页面：\n![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eedb6c86edd948a9b53ae27819f74544~tplv-k3u1fbpfcp-zoom-1.image)![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7e78f49d6b8d47ee9c3dc2155d948de4~tplv-k3u1fbpfcp-zoom-1.image)\n\n\n#### 手机版哔哩哔哩页面：\n![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8c5eae34cd0f42b29c2b1390dab93c99~tplv-k3u1fbpfcp-zoom-1.image)![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/50f8c1b70fd34fec9d950d5b44b42ba6~tplv-k3u1fbpfcp-zoom-1.image)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fospoon%2Fdart-skeleton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fospoon%2Fdart-skeleton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fospoon%2Fdart-skeleton/lists"}