news 2026/5/15 4:51:56

前端技术写作自动化:基于Node.js的掘金技能工具集实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端技术写作自动化:基于Node.js的掘金技能工具集实践

1. 项目概述与核心价值

最近在技术社区里,一个名为Wscats/juejin-skills的项目引起了我的注意。乍一看,这像是一个针对掘金社区的工具集,但深入探究后,我发现它的价值远不止于此。本质上,这是一个面向前端开发者,特别是那些活跃在掘金这类技术社区进行内容创作和分享的开发者,所设计的一套自动化与效率提升工具链。它解决的核心痛点非常明确:如何将开发者日常的、重复性的、琐碎的技术分享准备工作自动化,从而让我们能把宝贵的时间和精力聚焦在技术思考与内容创作本身,而不是浪费在格式调整、图片处理、代码美化等“体力活”上。

我自己作为一名长期在掘金写作的前端工程师,对此深有感触。写一篇高质量的技术文章,从构思、编码、截图、撰写到最终排版发布,整个过程里,真正体现技术深度的编码和逻辑阐述可能只占一半时间,另一半则消耗在了为了让文章“看起来更专业”而进行的各种周边工作上。比如,需要把终端命令的运行结果截图并裁剪,需要把代码片段高亮并格式化,需要生成一张展示架构的流程图,甚至需要为文章头图设计一个简洁的Banner。juejin-skills项目正是瞄准了这些场景,它通过封装一系列脚本和工具,试图将这部分工作流水线化、自动化。

这个项目由开发者Wscats维护,从命名和内容来看,它非常“场景化”和“实用主义”。它不是一个大而全的框架,而是一套“开箱即用”的脚本合集,你可以根据自己的需求,像搭积木一样组合使用这些技能(skills)。对于任何希望提升技术写作效率、规范内容产出流程、或者单纯想学习如何用Node.js脚本解决实际工程问题的开发者来说,这个项目都是一个极佳的参考和学习资料。接下来,我将带你深入拆解这个项目的设计思路、核心模块以及如何将其融入你的工作流。

2. 项目架构与核心模块解析

2.1 整体设计思路:以“技能包”为核心的微工具集

打开juejin-skills的仓库,你会发现它的结构非常清晰。它没有采用复杂的、高度耦合的单一应用架构,而是遵循了“微工具”或“技能包”的理念。项目根目录下通常按功能划分了多个独立的脚本或模块目录,例如screenshot/(截图)、code-format/(代码格式化)、image-optimize/(图片优化)、diagram-generate/(图表生成)等。每个目录都是一个自包含的“技能”,拥有自己的配置文件、依赖和入口脚本。

这种设计带来了几个显著优势:

  1. 低耦合,高内聚:每个技能独立运作,你可以只安装和使用你需要的部分,而无需引入整个项目的包袱。比如,你只关心自动截图,那么只关注screenshot模块即可。
  2. 易于扩展和维护:当需要新增一个功能(例如,自动提取文章中的外链并检查其有效性)时,只需新建一个目录,实现对应的脚本,而不会影响其他已有功能。
  3. 学习成本低:每个技能模块的代码量相对较小,逻辑聚焦,非常适合开发者阅读源码、理解其实现原理,甚至进行二次开发。

项目的核心思路是:将技术写作中的常见手动操作,抽象为可配置、可执行的Node.js脚本。它通常利用npm scripts或更现代的pnpm/npx来驱动,通过与本地开发环境(如浏览器、编辑器、命令行工具)的交互,完成特定任务。

2.2 核心技能模块深度拆解

让我们深入几个最可能被用到的核心模块,看看它们具体解决了什么问题,又是如何实现的。

#### 2.2.1 自动化截图与裁剪模块

这是我认为最具实用价值的模块之一。技术文章中充斥着大量需要展示的界面:命令行终端输出、浏览器DevTools面板、软件操作界面、甚至是自己开发的组件效果。

  • 传统痛点:手动截图(Command+Shift+4Win+Shift+S) -> 打开预览软件裁剪 -> 调整大小 -> 保存为合适格式和路径。步骤繁琐,且难以保证多张图片风格(如边框、阴影、尺寸)统一。
  • 模块实现思路:该模块通常会集成puppeteer(无头浏览器)和sharp(高性能图片处理库)。
    1. 网页截图:对于需要展示网页状态的场景,脚本通过puppeteer启动一个无头Chrome实例,导航到指定URL或本地文件,并模拟滚动、点击等操作后,对特定DOM元素或整个视口进行截图。这完美解决了需要展示“动态加载后状态”或“特定交互后UI”的截图需求。
    2. 终端截图模拟:对于命令行输出,脚本可能通过node-pty模拟一个终端会话,执行命令并捕获其输出流,然后利用ansi-to-html之类的库将带颜色的ANSI转义序列转换为HTML,最后再用puppeteer将这个HTML渲染成图片。更轻量级的方案是直接使用terminal-image这类库来生成终端风格的图片。
    3. 智能裁剪与优化:截图得到的原始图片往往包含多余的浏览器边框、空白区域。sharp库在这里大显身手,它可以进行像素级的图片处理。脚本可以配置裁剪区域(基于坐标或元素选择器),添加统一的圆角、阴影,调整图片质量,并转换为WebP等现代格式以减小体积。
  • 实操配置示例:你可能会在模块的config.json中看到如下配置:
    { "screenshot": { "outputDir": "./assets/images", "viewport": { "width": 1200, "height": 800 }, "fullPage": false, "omitBackground": true, "optimize": { "format": "webp", "quality": 80 }, "clip": { "x": 10, "y": 60, "width": 1180, "height": 680 } } }
    通过一条命令如npm run screenshot:demo-page,即可自动完成打开页面、截图、裁剪、优化、保存的全过程。

#### 2.2.2 代码片段格式化与高亮提取模块

技术文章的核心是代码。直接从IDE复制粘贴的代码,往往带有项目特定的缩进、换行符,并且没有语法高亮。

  • 传统痛点:在编辑器和掘金编辑器之间来回切换,调整缩进,确保代码可读性。或者使用在线高亮工具粘贴后再复制HTML,流程割裂。
  • 模块实现思路:该模块是prettier(代码格式化)和highlight.jsprismjs(语法高亮)的集大成者。
    1. 智能格式化:脚本会读取指定目录(如./demos)下的源代码文件,使用prettier根据预定义的规则(.prettierrc)进行格式化,确保所有代码风格统一。
    2. 语法高亮转换:将格式化后的代码,根据语言类型,通过高亮库转换为带有CSS类名的HTML片段。juejin-skills的巧妙之处在于,它可能会生成与掘金社区Markdown编辑器兼容的代码块格式。掘金的编辑器支持特定的HTML结构或类名来实现高亮,脚本会据此进行适配。
    3. 一键插入:更进阶的功能是,脚本可以监听剪贴板,当你复制了一段代码后,自动触发格式化和高亮,并将处理好的内容直接写回剪贴板。这样,你只需在编辑器中按Ctrl+V,得到的就是已经美化好的代码块。
  • 注意事项:不同技术社区(掘金、知乎、CSDN、个人博客)的Markdown渲染器和代码高亮方案可能有细微差别。一个健壮的模块应该提供适配器(Adapter)模式,允许用户为不同的发布平台配置不同的输出模板。

#### 2.2.3 静态资源优化与图床集成模块

文章中的图片和视频是流量消耗大户,直接影响页面加载速度和读者体验。

  • 传统痛点:手动用Tinypng等网站压缩图片,然后将图片上传到图床(如GitHub、OSS、SM.MS),最后再复制外链到文章中。步骤多,易出错。
  • 模块实现思路:该模块将imagemin(图片压缩插件集合)与图床API客户端封装在一起,实现“压缩+上传”流水线。
    1. 本地压缩:使用imagemin配合imagemin-pngquantimagemin-mozjpeg等插件,对本地图片进行有损或无损压缩,在视觉质量损失可接受的前提下大幅减小文件体积。
    2. 自动上传:脚本集成诸如smmsqiniu等图床的SDK。压缩完成后,自动调用API上传图片,并获取返回的图片URL。
    3. 链接替换:最理想的状态是,脚本能解析你的Markdown文章,找到所有的本地图片引用(如![alt](./local/image.png)),自动将其替换为上传后得到的网络URL。这需要结合markdown-itremark这类Markdown解析器来实现AST操作。
  • 实操心得:这个模块的配置涉及第三方API密钥(如OSS的AccessKey),务必不要将包含密钥的配置文件提交到公开仓库。应该使用.env文件来管理环境变量,并在.gitignore中忽略它。脚本应优先从环境变量中读取这些敏感信息。

3. 从零开始集成与定制化工作流

3.1 环境准备与项目初始化

假设你是一个React技术栈的开发者,想要在下一个项目中集成这些“技能”。我们从头开始搭建。

首先,在你的项目根目录下初始化一个新的工具目录,或者如果你希望这些技能全局可用,也可以单独创建一个CLI工具项目。这里我们以前者为例,创建紧耦合的项目工具集。

# 在你的项目根目录 mkdir -p .scripts/juejin-skills cd .scripts/juejin-skills npm init -y

接下来,安装一些核心依赖。我们以实现“自动化截图”和“代码格式化”两个技能为例:

npm install puppeteer sharp prettier highlight.js clipboardy --save-dev
  • puppeteer: 用于控制浏览器进行截图。
  • sharp: 用于图片处理。
  • prettier: 用于代码格式化。
  • highlight.js: 用于代码语法高亮。
  • clipboardy: 用于跨平台读写剪贴板,实现“复制即美化”功能。

3.2 构建自动化截图脚本

.scripts/juejin-skills目录下创建screenshot.js

const puppeteer = require('puppeteer'); const sharp = require('sharp'); const path = require('path'); const fs = require('fs').promises; async function autoScreenshot(url, outputPath, elementSelector = null) { const browser = await puppeteer.launch({ headless: 'new' }); // 使用新的Headless模式 const page = await browser.newPage(); // 设置视口大小,模拟桌面浏览器 await page.setViewport({ width: 1200, height: 800 }); await page.goto(url, { waitUntil: 'networkidle2' }); // 等待网络空闲 let screenshotBuffer; if (elementSelector) { // 截取特定元素 const element = await page.$(elementSelector); if (element) { screenshotBuffer = await element.screenshot({ omitBackground: true }); } else { throw new Error(`Element ${elementSelector} not found.`); } } else { // 截取整个页面 screenshotBuffer = await page.screenshot({ fullPage: false, omitBackground: true }); } await browser.close(); // 使用sharp进行后处理:调整大小、添加圆角、优化 const processedBuffer = await sharp(screenshotBuffer) .resize(800, 600, { fit: 'inside' }) // 调整到适合文章的尺寸 .png({ quality: 85, compressionLevel: 9 }) // 输出为优化后的PNG .toBuffer(); // 确保输出目录存在 const dir = path.dirname(outputPath); await fs.mkdir(dir, { recursive: true }); await fs.writeFile(outputPath, processedBuffer); console.log(`✅ Screenshot saved to: ${outputPath}`); } // 使用示例 (async () => { try { // 示例1:截取掘金首页的导航栏 await autoScreenshot( 'https://juejin.cn', './assets/screenshots/juejin-nav.png', '.main-header' ); // 示例2:截取本地开发服务器的一个组件页面 await autoScreenshot( 'http://localhost:3000/demo', './assets/screenshots/local-demo.png' ); } catch (error) { console.error('❌ Screenshot failed:', error); process.exit(1); } })();

package.json中添加脚本命令:

{ "scripts": { "screenshot:juejin": "node .scripts/juejin-skills/screenshot.js" } }

现在,运行npm run screenshot:juejin,就能自动生成处理好的截图。

注意puppeteer在安装时会下载一个Chromium浏览器,体积较大。在国内网络环境下可能会失败。可以考虑使用PUPPETEER_DOWNLOAD_HOST环境变量指向国内镜像,或者直接使用系统已安装的Chrome:puppeteer.launch({ executablePath: '/path/to/chrome' })

3.3 构建“复制即美化”的代码处理脚本

创建code-beautifier.js,实现监听剪贴板并自动美化代码的功能。

const clipboardy = require('clipboardy'); const prettier = require('prettier'); const hljs = require('highlight.js'); const { program } = require('commander'); // 需要安装:npm install commander // 检测代码语言(简单实现) function detectLanguage(codeSnippet) { // 这里可以根据文件后缀或代码特征进行更复杂的检测 // 例如,如果从特定路径复制,可以推断语言 // 此处返回一个默认值,实际使用中可配置 return 'javascript'; } // 格式化并高亮代码 function beautifyCode(code, language = 'javascript') { // 1. 使用Prettier格式化 let formattedCode; try { formattedCode = prettier.format(code, { parser: 'babel', // 根据语言切换parser semi: true, singleQuote: true, trailingComma: 'es5' }); } catch (formatError) { console.warn('Prettier格式化失败,使用原代码:', formatError.message); formattedCode = code; } // 2. 使用highlight.js进行高亮 let highlightedCode; if (hljs.getLanguage(language)) { try { const result = hljs.highlight(formattedCode, { language }); highlightedCode = result.value; } catch (highlightError) { console.warn(`高亮语言 ${language} 失败:`, highlightError.message); highlightedCode = formattedCode; } } else { highlightedCode = formattedCode; } // 3. 包装成掘金Markdown编辑器兼容的代码块格式 // 掘金支持 ```language 和缩进代码块,这里生成带语言标识的围栏代码块 return `\`\`\`${language}\n${formattedCode}\n\`\`\``; // 如果需要直接得到高亮后的HTML(用于其他平台),可以返回: // `<pre><code class="hljs language-${language}">${highlightedCode}</code></pre>` } async function main() { program .option('-l, --language <lang>', '指定代码语言', 'auto') .option('-w, --watch', '监听剪贴板模式') .parse(process.argv); const options = program.opts(); if (options.watch) { console.log('👀 正在监听剪贴板,复制代码后自动美化... (按 Ctrl+C 退出)'); let lastContent = ''; setInterval(async () => { try { const currentContent = await clipboardy.read(); // 避免重复处理相同内容 if (currentContent && currentContent !== lastContent) { // 简单判断是否是代码(包含换行符或特定关键字) if (currentContent.includes('\n') || currentContent.includes('function') || currentContent.includes('const') || currentContent.includes('import')) { const lang = options.language === 'auto' ? detectLanguage(currentContent) : options.language; const beautified = beautifyCode(currentContent, lang); await clipboardy.write(beautified); console.log(`✅ 已美化 ${lang} 代码并写回剪贴板。`); lastContent = beautified; } } } catch (error) { // 忽略剪贴板访问的临时错误 } }, 1000); // 每秒检查一次 } else { // 单次处理模式:直接读取当前剪贴板内容 try { const code = await clipboardy.read(); const lang = options.language === 'auto' ? detectLanguage(code) : options.language; const output = beautifyCode(code, lang); console.log(output); // 输出到控制台 // 也可以选择写回剪贴板:await clipboardy.write(output); } catch (error) { console.error('❌ 读取剪贴板失败:', error.message); } } } main();

package.json中添加脚本:

{ "scripts": { "code:beautify": "node .scripts/juejin-skills/code-beautifier.js", "code:watch": "node .scripts/juejin-skills/code-beautifier.js --watch" } }

现在,当你从IDE复制一段格式凌乱的代码后,可以运行npm run code:beautify将其转换为美化后的代码块,或者运行npm run code:watch开启守护进程,实现复制后自动美化。

4. 高级应用:打造个性化写作流水线

4.1 集成与编排:使用 npm scripts 或 Gulp

单个技能脚本已经能提升效率,但真正的威力在于将它们串联起来,形成一条从写作到发布的自动化流水线。我们可以使用npm scripts的钩子或者任务运行器如Gulp来进行编排。

假设我们有一个标准的文章写作目录结构:

my-article/ ├── src/ │ ├── content.md # 文章Markdown主体 │ ├── demos/ # 示例代码 │ └── images/ # 本地图片素材 ├── scripts/ # 我们的技能脚本 └── package.json

我们可以在package.json中定义一系列有顺序的脚本:

{ "scripts": { "preprocess": "node scripts/screenshot-all.js && node scripts/optimize-images.js", "extract-code": "node scripts/extract-code-from-demos.js", "format": "prettier --write src/content.md", "build:article": "npm run preprocess && npm run extract-code && npm run format", "deploy:images": "node scripts/upload-to-cdn.js", "release": "npm run build:article && npm run deploy:images && echo '文章资源已就绪!'" } }

这条流水线的含义是:

  1. npm run build:article:首先预处理(自动截图+图片压缩),然后从demos目录提取代码片段插入文章,最后用Prettier统一格式化整篇Markdown。
  2. npm run release:在构建文章的基础上,将处理好的图片上传到CDN,并替换文章中的链接。

4.2 与现代前端工作流结合:Git Hooks + CI/CD

为了进一步自动化,我们可以将质量检查环节集成到Git工作流中。

  1. 使用 Husky + lint-staged

    npx husky-init && npm install --save-dev lint-staged

    package.json中配置:

    { "lint-staged": { "src/**/*.md": [ "node scripts/format-code-in-markdown.js", // 自定义脚本,格式化MD中的代码块 "prettier --write" // 格式化MD本身 ], "assets/images/**/*.{png,jpg,jpeg}": [ "node scripts/optimize-images.js --quick" // 提交前快速优化图片 ] } }

    这样,每次执行git commit时,会自动对暂存区(staged)的Markdown文件和图片进行格式化与优化,确保提交到仓库的内容是规范统一的。

  2. 利用 GitHub Actions 实现发布自动化: 你可以在.github/workflows下创建一个publish-article.yml工作流文件。当你在特定分支(如main)推送包含新文章的提交时,自动触发以下流程:

    • 运行完整的npm run release脚本。
    • 将处理后的最终文章(图片已替换为CDN链接)提交到一个专门用于发布的仓库或分支。
    • 甚至可以通过API自动发布到掘金、知乎等平台的草稿箱。 这实现了“写作即发布”的终极自动化,你只需要关心内容创作,后续的所有处理、优化、发布步骤都由CI流水线默默完成。

4.3 扩展技能:自定义你的专属工具

juejin-skills的理念是开放和可扩展的。你可以根据自己独特的写作习惯添加“技能”。例如:

  • 术语统一检查脚本:扫描文章,将“JS”统一为“JavaScript”,“React”统一为“React.js”(根据你的风格指南),避免术语不一致。
  • 链接有效性验证脚本:提取文章中的所有外链,使用node-fetch发起HEAD请求,检查链接是否有效(返回200状态码),防止出现死链。
  • 文章大纲自动生成脚本:解析Markdown的标题(#),自动生成文章目录(TOC),并插入到文章开头。
  • 性能数据可视化脚本:如果你写的文章涉及性能优化,可以写一个脚本自动运行Lighthouse CIWebPageTest,将性能评分、关键指标(FCP, LCP)自动生成趋势图或对比表格,并插入文章。

这些自定义脚本才是真正体现这个项目价值的地方,它从一个开源工具集,演变为你个人技术写作基础设施的核心部分。

5. 常见问题、排查技巧与最佳实践

在实际使用和借鉴juejin-skills项目思想的过程中,你可能会遇到一些典型问题。以下是我在实践中总结的排查清单和经验。

5.1 环境与依赖问题

问题现象可能原因解决方案
puppeteer安装失败或启动超时网络问题导致Chromium下载失败;系统缺少依赖库(如CentOS缺少libXss)。1. 设置环境变量PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors使用国内镜像。
2. 使用系统已安装的Chrome:puppeteer.launch({executablePath: '/usr/bin/google-chrome-stable'})
3. 对于Linux服务器,安装缺失的库:sudo yum install -y libXss
sharp库安装报错,提示node-gyp错误本地编译sharp的C++扩展失败,通常是因为没有安装Python或C++构建工具。1.Windows: 安装windows-build-tools(npm install --global windows-build-tools)。
2.macOS:xcode-select --install
3.Linux: 安装gcc-c++make。更推荐使用预编译版本:确保项目package.jsonsharp的版本与你的系统(特别是Node版本和平台)匹配,npm会自动选择预编译包。
脚本执行权限错误(Linux/macOS)脚本文件没有可执行权限。运行chmod +x path/to/your-script.js。如果通过npm script调用,则不需要。

5.2 脚本运行与功能问题

问题现象可能原因解决方案
截图脚本报错Navigation timeout页面加载过慢或页面内有无限循环的异步操作(如不断轮询)。1. 增加puppeteer的导航超时时间:page.goto(url, { timeout: 60000 })
2. 使用waitUntil: 'networkidle0'(无网络活动)替代networkidle2(最多2个网络连接)。
3. 在截图前,使用page.waitForSelector(‘.loaded-indicator’)等待特定元素出现。
代码高亮后格式错乱高亮库生成的HTML标签破坏了Markdown的解析;或Prettier格式化改变了代码语义(如错误的parser)。1. 检查输出格式。如果直接嵌入HTML,确保你的Markdown渲染器支持html标签。
2. 如果使用围栏代码块,确保高亮步骤只生成纯文本,高亮样式由前端的CSS负责。
3. 为Prettier指定正确的parser,如babel用于JS,html用于HTML。
图片上传到图床失败API密钥配置错误;网络问题;图床服务商接口变更。1.首要检查:API密钥、存储空间名称(Bucket)、上传域名等配置项是否正确,且是否有写入权限。
2. 在脚本中添加详细的错误日志,打印出图床API返回的具体错误信息。
3. 考虑增加重试机制,并使用更稳定的HTTP客户端(如axios)。
剪贴板监听脚本在Linux无图形界面服务器上报错clipboardy在headless环境下(如SSH连接到服务器)无法访问图形界面的剪贴板。1. 避免在无GUI环境运行监听模式。
2. 考虑使用替代方案,如通过文件系统监听特定文件的变化来触发处理。

5.3 最佳实践与心得

  1. 配置驱动,而非硬编码:将所有可变的参数(如输出目录、图片尺寸、API密钥、图床区域)提取到配置文件(如config.json.env)中。这样,切换环境或调整参数时无需修改代码。
  2. 错误处理要健壮:脚本中每一个异步操作(文件读写、网络请求、外部命令执行)都应该有try...catch包裹,并提供有意义的错误信息,方便排查。对于可重试的操作(如图片上传),实现简单的指数退避重试逻辑。
  3. 日志是调试的生命线:在脚本的关键步骤添加清晰的日志输出,使用不同符号区分信息()、警告(⚠️)、错误()。这能让你快速定位流程在何处中断。
  4. 优先处理本地,再处理远程:对于图片、代码等资源,先完成本地的压缩、格式化、整理,生成最终版本,再执行上传、发布等涉及网络的操作。这符合“离线优先”原则,网络故障不会影响你的核心写作流程。
  5. 版本化你的技能脚本:将.scripts/juejin-skills目录单独初始化为一个Git仓库,或者作为子模块(git submodule)引入你的各个文章项目。这样,你对脚本的改进可以同步到所有写作项目中。
  6. 保持脚本的纯粹性:每个脚本应只做好一件事(单一职责原则)。截图脚本就只负责截图和基础图片处理,上传脚本只负责上传。通过npm scripts或简单的Shell脚本将它们组合起来,而不是写一个巨无霸脚本。这大大提升了可维护性和可测试性。

回过头看,Wscats/juejin-skills项目的精髓不在于它提供了多少现成的脚本,而在于它展示了一种思路:将开发者的工程化能力反哺于内容创作本身。它鼓励我们像对待一个软件项目一样,去对待写作这个“项目”,用自动化工具解决重复问题,用标准化流程保证输出质量,用可复用的脚本积累个人或团队的“写作资产”。从这个角度看,它不仅仅是一个工具集,更是一套值得所有技术内容创作者学习和实践的方法论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 4:50:07

在 Taotoken 模型广场中根据任务需求与预算选择合适的模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在 Taotoken 模型广场中根据任务需求与预算选择合适的模型 面对市场上众多的大模型&#xff0c;开发者和团队在项目启动时常常面临…

作者头像 李华
网站建设 2026/5/15 4:49:05

Go语言链表:单向链表与双向链表

Go语言链表&#xff1a;单向链表与双向链表 1. 单向链表实现 type ListNode struct {Val intNext *ListNode }type LinkedList struct {head *ListNodesize int }func (l *LinkedList) Append(val int) {node : &ListNode{Val: val}if l.head nil {l.head node} else {c…

作者头像 李华
网站建设 2026/5/15 4:43:32

Acton NFT开发:创建和管理NFT智能合约的完整指南

Acton NFT开发&#xff1a;创建和管理NFT智能合约的完整指南 【免费下载链接】acton Toolchain for TON smart contract development and beyond 项目地址: https://gitcode.com/GitHub_Trending/acto/acton Acton是TON区块链生态的一站式智能合约开发工具链&#xff0c…

作者头像 李华
网站建设 2026/5/15 4:43:22

Python内容抓取工具contentclaw:插件化架构与实战解析

1. 项目概述&#xff1a;一个内容抓取与聚合的利器最近在折腾一个个人项目&#xff0c;需要从多个不同的网站和社交媒体平台定时抓取特定主题的内容&#xff0c;然后进行聚合和二次处理。一开始想着用现成的爬虫框架拼凑一下&#xff0c;但很快就发现&#xff0c;不同平台的反爬…

作者头像 李华
网站建设 2026/5/15 4:42:47

BilibiliDown终极指南:5分钟掌握B站视频下载神器

BilibiliDown终极指南&#xff1a;5分钟掌握B站视频下载神器 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bil…

作者头像 李华