恢复过时的项目
这周,我对 Starchart 做了一些维护工作。该项目已经有一段时间没有工作了,所以我们正在尝试更新它的依赖项。
发展空间
/
淀粉艺术
用于管理自定义域和证书的自助服务工具
星图
Starchart 使 Seneca 开发者社区可以轻松创建和管理自己的自定义子域和 SSL 证书,无需付费或无需提供个人信息。
有关运行 Starchart 的信息,请参阅我们的部署指南。有关开发信息,请参阅我们的贡献指南。有关更多技术背景、规划和初始设计,请参阅 wiki。
简介
互联网正在不断发展,曾经困难的事情变得简单。例如,托管自己的网站过去需要服务器管理、操作系统、网络等方面的知识。如今,许多开发人员托管他们的个人和项目网站而无需接触远程服务器,而是选择(免费)云服务,例如 GitHub Pages、 Vercel、Netlify 或 AWS。
互联网的安全模型也在不断发展。例如,浏览器供应商已在各地采用 HTTPS。这对于安全性很有好处,因为它可以在客户端和服务器之间实现基于证书的加密。然而,就像……
计划是修复 CI 工作流程,我们上周发现该工作流程已被破坏:
但在我找到解决方案之前,之前的开发人员之一 Eakam 解决了这个问题 - 事实证明这只是因为 Playwright 已经过时了。
将剧作家提升至 1.49.1
第772章

Playwright 安装在 CI(E2E 测试)中失败。修改剧作家版本应该可以解决这个问题。
参考:
我觉得我应该通过寻找更多的东西来弥补它,并认为更新更多的依赖项将是一个很好的起点。
由于该项目已经两年没有投入使用,因此存在大量由过时的软件包引起的安全漏洞。我能够通过 npm 审核修复修复大部分问题。
还有一些修复导致了 @remix-run/eslint-config 和 @remix-run/react 中的重大更改,所以我手动修改了它们。
其中一个更新(我同时更新了它们,所以我不能肯定地说,但我的赌注是 /react)导致了类型检查错误,因为 [@remix-run/react].useNavigation( ).formData 现在可能是未定义的类型。我用可选链修复了它。
// Before const isLoading = navigation.state === 'submitting' && Number(navigation.formData.get('id')) === dnsRecord.id; // After const isLoading = navigation.state === 'submitting' && Number(navigation.formData?.get('id')) === dnsRecord.id;
我所做的其他更改与弹出的一些 lint 错误有关(此时我意识到我已经关闭了 ESLint 扩展,但我确信这些警告会随更新一起出现,因为它在 CI 中从未发生过)过去)。
- 在一个文件中多次导入同一模块的实例:
// Before import { getCertificateByUsername } from '~/models/certificate.server'; import { deleteCertificateById } from '~/models/certificate.server'; import { isAdmin } from '~/models/user.server'; import { getUserByUsername } from '~/models/user.server'; // After import { getCertificateByUsername, deleteCertificateById } from '~/models/certificate.server'; import { isAdmin, getUserByUsername } from '~/models/user.server';
- 当首选 const 时使用 let:
// Before let date = val.toLocaleDateString('en-US', { // After const date = val.toLocaleDateString('en-US', {
很惊讶它之前没有捕捉到这些。
此外,当我打开 ESLint 扩展时,我有点吃惊,因为有大约 900 个 linter 错误。事实证明,这是因为 ESLint 对 Playwright 生成的输出进行了 linting。所以我将 /playwright-report 添加到 .eslintignore。
这就是我本次冲刺的维护工作的总和。最终修复了 30 个严重的安全问题,所以还不错。
更新依赖项
第775章

应该修复一堆安全漏洞。
变化
- [x] 凹凸依赖项
- [x] 将 /playwright-report 添加到 .eslintignore
- [x] 修复类型检查和 linter 错误
我还重新激活了 Dependabot,它更新了几个小版本。如果不必手动调查和修补安全漏洞,那就太好了。
在其他新闻中,我向 Mattermost 发出的一个拉取请求终于被合并了!
[GH-29548] 避免在 `tokens_store.go` 中使用 SELECT *
#29558

总结
此公关:
- 将 token_store.go 中的 SQL 查询切换为使用 SQLBuilder
- 在 TokenStore 的 SELECT 查询中显式定义列。
- 将常见查询分解到构造函数中。
门票链接
修复#29548
截图
发行说明
// Before const isLoading = navigation.state === 'submitting' && Number(navigation.formData.get('id')) === dnsRecord.id; // After const isLoading = navigation.state === 'submitting' && Number(navigation.formData?.get('id')) === dnsRecord.id;
不久前就已获得批准,但花了几周时间才合并到 main 中。
与此同时,我一直在致力于我的其他公关工作。我被要求进行一些更改,正在等待重新审核。
[MM-53650] 为 webapp 添加禁用表情渲染设置
#29414

总结
此拉取请求向 Web 应用程序添加了一个用户设置,以将渲染表情符号 (:D) 切换为表情符号 (?)。
该设置作为组件添加到 Components/user_settings/display/render_emoticons_as_emoji/ 中,并在 Components/user_settings/display/user_settings_display.tsx 中导入。
我在 user_settings_display.tsx 中添加了一个 renderOnOffLabel() 函数,该函数从 Components/user_settings/advanced/user_settings_advanced.tsx 中提取,以帮助渲染新组件。
使用 savePreferences() 操作将设置存储为用户首选项。
我已经为 utils/constants.tsx 和 webapp/channels/src/packages/mattermost-redux/src/constants/preferences.ts 添加了偏好常量。
为了实际使用该设置,我修改了 Components/post_markdown 以接收它的值作为道具,为此我使用了 getBool() 并向配置添加了默认值。 post_markdown 将此值传递给选项对象上的 Markdown,然后将其传递给 utils/text_formatting.tsx,最后将该值作为新添加的参数传递给 emoticons.tsx。 emoticons.tsx 检查该值是否为 true,如果是,则将表情符号转换为表情符号。
我已经更新了受影响的测试并为新组件创建了单元测试。我还更新了英文翻译文件。
QA 测试步骤
- 导航至用户设置。
- 转到显示类别。
- 找到标有“自动将表情符号渲染为表情符号”的部分,然后单击“编辑”。
- 切换设置并单击“保存”。
- 应使用该设置在客户端切换当前用户和其他用户发送的消息上的表情符号渲染。
门票链接
修复(部分)https://github.com/mattermost/mattermost/issues/26504 Jira https://mattermost.atlassian.net/browse/MM-53650
注意问题和票证也描述了将此功能添加到移动应用程序中,但此 PR 没有。
截图
before | after |
---|---|
![]() |
![]() |
发行说明
// Before const isLoading = navigation.state === 'submitting' && Number(navigation.formData.get('id')) === dnsRecord.id; // After const isLoading = navigation.state === 'submitting' && Number(navigation.formData?.get('id')) === dnsRecord.id;
处理这个 PR 很有趣,因为当我第一次提交它时,我什至不完全理解我的更改。离开很长一段时间后重新回到它并得到评论的反馈帮助我从一个新的角度看待它并更好地理解它。
Mattermost 应用程序从“首选项”和“配置”获取用户设置状态。我将我的设置添加到两者中,模仿建议我参考的现有设置之一,但事实证明“配置”用于服务器级设置,而这个新设置旨在成为客户端选项。这些评论帮助我了解了我哪里出错了,而且实际上最终的改变比我认为必要的要小。
总的来说,我想说这是相当富有成效的一周。
以上是恢复过时的项目的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。
