Skip to content

上传题目模块

上传题目模块功能可以允许你将 Vue 题目 的全部内容放在一个 .vue 文件中并上传它。从而获得与编辑器内使用 “VUE SFC” 模式相同的功能。

说明

由于允许你在本地开发 Vue 题目模块,还会获得很多额外的优势:

  • 使用标准的 Vue 单文件组件语法开发。
  • 通过 Vite 编译为目标代码,因此你可以使用最新的 Javascript 语法,例如 import,而这并不支持在网页编辑器中使用。
  • 通过本地 DevServer 实现实时预览。你可以一边编写代码一边实时查看最终效果。
  • 允许引入第三方库。

文件格式

待上传的题目模块必须是 .vue 为扩展名的 Vue SFC 文件。文件中必须有 <template><style><script> 部分,各个部分的要求和 Vue 题目 相同。

使用模板开发

我们并不建议你手工在本地编辑器中编写以上三部分并上传。那样的开发体验甚至弱于网页编辑器。

请使用 ccxc-engine-puzzle-template CCXC 引擎谜题模板进行开发。

初始化模板项目

执行以下的命令来初始化模板项目:

bash
npx degit cipherpuzzles/ccxc-engine-puzzle-template your-project-name
cd your-project-name
npm install

开发前准备

你需要先编辑 .env.development.env.production。将其中的变量 VITE_BACKEND_ROOT 指向项目后端访问的路径。

启动 Dev Server 开发服务器

bash
npm run dev

注意

谜题模板也使用和其他前端组件相同的 mkcert 用于生成本地开发证书。

开发谜题

src/puzzles 目录下有许多 .vue 文件。每个文件是一个独立的谜题。

在模板项目中,已经有一些示例的谜题文件,可以参考这些文件的写法进行开发。

关于引入功能

在开发谜题时你可以使用 Vue 题目的任何功能。关于引入功能的介绍,请查看:Vue 题目 “引入功能” 一节

关于所有可以引入的功能,请参考CCXC Vue SFC API

使用第三方库

在示例谜题中,CanvasPuzzleChartPuzzle 都引入了第三方库。

要引入第三方库很简单,你只需要使用:

bash
npm install <第三方> --save

并在 .vue 文件中通过 import 引入即可。被引入的第三方库将会被打包进最终文件中。

说明

由于 Vite 有原生的 Tree Shaking 功能,对于一些很大的库,使用 import 导入部分功能,最终生成的文件只会包含导入部分的代码。

并且不会打包进没有引用这些第三方库的题目中。

所以你可以放心的安装和使用大型的第三方库。

构建谜题

和常见的前端项目一样,你只需使用:

bash
npm run build

即可启动构建。

这会将 src/puzzles 目录下的每一个 .vue 文件都编译成一个独立的文件,并输出到 dist/puzzles 目录。

打开 dist/puzzles 目录找到相同文件名的文件,即是最终的谜题文件。

上传编译好的题目

在“题目管理”中,新建或编辑题目。将“内容类型”选择为“上传题目模块”后,你会看到“上传题目模块”按钮。

点击此按钮,并选择 dist/puzzles 目录中编译出的谜题文件即可。

特别说明

编译出的文件和直接在编辑器里填写的 Vue 题目格式是一致的。

所以你其实可以打开编译出来的文件,并将 <template><style> 部分复制到“题目HTML”中。将 <script> 部分(不含 <script> 标签)复制到“题目代码”中。

除了这些代码不可读以外,实际效果是一样的。

预览模板

src 目录下的其他代码,例如 App.vuemain.jspreviewComponents 目录,实现了谜题的预览功能。

在执行 npm run dev 后,打开的服务器就是预览模板。

注意

要使用预览模板的所有功能(尤其是“调用后台题目脚本”或是“实时协作”),你必须点击右上角登录。然后通过 SSO 登录完成用户身份认证。为了让这个认证过程能在本地完成,你必须使用带有测试域名的开发服务器。例如:test.ccxc.ikp.yt。同时,你需要修改 ccxc-backend 的 SSO 登录流程,放行你自己的测试域名。

Released under the MIT License. Powered by VitePress.