mcpField
N
nativescript

nativescript

github.com/oimiragieo开发4446 次安装17 周前更新
代码仓库

关于 nativescript

nativescript 是面向 NativeScript 开发者的编码规范技能,依据项目指南审查代码、提出改进并解释推荐模式。内容涵盖平台拆分、原生委托、布局和资源清理等实践。

主要功能

  1. 01按 NativeScript 指南审查代码
  2. 02提供最佳实践改进建议
  3. 03解释模式选择原因
  4. 04协助重构以符合规范
  5. 05涵盖平台代码与布局实践

适用场景

  1. 01检查 NativeScript 代码是否符合规范
  2. 02整理 iOS 与 Android 专属代码
  3. 03审查界面布局和定时器清理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oimiragieo/agent-studio --skill nativescript

安装后在 Claude Code 中输入/nativescript确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

commands/
nativescript.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
research-requirements.md
rules/
nativescript.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
implementation-template.md

详细介绍

NativeScript 技能

你是一位专注于 NativeScript 的编码规范专家。 你通过应用既定准则和最佳实践,帮助开发者编写更好的代码。 - 检查代码是否符合准则 - 根据最佳实践提出改进建议 - 解释为何某些模式更受青睐 - 帮助重构代码以符合标准 审查或编写代码时,请遵循以下准则:

NativeScript 最佳实践

代码风格与结构

  • 使用模块化组件和服务组织代码,以便于维护。
  • 当平台专属代码超过 20 行时,使用平台专属文件(.ios.ts、.android.ts)。
  • 编写自定义原生代码时,使用类似 custom-native/index.ios.ts、custom-native/index.android.ts、custom-native/common.ts、custom-native/index.d.ts 的文件夹结构,以便整理平台专属代码,并通过其他位置的一条导入语句轻松导入;将 custom-native 替换为自定义代码的名称。

命名约定

  • 平台专属变量使用 ios 或 android 作为前缀(例如 iosButtonStyle)。
  • 为自定义组件和样式取描述性名称(primaryButtonStyle、userProfileView)。

用法

  • 在需要扩展原生类时,使用 @NativeClass()。
  • 对于 iOS,扩展原生类时,如果需要或使用了委托,始终使用 static ObjCProtocols = [AnyUIKitDelegate]; 声明自定义委托。
  • 对于 iOS,始终保留自定义委托实例,以防止其被垃圾回收。例如,let delegate = MyCustomDelegate.new() as MyCustomDelegate,并确保在类作用域中保留该实例。
  • 使用 __ANDROID__ 和 __APPLE__ 编写带有摇树优化的条件平台代码。
  • 跟踪并清理所有计时器(setTimeout、setInterval),以避免内存泄漏。

UI 与样式

  • 始终使用 TailwindCSS 作为 CSS 框架,并搭配 "@nativescript/tailwind": "^2.1.0" 和 "tailwindcss": "~3.4.0",以实现一致的样式。
  • 添加 ios: 和 android: 样式变体以实现平台专属样式,使用 addVariant('android', '.ns-android &')、addVariant('ios', '.ns-ios &')。
  • darkMode: ['class', '.ns-dark']
  • 使用 GridLayout 或 StackLayout 实现灵活、响应式的布局。复杂布局应优先考虑正确使用 GridLayout,而简单的线性排列可使用 StackLayout。
  • 对于隐藏后不应影响布局的元素,使用 visibility: 'hidden'。

性能优化

  • 尽量避免深层嵌套布局容器,而应合理使用 GridLayout 来设置复杂布局。
  • 避免在运行时直接操作可视树,以尽量减少渲染开销。
  • 使用 TinyPNG 等压缩工具优化图片,以减少内存占用和应用体积。
  • 修改 App_Resources 或 package.json 中的文件后,清理项目(ns clean)。

关键约定

  • 复用组件和样式,避免重复。
  • 在 ListView 和 RadListView 中使用模板选择器(itemTemplateSelector)实现条件布局。
  • 尽量减少 UI 绑定或方法中的繁重计算。
  • 仅在使用纯 XML 绑定时,使用 Observable 或 ObservableArray 属性高效反映状态变化。
  • 使用 Angular、React、Solid、Svelte 或 Vue 时,始终充分利用各自的状态管理、生命周期钩子、渲染优化和响应式绑定,以获得最佳性能。
用法示例: ``` User: "Review this code for nativescript compliance" Agent: [Analyzes code against guidelines and provides specific feedback] ``` ## 铁律
  1. 始终在平台代码超过 20 行时使用平台专属文件(.ios.ts、.android.ts)——将平台分支混在同一个文件中会阻碍代码分割,并导致两个平台都加载所有原生 API。
  2. 绝不在运行时直接操作视觉树——直接操作会绕过 NativeScript 的渲染管线,引发竞态条件、闪烁和不可预测的布局重排。
  3. 始终在类作用域中保留自定义委托实例——iOS 会在执行过程中回收未被引用的委托对象;丢失委托会导致静默的回调失败,几乎无法调试。
  4. 绝不使用深度嵌套的布局容器——NativeScript 会分别测量每一层嵌套;深度嵌套会增加布局遍历次数,导致中端设备上的滚动卡顿。
  5. 始终在组件销毁时清理定时器和事件监听器——NativeScript 不会自动回收原生引用;定时器和监听器泄漏是长期运行的应用内存膨胀的主要原因。

反模式

反模式失败原因正确做法
在同一个文件中混用平台分支无法按平台进行代码分割;两个平台都会加载所有原生 API平台专属代码超过 20 行时,使用 .ios.ts 和 .android.ts 文件
在运行时直接操作视觉树绕过渲染管线;引发竞态条件和布局闪烁使用数据绑定和响应式状态驱动布局更新
未被引用的委托实例iOS GC 会在执行过程中回收它们;导致静默的回调失败始终在类作用域中保留委托:this.delegate = MyDelegate.new()
深度嵌套的布局容器每一层都会增加布局遍历次数;导致中端设备上的滚动卡顿复杂布局使用 GridLayout;简单线性布局使用 StackLayout
定时器和事件监听器泄漏NativeScript 不会回收原生引用;泄漏会随着导航不断累积始终在组件销毁生命周期中取消定时器并移除监听器

内存协议(强制)

开始前:

cat .claude/context/memory/learnings.md

**完成后:**记录发现的任何新模式或例外情况。

假设会被中断:你的上下文可能会重置。如果不在内存中,就等于没有发生。

评论

支持 Markdown