# sciter-study **Repository Path**: web_74/sciter-study ## Basic Information - **Project Name**: sciter-study - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-17 - **Last Updated**: 2026-10-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文件监听器 基于 **Sciter.JS** 的文件变动监听工具,实时显示目录下文件的增删改事件。 ## 功能 - 实时监听当前目录的文件变动 - 日志记录变动事件(创建/修改/删除) - 启动/停止监听控制 - 一键清空日志 - 浅色高对比度主题 ## 快速开始 ### 开发模式运行 双击 `run.bat`,或命令行: ```cmd run.bat ``` 使用 `usciter.exe` 加载 `index.html`,支持热修改——改完代码重新运行即可看到效果。 ### 打包成独立 exe 双击 `build.bat`,或命令行: ```cmd build.bat ``` 生成 `filewatcher.exe`(约 18.5MB),包含所有资源,可独立分发,无需安装 SDK。 --- ## Sciter.JS 官方手册要点 ### JS 运行时 Sciter.JS 使用 **QuickJS** 引擎,支持 **ES2020 superset**,内置 JSX 和 Reactor。 #### 内置模块 | 模块 | 用途 | 示例 | |------|------|------| | `@sys` | 文件系统/网络/进程(基于 libuv) | `import * as sys from "@sys"` | | `@env` | 环境信息(OS/平台/路径) | `import * as env from "@env"` | | `@sciter` | Sciter 专用函数 | `import { on, off } from "@sciter"` | | `@debug` | 调试支持 | `import * as dbg from "@debug"` | #### 预定义常量 - `__FILE__` — 当前文件 URL - `__DIR__` — 当前目录 URL(末尾含 `/`) - `__LINE__` — 行号 ### 第三方 JS 库支持 **纯 JS 的 ES Module 库都能用**,直接 `import` 即可。不能用依赖 Node.js API(`fs`/`Buffer`/`process`)或浏览器独有 API(Web Workers 等)的库。 | 库 | 支持 | 说明 | |---|---|---| | **dayjs** | ✅ | 纯 JS、无依赖、ESM 版本,直接 `import dayjs from "./dayjs.min.js"` | | **lodash-es** | ✅ | ESM 版本可用,建议按需导入单函数减小体积 | | **lodash** (CJS) | ⚠️ | 需 `samples/commonJS/require.js` 提供 CommonJS 支持 | | **Preact** | ✅ SDK 自带 | `samples/preact/preact.js`,设 `JSX = h` 即可 | | **Vue 3** | ✅ SDK 自带 | `samples/vue/vue-esm.js` | | **React** | ✅ 第三方 | github.com/veluxa/sciterjs-react | | **Mithril** | ✅ SDK 自带 | `samples/mithril/` | NPM 风格模块解析(`@sciter`): ```js import * as srt from "@sciter"; srt.setModuleUrlResolver((name, dir) => `${dir}node_modules/${name}/index.js`); ``` ### Reactor(UI 框架) Reactor 是 Sciter 内置功能,非外部库。核心 API: ```js const { signal, computed, effect } = Reactor; // signal:响应式值,用 .value 读写 const count = signal(0); count.value++; // 触发更新 // computed:计算 signal const double = computed(() => count.value * 2); // effect:副作用,自动追踪依赖 effect(() => console.log(count.value)); // 函数组件 function App() { return
计数: {count.value}
; } // 渲染 document.body.append(); ``` ### CSS 布局 Sciter 用 **flow + flex 单位** 替代 `display:flexbox`: ```css container { flow: vertical; /* 或 horizontal / horizontal-wrap / stack / grid() */ border-spacing: 8px; /* 子元素间距 */ } child { width: *; /* flex 填充,等价 flex:1 */ height: *; /* flex 填充 */ } ``` **注意**:Sciter 对 CSS 变量 `var()` 支持不完整,建议直接写颜色值。 ### JSX 语法 ```jsx // class 快捷写法 // 多 class // type + name 快捷写法 // 运行时状态
// 运行时 value ``` --- ## 打包运行说明(官方手册) ### scapp.exe 启动方式 ```cmd scapp.exe index.htm :: HTML 窗口模式 scapp.exe run.js :: bootstrap 模式 scapp.exe :: 不带参数按序查找: run.js → scapp.htm → main.htm → index.htm scapp.exe index.htm --debug :: 调试模式 ``` ### 打包成独立 exe 打包分两步: **1. packfolder 生成 .dat 资源包**(`-binary` 生成二进制,`-i` 只打包指定文件): ```cmd packfolder.exe appfolder output.dat -binary -i "index.html" ``` **2. scapp.assembleExe 组装最终 exe**(更新 PE 头 + 追加资源): ```js Window.this.scapp.assembleExe(scappPath, datFile, exeFile, { productName: "MyApp", productVersion: "1.0.0", }); ``` > **注意**:不能简单 `copy /b scapp.exe + resources.dat`,必须用 `assembleExe` API 正确更新 PE 头。也不能 `packfolder folder exe.exe` 不加 `-binary`,那样生成的是 C 源码不是二进制。 打包后 exe 从自身读取资源,URL 为 `this://app/`。启动时在资源根目录按序查找 `run.js` → `index.htm` → `main.htm`。 ### Bootstrap 模式(run.js) 用于窗口创建前初始化。**仅限** `@env`/`@sys`/`@sciter`,**无** DOM/fetch/setTimeout。 ```js import * as env from "@env"; application.start("gpu"); // 图形后端 const win = new Window({ url: __DIR__ + "main.htm" }); win.on("close", () => application.quit(0)); application.run(); // 消息循环 ``` ### 图形后端 | 值 | 平台 | 说明 | |---|---|---| | `gpu` | 全部 | 默认,自动选最快 | | `direct2d` | Windows | Windows 默认 | | `opengl` | 全部 | 跨平台 | | `vulkan` | Win/Linux | | | `metal` | macOS | | | `raster` | 全部 | 软件渲染 | --- ## 技术栈 | 项目 | 说明 | |------|------| | 运行时 | Sciter.JS(QuickJS + libuv) | | UI 框架 | Sciter Reactor(函数组件 + Signals) | | 文件监听 | `@sys` 模块 `sys.fs.watch()` | | 布局 | Sciter flow + flex 单位(`flow: vertical` / `width: *`) | | 样式 | CSS(直接颜色值,不用 CSS 变量) | ## 核心代码 ```javascript import * as sys from "@sys"; const { signal } = Reactor; const dir = URL.toPath(__DIR__); const watcher = sys.fs.watch(dir, (path, event) => { addLog("event", path + " [" + event + "]"); }); ``` ## 文件说明 ``` test/ ├── index.html # 主界面(Reactor + @sys 文件监听) ├── run.bat # 开发模式启动 ├── build.bat # 打包成独立 exe ├── pack.htm # 打包脚本(Sciter 窗口,调用 assembleExe) ├── pack.js # 打包逻辑(assembleExe API) ├── filewatcher.exe # 打包产物(约 18.5MB,可独立分发) └── readme.md # 本文档 ``` ## SDK 依赖 Sciter.JS SDK 位于 `E:\code\web\sciter-js-sdk\`,需包含: - `bin/windows/x64/usciter.exe` — 开发调试 - `bin/windows/x64/scapp.exe` — 打包容器 - `bin/windows/packfolder.exe` — 资源打包