【scratch源码】是什么?

Scratch源码指的是构建Scratch创意编程平台所需的所有计算机代码。这不仅仅是一个单一的文件或程序,而是由多个相互协作的项目组成的庞大代码库。简单来说,它是Scratch编辑器(无论是在网页上运行的,还是作为桌面应用运行的)以及支撑其功能的后端系统(如运行项目的虚拟机)的“蓝图”和“引擎”。

核心的Scratch 3.0源码主要包含以下几个主要部分:

  • scratch-gui: 这是Scratch用户界面的代码。你看到的所有图形元素,包括舞台、角色列表、积木面板、代码区域、造型编辑器、声音编辑器等,都是由这个项目负责构建和管理的。它是基于JavaScript和React框架开发的。
  • scratch-vm: 这是Scratch的“虚拟机”或“引擎”。当用户点击绿旗运行项目时,scratch-vm会解释并执行积木堆叠的代码。它负责处理积木的逻辑、协调角色动作、处理用户输入、与硬件交互(通过Scratch Link)等。它也是用JavaScript编写的。
  • scratch-blocks: 这是Scratch积木的实现。它基于Google的Blockly库进行定制和扩展,定义了各种积木的外观、形状以及它们如何连接。scratch-gui使用scratch-blocks来渲染和管理积木区域。主要使用JavaScript。
  • scratch-l10n: 这是Scratch界面的国际化(多语言)代码。它包含了Scratch编辑器中所有文本的翻译文件,使得Scratch能够支持全球多种语言。

除了这些核心组件,还有其他一些相关的源码项目,例如:

  • scratch-render: 负责将舞台上的角色、造型、背景等图形元素渲染到屏幕上。

  • scratch-storage: 处理Scratch项目的保存和加载,包括将项目打包成.sb3文件格式。

  • scratch-audio: 处理声音的播放和录制。

  • scratch-vm-types: 为scratch-vm提供的TypeScript类型定义。

总而言之,Scratch源码是一整套用现代Web技术(主要是JavaScript,配合HTML和CSS)编写的代码集合,共同构建了我们熟悉的Scratch创意编程环境。

【scratch源码】为什么公开?

Scratch的源码是完全公开的,并且遵循自由开源软件的许可证(通常是MIT许可证)。将其源码公开是Scratch项目理念的核心部分,原因有很多:

  • 教育目的: Scratch本身是一个教育工具,而公开其源码更是提供了一个极好的学习机会。学生、老师或任何对Scratch内部工作原理感兴趣的人都可以查看代码,学习构建这样一个复杂应用程序的技术,理解编程概念如何在实践中应用。
  • 透明和信任: 开放源码意味着任何人都可以审查代码,了解Scratch是如何运行的,没有隐藏的“魔法”。这增加了用户对平台的信任。
  • 社区贡献: 开放源码使得全球的开发者社区能够为Scratch做出贡献。无论是修复错误、改进现有功能,还是开发全新的积木扩展(Extensions),社区的力量都能帮助Scratch不断发展和完善。
  • 定制和二次开发: 源码的开放允许有技术能力的用户基于Scratch源码进行定制或二次开发。例如,教育机构可以根据自己的需求修改界面、添加特定功能的积木,或者开发者可以构建独立版本的Scratch编辑器,甚至将Scratch引擎(scratch-vm)嵌入到其他应用中。
  • 促进创新: 公开源码可以激发更多的创新。开发者可以研究Scratch如何实现某些功能(如积木拖拽、脚本执行),并将这些思想或技术应用到自己的项目中。
  • 长期可持续性: 即使开发团队发生变化,只要源码公开,社区就可以继续维护和发展Scratch,保证项目的长期可持续性。

因此,Scratch源码的公开不仅仅是分享代码,更是为了构建一个更开放、更协作、更有活力的教育和技术社区。

【scratch源码】在哪里可以找到?

Scratch的官方源码主要托管在GitHub上,这是一个非常流行的代码托管平台。Scratch团队和社区成员在这里进行代码的存储、版本控制、问题跟踪和协作开发。

主要的Scratch 3.0源码仓库都位于Scratch组织的GitHub页面下。你可以通过以下链接找到它们:

  • Scratch组织页面: https://github.com/LLK (LLK代表Lifelong Kindergarten Group,麻省理工学院媒体实验室开发Scratch的团队)

在这个组织页面下,你会找到上面提到的各个核心组件的独立仓库:

如果你对Scratch桌面编辑器(Scratch Desktop)的源码感兴趣,它也是基于这些核心组件构建的,通常也在LLK组织下有相关的仓库或构建脚本说明。

对于旧版本的Scratch(如Scratch 2.0),其源码通常也可以在GitHub或其他存档位置找到,但Scratch 3.0是当前活跃开发和维护的版本,因此其源码库是最推荐查看和使用的。

这些GitHub仓库不仅包含代码文件本身,还包括项目的README文件(通常包含项目的介绍、安装和运行说明)、CONTRIBUTING文件(贡献指南)、LICENSE文件(许可证信息)、问题跟踪器(Issues,用于报告Bug和提出功能请求)以及提交历史(Commits,记录了代码的所有修改)。

【scratch源码】有多少?

衡量“有多少”源码有多种角度,可以从代码行数、仓库数量、贡献者数量等方面来看。

仓库数量来看,如上所述,构建完整的Scratch 3.0编辑器需要至少依赖 scratch-gui, scratch-vm, scratch-blocks 这三个核心仓库,再加上其他辅助仓库,总共有十几个相关的官方代码仓库需要考虑。这还不包括社区成员基于Scratch源码创建的各种衍生项目或扩展。

代码行数来看,这是一个相当庞大的项目。虽然精确的代码行数会随着开发不断变化,但主要的仓库,如 scratch-gui 和 scratch-vm,都包含了数十万甚至更多的代码行(包括JavaScript/JSX、HTML、CSS等)。将所有相关的核心仓库代码行数加起来,可以轻松达到百万级别。这是一个复杂的应用程序,包含了图形界面、运行时引擎、积木逻辑、素材处理、国际化等众多功能,所以代码量是相当可观的。

贡献者数量来看,Scratch是一个活跃的开源项目。其GitHub仓库的贡献者列表中包含了大量来自全球的开发者。虽然核心开发团队负责主要的架构和方向,但许多Bug修复、小型功能改进、文档更新和翻译工作都依赖于社区贡献。主要的仓库通常有几百甚至上千名不同的贡献者提交过代码。

复杂程度来看,Scratch源码涉及现代前端开发技术(React)、虚拟机设计、图形渲染、积木编程语言解析等多个领域。理解整个系统需要花费不少时间和精力。

总的来说,Scratch源码是一个由多个大型、活跃的开源仓库组成的集合,代码量巨大,技术栈广泛,体现了一个复杂应用程序的工程规模。

【scratch源码】如何获取和运行?

获取和在本地运行Scratch源码,通常是为了学习其工作原理、进行定制开发或为项目做出贡献。这个过程需要一些基本的开发环境设置。以下是大致的步骤:

准备工作:

  1. 安装Git: 你需要使用Git来从GitHub克隆(下载)源码仓库。访问 https://git-scm.com/ 下载并安装适合你操作系统的Git。
  2. 安装Node.js和npm: Scratch源码是基于Node.js环境构建和运行的。npm (Node Package Manager) 是Node.js的包管理器,用于安装项目依赖。建议安装最新稳定版或LTS (长期支持) 版本的Node.js。访问 https://nodejs.org/ 下载并安装。安装Node.js时通常也会自动安装npm。
  3. 一个代码编辑器: 虽然不是必须的,但使用VS Code、Sublime Text、Atom等代码编辑器会极大地提高代码阅读和修改的效率。

获取源码:

Scratch编辑器是基于scratch-gui项目的,而scratch-gui又依赖于scratch-vm和scratch-blocks等。通常,只需要克隆scratch-gui仓库,它会通过npm自动管理对其他核心组件的依赖。

  1. 打开你的终端或命令行工具。
  2. 使用git clone命令克隆scratch-gui仓库到你的本地目录:

    git clone https://github.com/LLK/scratch-gui.git
  3. 进入新创建的scratch-gui目录:

    cd scratch-gui

安装依赖:

进入项目目录后,需要安装项目所需的所有依赖库和模块。

  1. scratch-gui目录下运行npm安装命令:

    npm install

    这个命令会读取项目中的package.json文件,并自动下载和安装所有列出的依赖项,包括scratch-vm、scratch-blocks等。这可能需要一些时间,取决于你的网络速度。

运行本地Scratch编辑器:

依赖安装完成后,你就可以构建并运行本地的Scratch编辑器了。

  1. scratch-gui目录下运行启动命令。通常用于开发的命令是:

    npm start

    或者可能是构建命令,具体请查看仓库的README文件。npm start通常会启动一个本地开发服务器,并编译代码。

  2. 等待命令执行完成。如果一切顺利,命令行会告诉你服务正在运行,并且通常会提供一个本地地址(如 http://localhost:8601/http://localhost:8079/)。
  3. 打开你的网页浏览器,访问提供的本地地址。你应该就能看到一个在你本地运行的Scratch编辑器界面了。

通过这些步骤,你就成功地获取了Scratch的源码并在本地运行起来了。这样你就可以开始探索代码结构、进行调试或尝试修改。

【scratch源码】如何进行修改和贡献?

一旦你在本地运行起Scratch源码,你就可以开始尝试修改它。如果你想将你的修改贡献回官方项目,使更多人受益,就需要遵循开源社区的贡献流程。

进行本地修改:

修改源码取决于你想改变什么。

  • 如果你想改变界面元素或布局,你需要在scratch-gui仓库中找到对应的React组件文件进行修改(通常在src/containers/src/components/ 目录下)。
  • 如果你想改变积木的行为或添加新的积木功能,你可能需要在scratch-vm仓库中修改或添加”opcode”(操作码)的实现,并可能需要在scratch-blocks仓库中定义新的积木外观和属性。
  • 修改代码后,保存文件。由于npm start通常会启用热重载(Hot Module Replacement),很多修改会立即或在浏览器刷新后生效。对于一些底层或配置的修改,你可能需要停止并重新运行npm start
  • 在本地编辑器中测试你的修改是否按预期工作。

向官方项目贡献(Pull Request流程):

如果你对源码的修改是通用且有益的(例如修复了一个bug,或者实现了一个社区普遍需要的小功能),你可以考虑将其贡献给Scratch官方仓库。标准的开源贡献流程是通过GitHub的Pull Request (PR) 实现的。

  1. Fork仓库: 在GitHub上,找到你想贡献的官方仓库(例如 scratch-gui),然后点击右上角的“Fork”按钮。这会在你的GitHub账户下创建一个该仓库的副本。
  2. 克隆你的Fork: 克隆你*自己*的仓库副本到本地,而不是直接克隆LLK的官方仓库:

    git clone https://github.com/你的用户名/scratch-gui.git

    进入目录:

    cd scratch-gui
  3. 添加上游仓库: 为了能与官方仓库保持同步,你需要将LLK的官方仓库添加为你的“上游”(upstream)远程仓库:

    git remote add upstream https://github.com/LLK/scratch-gui.git
  4. 创建新分支: 在进行修改之前,总是创建一个新的分支是一个好习惯。分支的名称应该简要描述你的修改内容(例如 fix/bug-descriptionfeat/new-feature-name):

    git checkout -b my-contribution-branch
  5. 进行修改: 在你新创建的分支上进行代码修改,就像你在上面“进行本地修改”部分做的那样。确保你的修改只针对你想要贡献的功能或修复。
  6. 提交修改: 将你的修改保存到Git历史中:

    git add .
    git commit -m "简要描述你的修改内容"
  7. 推送分支: 将你的本地分支推送到你GitHub上的仓库副本:

    git push origin my-contribution-branch
  8. 创建Pull Request (PR): 访问你在GitHub上的仓库副本页面(https://github.com/你的用户名/scratch-gui),GitHub通常会提示你刚刚推送了一个新分支,并提供创建Pull Request的按钮。点击按钮,填写PR的标题和描述,详细说明你做了什么修改,为什么做这些修改。
  9. 代码审查和讨论: 提交PR后,Scratch团队成员或社区维护者会审查你的代码。他们可能会提出问题、建议修改,或者要求你进行一些额外的测试。你需要根据反馈修改代码并再次推送(推送到同一个分支即可),PR会自动更新。
  10. 合并PR: 如果你的修改通过了代码审查并被接受,Scratch团队会将其合并到官方仓库的主分支中。这样,你的贡献就正式成为了Scratch项目的一部分。

在进行贡献之前,强烈建议先阅读目标仓库的CONTRIBUTING.md文件(如果有的话)和项目的代码行为准则,了解项目的具体贡献流程、编码规范和沟通方式。同时,查看现有的Issues列表,了解项目当前需要解决的问题或计划开发的功能,避免重复工作。

贡献开源项目是一个学习和协作的过程,即使是小的贡献也非常有价值。

重要提示: 直接修改官方克隆的仓库(而不是你的Fork),或直接在主分支上进行大量修改,都不是推荐的开源贡献方式。遵循Fork -> Branch -> Modify -> Commit -> Push -> Pull Request的流程,可以保持代码历史清晰,并方便进行代码审查和协作。


scratch源码