tauri项目结构

一个最简单的结构如下:

1722008804696
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
项目名称
├── node_modules
├── src
│ ├── assets //assets 文件夹用于存放静态资源,如图片、样式表等。
│ │ ├── vue.svg
│ ├── components
│ │ ├── greet.vue
│ ├── app.vue //app.vue 作为 Vue 应用的主组件,
│ ├── main.ts
│ ├── styles.css
│ └── vite-env.d.ts
├── src-tauri //在 src-tauri/src 目录中编写 Rust 代码,实现与前端的交互以及应用的后端逻辑
│ ├── src //用于编写 Rust 代码的目录。
│ │ └── main.rs
│ ├── target //存放 Tauri 应用编译构建时的代码。
│ ├── build.rs //Tauri 构建应用的相关文件。
│ ├── cargo.lock
│ ├── cargo.toml //cargo.toml则规定了 Rust 项目的依赖和一些构建设置
│ └── tauri.conf.json
├── index.html
├── package.json //前端项目的清单文件,包含项目的依赖、脚本等信息。
├── tsconfig.json //如果使用 TypeScript):TypeScript 的配置文件。
├── vite.config.ts //Vite 的配置文件,用于配置前端的构建选项、插件等。
├── yarn.lock
└──... (其他文件或目录)

vite.config.ts

vite.config.ts 是 Vite 项目中用于配置构建选项和插件的配置文件。

在 Tauri 项目中使用 Vite 时,可能需要自定义此文件以获得与 Tauri 的最佳兼容性。例如,通过 Vite 命令启动前端时,Vite 会在项目根目录中寻找名为 vite.config.ts 的配置文件。

以下是一个典型的 vite.config.ts 文件的示例内容及部分配置项的解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { defineConfig } from 'vite';
export default defineConfig({
// 防止 Vite 掩盖 Rust 错误
clearScreen: false,
// Tauri 期望固定端口,若该端口不可用则失败
server: {
strictPort: true,
},
// 用于访问由 CLI 设置的带有当前目标相关信息的 Tauri 环境变量
envPrefix: ['vite_', 'tauri_platform', 'tauri_arch', 'tauri_family', 'tauri_platform_version', 'tauri_platform_type', 'tauri_debug'],
build: {
// Tauri 在 Windows 上使用 chromium,在 macOS 和 Linux 上使用 webkit
target: process.env.tauri_platform === 'windows'? 'chrome105':'safari13',
// 调试构建时不进行压缩
minify:!process.env.tauri_debug? 'esbuild': false,
// 为调试构建生成源代码映射(sourcemap)
sourcemap:!!process.env.tauri_debug,
},
});

一些常见的配置项包括:

  • base:用于指定项目的基础路径,通常用于将项目部署到子路径的情况。
  • build:包含了构建相关的配置选项,比如输出路径(outdir)、是否开启压缩(minify)、是否开启代码分割等。上述示例中针对 Tauri 的不同平台设置了构建目标(target),以及根据调试状态决定是否压缩(minify)和生成源代码映射(sourcemap)。
  • server:用于配置开发服务器,例如主机地址、端口号(port)、是否自动在浏览器打开(open)、是否开启 https(https)、代理设置等。示例中设置了严格端口(strictPort)。
  • resolve:用于配置模块解析规则,包括路径别名(alias)、模块文件后缀名的解析顺序(extensions)等。
  • plugins:用于配置 Vite 插件,可以对代码进行转换、引入第三方库等。
  • define:用于定义全局变量,比如不同环境下的接口地址、应用名称等。
  • css:用于配置 CSS 相关的选项,比如预处理器(preprocessorOptions)、是否能查看 CSS 的源码(devSourcemap)等。
  • esbuild:用于配置 esbuild 相关的选项,比如自定义 jsx 配置、代码压缩优化等。

具体的配置项和含义可能会根据项目的需求和使用的插件而有所不同。通过配置 vite.config.ts 文件,可以根据项目的特定要求来调整 Vite 的构建行为和开发服务器的设置,以满足与 Tauri 框架的集成以及项目的特定需求。如果你使用的是特定的前端框架(如 React、Svelte 或 Vue),可能还需要保留或添加相应框架的插件配置。同时,确保根据 Tauri 的文档和项目的实际情况进行适当的配置。

tsconfig.json

在 Tauri 项目中,tsconfig.json 文件主要用于 TypeScript 编译器的配置。

它具有以下几个重要作用:

  1. 指定编译选项:例如设置编译的目标 JavaScript 版本("target"),决定是否生成源映射("sourceMap"),控制模块解析策略("module")等。
  2. 定义文件包含和排除规则:通过 "include""exclude" 字段,确定哪些 TypeScript 文件应该被编译,哪些应该被排除。
  3. 启用严格类型检查:可以通过 "strict" 等选项开启更严格的类型检查,提高代码质量和减少类型相关的错误。
  4. 路径别名配置:与 Vite 配置中的路径别名结合使用,方便在代码中使用简洁的别名来引用文件路径。
  5. 指定库声明文件:使用 "types" 字段指定要包含的额外类型声明文件。

例如,以下是一个简单的 tsconfig.json 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"compilerOptions": {
"target": "es6",
"module": "esnext",
"strict": true,
"sourceMap": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}

在这个示例中,编译器的目标是 es6 版本的 JavaScript,使用 esnext 模块系统,开启严格类型检查,生成源映射。include 字段指定包含 src 目录下的所有 TypeScript 文件,exclude 字段排除 node_modules 目录。同时,配置了路径别名 @ 指向 src 目录。

总之,tsconfig.json 有助于确保 TypeScript 代码在 Tauri 项目中的编译和类型检查按照期望的方式进行,提高开发效率和代码质量。

tsconfig.node.json

tsconfig.node.json 通常是一个特定于 Node.js 运行环境的 TypeScript 配置文件。

它可能包含与在 Node.js 中运行 TypeScript 代码相关的特定配置选项。例如:

  1. 可能会有不同的模块解析策略(moduleResolution),以适应 Node.js 的模块加载机制。
  2. 可以指定特定的库(lib),比如与 Node.js 核心模块或特定的 Node.js 相关的库。
  3. 可能会调整一些类型检查的严格程度(strict)或其他与 Node.js 运行时相关的编译选项。

通过将这些与 Node.js 相关的特定配置分离到一个单独的文件中,可以更有针对性地对在 Node.js 环境中运行的 TypeScript 代码进行优化和配置,同时保持主 tsconfig.json 文件的通用性和简洁性。

例如,如果项目的前端部分和后端(运行在 Node.js 上)部分有不同的配置需求,就可以通过这种方式分别进行配置。

tauri项目根目录下的index.html

tauri项目根目录下的 index.html是项目的主界面文件。它通常用于定义应用程序的初始界面结构和内容。

tauri+vite构建的项目中,index.html文件位于 src-tauri目录下。而在 electron+vite构建的项目中,该文件则在项目的根目录下。

如果你需要修改或查看 index.html的内容,可以在相应的位置找到该文件并使用文本编辑器打开进行编辑。

例如,在某些情况下,可能需要在 index.html<head>部分添加特定的代码或脚本。比如,要在 tauri项目中运行 vue-devtools,就需要将 vue-devtools窗口中复制的代码添加到 index.html<head>中,具体步骤如下:

  1. 全局安装 vue-devtoolscnpm install -g @vue/devtools(若没有 cnpm,可使用 npm install -g @vue/devtools)。
  2. 在命令行中直接运行 vue-devtools,然后复制里面的代码。
  3. 打开项目中对应的 index.html文件(tauri+vite构建的项目在 src-tauri目录下)。
  4. index.html文件的 <head>部分添加刚刚复制的代码并保存。添加代码后,窗口就会刷新,vue-devtools即可正常使用。

不同的 tauri项目可能会根据自身的需求和配置对 index.html进行不同的设置和使用。如果你在特定项目中有关于 index.html的更具体问题,可能需要参考该项目的文档、配置以及相关的开发指南来获取更准确的信息。另外,在修改 index.html之前,最好先了解修改可能带来的影响,以确保不会破坏项目的正常功能。

同时,如果你想清理 tauri项目编译出来的相关文件或缓存,可以参考以下步骤:

  1. 删除项目中的 node_modules文件夹,这将删除项目的大部分依赖模块。
  2. 删除 pnpm-lock.yaml文件(如果有)。
  3. 对于 tauri项目编译过程中生成的其他特定文件或目录,需要根据项目的配置和结构来确定其位置并进行手动删除。常见的编译输出可能会放在类似 distbuild或项目的特定输出目录中。

需注意,删除文件时要谨慎操作,确保你知道这些文件的用途并且确实不再需要它们,以免误删重要文件。如果使用了版本控制系统(如 Git),在进行清理操作之前,记得提交当前的代码更改,以防意外丢失。

设置默认的shell

1
2
chsh -s $(which zsh)
cat /etc/shells

tauri项目编译流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pnpm tauri dev

> eco-paste@0.0.4 tauri /Users/altnt/gitdep/ecopaste/EcoPaste
> tauri "dev"

Running BeforeDevCommand (`pnpm dev`)

> eco-paste@0.0.4 dev /Users/altnt/gitdep/ecopaste/EcoPaste
> run-s build:icon dev:vite


> eco-paste@0.0.4 build:icon /Users/altnt/gitdep/ecopaste/EcoPaste
> tauri icon public/logo.png

Appx Creating StoreLogo.png
Appx Creating Square30x30Logo.png
Appx Creating Square44x44Logo.png
Appx Creating Square71x71Logo.png
Appx Creating Square89x89Logo.png
Appx Creating Square107x107Logo.png
Appx Creating Square142x142Logo.png
Appx Creating Square150x150Logo.png
Appx Creating Square284x284Logo.png
Appx Creating Square310x310Logo.png
ICNS Creating icon.icns
Warn Waiting for your frontend dev server to start on http://localhost:1420/...
ICO Creating icon.ico
PNG Creating 128x128@2x.png
PNG Creating icon.png
PNG Creating 32x32.png
PNG Creating 128x128.png

> eco-paste@0.0.4 dev:vite /Users/altnt/gitdep/ecopaste/EcoPaste
> vite


VITE v5.2.12 ready in 2416 ms

➜ Local: http://localhost:1420/
➜ Network: use --host to expose
Info Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri for changes...
warning: skipping duplicate package `app` found at `/Users/altnt/.cargo/git/checkouts/tauri-plugin-context-menu-2c3100763c3e1052/e2afd46/examples/vanilla/src-tauri`
Compiling eco-paste v0.0.4 (/Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.20s
register Accelerator { id: Some(AcceleratorId(11944)), mods: ALT, key: KeyC }
register Accelerator { id: Some(AcceleratorId(17952)), mods: ALT, key: KeyX }

执行 pnpm tauri dev后,首先pnpm会读取package.json文件下找tauri脚本,执行tauri "dev",其中tauri脚本定义在package.json

1722064398109

执行tauri "dev", tauri会执行src-tauri/tauri.conf.json定义的"Running BeforeDevCommand (pnpm dev)

1722064528573

pnpm dev又在package.json中找dev脚本的定义,如下

1722064601098

接着执行run-s build:icon dev:vite

1722065000590

执行tauri icon public/logo.png

1722064799229

执行vite

先修改 pnpm tauri dev参数如下 pnpm tauri -v dev以打印vite的执行过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
vite


VITE v5.2.12 ready in 1808 ms

➜ Local: http://localhost:1420/



➜ Network: use --host to expose

这些日志是 Vite 在处理文件匹配模式(globs)时的调试信息。
它正在将一系列指定的文件匹配模式转换为正则表达式(regex),以便在处理项目文件时能够准确地识别和筛选出符合这些模式的文件。
例如:
- `**/npm-debug.log*` 表示匹配任何目录下以 `npm-debug.log` 开头的文件。
- `**/*.sw?` 表示匹配任何目录下以 `.sw` 为扩展名且后面最多跟一个字符的文件。
通过将这些 globs 转换为 regex,Vite 可以更高效地确定哪些文件需要处理,哪些文件可以忽略,以实现对项目文件的准确管理和操作。这些调试信息主要是为了展示 Vite 在内部进行文件匹配模式处理的过程和结果。
Debug [globset] built glob set; 0 literals, 1 basenames, 0 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
Debug [globset] glob converted to regex: Glob { glob: "**/npm-debug.log*", re: "(?-u)^(?:/?|.*/)npm\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('n'), Literal('p'), Literal('m'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/yarn-debug.log*", re: "(?-u)^(?:/?|.*/)yarn\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('y'), Literal('a'), Literal('r'), Literal('n'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/yarn-error.log*", re: "(?-u)^(?:/?|.*/)yarn\\-error\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('y'), Literal('a'), Literal('r'), Literal('n'), Literal('-'), Literal('e'), Literal('r'), Literal('r'), Literal('o'), Literal('r'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/pnpm-debug.log*", re: "(?-u)^(?:/?|.*/)pnpm\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('p'), Literal('n'), Literal('p'), Literal('m'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/lerna-debug.log*", re: "(?-u)^(?:/?|.*/)lerna\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('l'), Literal('e'), Literal('r'), Literal('n'), Literal('a'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/*.ntvs*", re: "(?-u)^(?:/?|.*/)[^/]*\\.ntvs[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, ZeroOrMore, Literal('.'), Literal('n'), Literal('t'), Literal('v'), Literal('s'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/*.sw?", re: "(?-u)^(?:/?|.*/)[^/]*\\.sw[^/]$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, ZeroOrMore, Literal('.'), Literal('s'), Literal('w'), Any]) }


Debug [globset] built glob set; 0 literals, 7 basenames, 5 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 7 regexes
Debug [globset] built glob set; 2 literals, 1 basenames, 0 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes

//这里应该是对应vite.config.ts的配置 ignored: ["**/src-tauri/**"],// 忽略对src-tauri目录的监听
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/Cargo.toml: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.macos.conf.json: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.conf.json: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/bin/ocr-aarch64-pc-windows-msvc.exe: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/bin/ocr-x86_64-apple-darwin: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/bin/ocr-x86_64-pc-windows-msvc.exe: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/bin/ocr-aarch64-apple-darwin: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/target: Ignore(IgnoreMatch(Gitignore(Glob { from: Some("/Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/.gitignore"), original: "/target/", actual: "target", is_whitelist: false, is_only_dir: true })))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.linux.conf.json: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/EcoPaste.desktop: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/Cargo.lock: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/build.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/.gitignore: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/icons: Ignore(IgnoreMatch(Gitignore(Glob { from: Some("/Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/.gitignore"), original: "icons", actual: "**/icons", is_whitelist: false, is_only_dir: false })))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.windows.conf.json: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/assets/tray.png: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/info.plist: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/locales/en_us.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/locales/mod.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/locales/zh_cn.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/core/tray.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/core/mod.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/fs_extra.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/window.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/backup.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/mod.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/paste.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/clipboard.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/mouse.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/locale.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/auto_launch.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/plugins/ocr.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src/main.rs: Ignore(IgnoreMatch(Override(Glob(UnmatchedIgnore))))


Info [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri for changes...


Debug [globset] built glob set; 0 literals, 3 basenames, 0 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
Debug [globset] glob converted to regex: Glob { glob: "**/npm-debug.log*", re: "(?-u)^(?:/?|.*/)npm\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('n'), Literal('p'), Literal('m'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/yarn-debug.log*", re: "(?-u)^(?:/?|.*/)yarn\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('y'), Literal('a'), Literal('r'), Literal('n'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/yarn-error.log*", re: "(?-u)^(?:/?|.*/)yarn\\-error\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('y'), Literal('a'), Literal('r'), Literal('n'), Literal('-'), Literal('e'), Literal('r'), Literal('r'), Literal('o'), Literal('r'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/pnpm-debug.log*", re: "(?-u)^(?:/?|.*/)pnpm\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('p'), Literal('n'), Literal('p'), Literal('m'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/lerna-debug.log*", re: "(?-u)^(?:/?|.*/)lerna\\-debug\\.log[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, Literal('l'), Literal('e'), Literal('r'), Literal('n'), Literal('a'), Literal('-'), Literal('d'), Literal('e'), Literal('b'), Literal('u'), Literal('g'), Literal('.'), Literal('l'), Literal('o'), Literal('g'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/*.ntvs*", re: "(?-u)^(?:/?|.*/)[^/]*\\.ntvs[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, ZeroOrMore, Literal('.'), Literal('n'), Literal('t'), Literal('v'), Literal('s'), ZeroOrMore]) }
Debug [globset] glob converted to regex: Glob { glob: "**/*.sw?", re: "(?-u)^(?:/?|.*/)[^/]*\\.sw[^/]$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true, empty_alternates: false }, tokens: Tokens([RecursivePrefix, ZeroOrMore, Literal('.'), Literal('s'), Literal('w'), Any]) }


Debug [globset] built glob set; 0 literals, 7 basenames, 5 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 7 regexes
Debug [globset] built glob set; 2 literals, 1 basenames, 0 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes


Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/Cargo.toml for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.macos.conf.json for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.conf.json for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/bin for changes...


Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/target: Ignore(IgnoreMatch(Gitignore(Glob { from: Some("/Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/.gitignore"), original: "/target/", actual: "target", is_whitelist: false, is_only_dir: true })))

Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.linux.conf.json for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/EcoPaste.desktop for changes...
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/Cargo.lock: Ignore(IgnoreMatch(Gitignore(Glob { from: Some("/var/folders/w5/4m4cmg5123q96tsgy7hbzl940000gn/T/.tauri-dev/.gitignore"), original: "Cargo.lock", actual: "**/Cargo.lock", is_whitelist: false, is_only_dir: false })))
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/build.rs for changes...
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/.gitignore: Ignore(IgnoreMatch(Hidden))
Debug [ignore::walk] ignoring /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/icons: Ignore(IgnoreMatch(Gitignore(Glob { from: Some("/Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/.gitignore"), original: "icons", actual: "**/icons", is_whitelist: false, is_only_dir: false })))
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/tauri.windows.conf.json for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/assets for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/info.plist for changes...
Debug [tauri_cli::interface::rust] Watching /Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri/src for changes...
warning: skipping duplicate package `app` found at `/Users/altnt/.cargo/git/checkouts/tauri-plugin-context-menu-2c3100763c3e1052/e2afd46/examples/vanilla/src-tauri`


Compiling eco-paste v0.0.4 (/Users/altnt/gitdep/ecopaste/EcoPaste/src-tauri)


Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.09s


register Accelerator { id: Some(AcceleratorId(11944)), mods: ALT, key: KeyC }
register Accelerator { id: Some(AcceleratorId(17952)), mods: ALT, key: KeyX }

当执行 vite 命令时,通常会执行以下主要操作:

  1. 解析配置:首先,Vite 会读取项目中的 vite.config.ts 或其他配置文件(如 vite.config.js),获取项目的配置信息,包括入口文件、输出目录、插件配置、构建选项等。

  2. 模块解析:根据配置中的模块解析规则,解析项目中的模块依赖关系。

  3. 依赖预构建:对于一些常见的第三方模块(如 lodash 等),Vite 可能会进行预构建,将其转换为 ESM(ECMAScript 模块)格式,以提高在浏览器中的加载性能。

  4. 开发服务器启动:启动一个本地开发服务器,监听指定的端口。

  5. 处理请求:当浏览器发送请求获取模块时,Vite 根据请求的模块路径和类型,进行相应的处理。

    • 对于 JavaScript/TypeScript 模块,直接进行实时编译和转换,并将结果返回给浏览器。
    • 对于静态资源(如 CSS、图片等),直接返回相应的文件。
  6. 热模块替换(HMR):在开发过程中,如果检测到代码的修改,Vite 会自动进行热模块替换,只更新修改的模块,实现页面的实时更新,无需手动刷新页面,极大地提高了开发效率。

  7. 构建优化:如果是在生产环境中运行 vite build 命令,还会进行一系列的构建优化操作,如代码压缩、代码分割、摇树优化(Tree Shaking)等,以生成优化后的生产版本代码。

总之,vite 命令的执行旨在为开发和构建现代前端应用提供高效、便捷的工具和流程。

Local: http://localhost:1420/

1722066055359

由于上面vite代码不知道在做什么,现在对package.json进行如下修改给vite加入--debug参数

1722073195490

运行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626


> eco-paste@0.0.4 tauri /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste
> tauri "dev"

Running BeforeDevCommand (`pnpm dev`)

> eco-paste@0.0.4 dev /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste
> run-s build:icon dev:vite


> eco-paste@0.0.4 build:icon /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste
> tauri icon public/logo.png

Appx Creating StoreLogo.png
Appx Creating Square30x30Logo.png
Appx Creating Square44x44Logo.png
Appx Creating Square71x71Logo.png
Appx Creating Square89x89Logo.png
Appx Creating Square107x107Logo.png
Appx Creating Square142x142Logo.png
Appx Creating Square150x150Logo.png
Appx Creating Square284x284Logo.png
Appx Creating Square310x310Logo.png
ICNS Creating icon.icns
Warn Waiting for your frontend dev server to start on http://localhost:1420/...
ICO Creating icon.ico
PNG Creating 128x128@2x.png
PNG Creating icon.png
PNG Creating 32x32.png
PNG Creating 128x128.png

> eco-paste@0.0.4 dev:vite /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste
> vite --debug

2024-07-27T09:34:16.508Z vite:config bundled config file loaded in 298.83ms
2024-07-27T09:34:17.722Z vite:config using resolved config: {
plugins: [
'vite:optimized-deps',
'vite:watch-package-data',
'vite:pre-alias',
'alias',
'vite:react-babel',
'vite:react-refresh',
'unocss:transformers:pre',
'unocss:global:content',
'unocss:global',
'vite:modulepreload-polyfill',
'vite:resolve',
'vite:html-inline-proxy',
'vite:css',
'vite:esbuild',
'vite:json',
'vite:wasm-helper',
'vite:worker',
'vite:asset',
'unocss:config',
'unocss:transformers:undefined',
'unocss:devtools',
'unocss:api',
'unocss:inspector',
'vite:wasm-fallback',
'vite:define',
'vite:css-post',
'vite:worker-import-meta-url',
'vite:asset-import-meta-url',
'vite:dynamic-import-vars',
'vite:import-glob',
'unocss:transformers:post',
'unocss:global:post',
'unplugin-auto-import',
'vite:client-inject',
'vite:css-analysis',
'vite:import-analysis'
],
resolve: {
mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
conditions: [],
extensions: [
'.mjs', '.js',
'.mts', '.ts',
'.jsx', '.tsx',
'.json'
],
dedupe: [ 'react', 'react-dom' ],
preserveSymlinks: false,
alias: [ [Object], [Object], [Object] ]
},
clearScreen: false,
server: {
preTransformRequests: true,
port: 1420,
strictPort: true,
watch: { ignored: [Array] },
sourcemapIgnoreList: [Function: isInNodeModules$1],
middlewareMode: false,
fs: {
strict: true,
allow: [Array],
deny: [Array],
cachedChecks: undefined
}
},
build: {
target: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
cssTarget: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
outDir: 'dist',
assetsDir: 'assets',
assetsInlineLimit: 4096,
cssCodeSplit: true,
sourcemap: false,
rollupOptions: { onwarn: [Function: onwarn] },
minify: 'esbuild',
terserOptions: {},
write: true,
emptyOutDir: null,
copyPublicDir: true,
manifest: false,
lib: false,
ssr: false,
ssrManifest: false,
ssrEmitAssets: false,
reportCompressedSize: true,
chunkSizeWarningLimit: 2000,
watch: null,
commonjsOptions: { include: [Array], extensions: [Array] },
dynamicImportVarsOptions: { warnOnError: true, exclude: [Array] },
modulePreload: { polyfill: true },
cssMinify: true
},
optimizeDeps: {
holdUntilCrawlEnd: true,
force: undefined,
esbuildOptions: { preserveSymlinks: false, jsx: 'automatic' },
include: [ 'react', 'react/jsx-dev-runtime', 'react/jsx-runtime' ]
},
esbuild: { jsxDev: true, jsx: 'automatic', jsxImportSource: undefined },
configFile: '/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/vite.config.ts',
configFileDependencies: [
'/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/vite.config.ts'
],
inlineConfig: {
root: undefined,
base: undefined,
mode: undefined,
configFile: undefined,
logLevel: undefined,
clearScreen: undefined,
optimizeDeps: { force: undefined },
server: { host: undefined }
},
root: '/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste',
base: '/',
rawBase: '/',
publicDir: '/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/public',
cacheDir: '/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite',
command: 'serve',
mode: 'development',
ssr: {
target: 'node',
optimizeDeps: { noDiscovery: true, esbuildOptions: [Object] }
},
isWorker: false,
mainConfig: null,
bundleChain: [],
isProduction: false,
css: { lightningcss: undefined },
preview: {
port: undefined,
strictPort: true,
host: undefined,
https: undefined,
open: undefined,
proxy: undefined,
cors: undefined,
headers: undefined
},
envDir: '/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste',
env: { BASE_URL: '/', MODE: 'development', DEV: true, PROD: false },
assetsInclude: [Function: assetsInclude],
logger: {
hasWarned: false,
info: [Function: info],
warn: [Function: warn],
warnOnce: [Function: warnOnce],
error: [Function: error],
clearScreen: [Function: clearScreen],
hasErrorLogged: [Function: hasErrorLogged]
},
packageCache: Map(1) {
'fnpd_/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste' => {
dir: '/Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste',
data: [Object],
hasSideEffects: [Function: hasSideEffects],
webResolvedImports: {},
nodeResolvedImports: {},
setResolvedCache: [Function: setResolvedCache],
getResolvedCache: [Function: getResolvedCache]
},
set: [Function (anonymous)]
},
createResolver: [Function: createResolver],
worker: { format: 'iife', plugins: '() => plugins', rollupOptions: {} },
appType: 'spa',
experimental: { importGlobRestoreExtension: false, hmrPartialAccept: false },
getSortedPlugins: [Function: getSortedPlugins],
getSortedPluginHooks: [Function: getSortedPluginHooks]
}
2024-07-27T09:34:17.808Z vite:deps Hash is consistent. Skipping. Use --force to override.

VITE v5.2.12 ready in 1764 ms

➜ Local: http://localhost:1420/
➜ Network: use --host to expose
2024-07-27T09:34:17.884Z vite:hmr [file change] src/types/auto-imports.d.ts
2024-07-27T09:34:17.893Z vite:hmr [no modules matched] src/types/auto-imports.d.ts
Info Watching /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src-tauri for changes...



warning: skipping duplicate package `app` found at `/Users/altnt/.cargo/git/checkouts/tauri-plugin-context-menu-2c3100763c3e1052/e2afd46/examples/vanilla/src-tauri`
 Compiling libc v0.2.155
 Compiling proc-macro2 v1.0.86
 Compiling unicode-ident v1.0.12
 Compiling cfg-if v1.0.0
 Compiling serde v1.0.204
 Compiling autocfg v1.3.0
 Compiling once_cell v1.19.0
 Compiling memchr v2.7.4
 Building [ ] 0/502: proc-macro2(build.rs), cf...
 Compiling version_check v0.9.4
 Building [ ] 1/502: proc-macro2(build.rs), au...
 Compiling log v0.4.22
 Building [ ] 2/502: proc-macro2(build.rs), au...
..........
 Building [=======================> ] 501/502: eco-paste(bin)
 Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 46s



!!!!首先进入index.html
2024-07-27T09:37:10.316Z vite:html-fallback Rewriting GET / to /index.html
2024-07-27T09:37:10.459Z vite:time 156.68ms /index.html

!!!!!/src/main.tsx
2024-07-27T09:37:10.462Z vite:resolve 14.19ms /src/main.tsx -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/main.tsx
2024-07-27T09:37:10.489Z vite:load 25.46ms [fs] /src/main.tsx
2024-07-27T09:37:11.743Z vite:load 0.04ms [plugin] /@react-refresh
2024-07-27T09:37:11.770Z vite:resolve 0.72ms /@vite/client -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/client.mjs
2024-07-27T09:37:11.776Z vite:load 5.60ms [fs] /@vite/client
2024-07-27T09:37:11.787Z vite:resolve 0.91ms @vite/env -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:11.789Z vite:import-analysis 6.31ms [1 imports rewritten] node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/client.mjs
2024-07-27T09:37:11.790Z vite:transform 9.61ms /@vite/client
2024-07-27T09:37:11.792Z vite:time 22.78ms /@vite/client
2024-07-27T09:37:11.801Z vite:load 11.96ms [fs] /node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:11.811Z vite:import-analysis 0.04ms [no imports] node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:11.811Z vite:transform 8.26ms /node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:11.811Z vite:time 10.84ms /node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:11.899Z vite:resolve 0.31ms virtual:uno.css -> /__uno.css
2024-07-27T09:37:11.910Z vite:resolve 11.26ms ./App -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/App.tsx
2024-07-27T09:37:11.911Z vite:resolve 11.55ms ./assets/css/global.scss -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/assets/css/global.scss
2024-07-27T09:37:11.911Z vite:resolve 12.15ms react/jsx-dev-runtime -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:11.911Z vite:resolve 12.20ms react-dom/client -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-dom_client.js?v=4d4b8099
2024-07-27T09:37:11.911Z vite:resolve 12.37ms @unocss/reset/tailwind-compat.css -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:11.912Z vite:resolve 12.44ms mac-scrollbar/dist/mac-scrollbar.css -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:11.921Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:11.933Z vite:import-analysis /node_modules/.vite/deps/react-dom_client.js?v=4d4b8099 needs interop
2024-07-27T09:37:11.936Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react_jsx-dev-runtime.js
2024-07-27T09:37:11.936Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-dom_client.js
2024-07-27T09:37:11.937Z vite:import-analysis 38.39ms [7 imports rewritten] src/main.tsx
2024-07-27T09:37:11.951Z vite:transform 1458.57ms /src/main.tsx
2024-07-27T09:37:11.952Z vite:time 180.78ms /src/main.tsx
2024-07-27T09:37:12.146Z vite:load 227.76ms [plugin] /__uno.css
2024-07-27T09:37:12.151Z vite:hmr [self-accepts] /__uno.css
2024-07-27T09:37:12.151Z vite:import-analysis 1.36ms [0 imports rewritten] /__uno.css
2024-07-27T09:37:12.151Z vite:transform 5.17ms /__uno.css
2024-07-27T09:37:12.152Z vite:cache [memory] /__uno.css
2024-07-27T09:37:12.153Z vite:time 0.34ms /__uno.css
2024-07-27T09:37:12.160Z vite:load 225.69ms [fs] /src/assets/css/global.scss
2024-07-27T09:37:12.751Z vite:load 817.52ms [fs] /src/App.tsx
2024-07-27T09:37:12.793Z vite:load 859.31ms [plugin] /node_modules/.vite/deps/react-dom_client.js?v=4d4b8099
2024-07-27T09:37:12.795Z vite:resolve 1.68ms ./chunk-WFZP5V7H.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:12.796Z vite:resolve 1.74ms ./chunk-FEW2R62K.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:12.796Z vite:resolve 1.77ms ./chunk-WXXH56N5.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:12.796Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-WFZP5V7H.js
2024-07-27T09:37:12.796Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-FEW2R62K.js
2024-07-27T09:37:12.796Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-WXXH56N5.js
2024-07-27T09:37:12.796Z vite:import-analysis 2.83ms [3 imports rewritten] node_modules/.vite/deps/react-dom_client.js?v=4d4b8099
2024-07-27T09:37:12.797Z vite:transform 3.06ms /node_modules/.vite/deps/react-dom_client.js?v=4d4b8099
2024-07-27T09:37:12.797Z vite:load 862.59ms [plugin] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:12.798Z vite:import-analysis 0.84ms [2 imports rewritten] node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:12.798Z vite:transform 1.43ms /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:12.798Z vite:load 864.37ms [fs] /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:12.799Z vite:hmr [self-accepts] node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:12.799Z vite:import-analysis 0.26ms [0 imports rewritten] node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:12.799Z vite:transform 0.74ms /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:12.799Z vite:load 865.29ms [fs] /node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:12.800Z vite:hmr [self-accepts] node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:12.800Z vite:import-analysis 0.21ms [0 imports rewritten] node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:12.800Z vite:transform 0.94ms /node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:12.801Z vite:time 641.37ms /node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:12.802Z vite:cache [304] /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:12.802Z vite:time 0.56ms /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:12.834Z vite:import-analysis 9.39ms [0 imports rewritten] /@react-refresh
2024-07-27T09:37:12.835Z vite:transform 1091.70ms /@react-refresh
2024-07-27T09:37:12.835Z vite:time 1095.40ms /@react-refresh
2024-07-27T09:37:12.855Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:12.855Z vite:resolve 2.62ms @ant-design/happy-work-theme -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@ant-design_happy-work-theme.js?v=4d4b8099
2024-07-27T09:37:12.855Z vite:resolve 2.65ms @tauri-apps/api/event -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:12.855Z vite:resolve 2.68ms @tauri-apps/api/shell -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:12.855Z vite:resolve 2.70ms antd -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:12.856Z vite:resolve 2.72ms arcdash -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:12.856Z vite:resolve 2.75ms react-router-dom -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-router-dom.js?v=4d4b8099
2024-07-27T09:37:12.856Z vite:resolve 2.77ms valtio -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:12.856Z vite:resolve 2.83ms ahooks -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:12.856Z vite:resolve 2.87ms react -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:12.856Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:12.857Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:12.857Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:12.857Z vite:hmr [self-accepts] src/App.tsx
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@ant-design_happy-work-theme.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_event.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_shell.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/antd.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/arcdash.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-router-dom.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/valtio.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/ahooks.js
2024-07-27T09:37:12.858Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react.js
2024-07-27T09:37:12.858Z vite:import-analysis 6.07ms [22 imports rewritten] src/App.tsx
2024-07-27T09:37:12.869Z vite:transform 117.61ms /src/App.tsx
2024-07-27T09:37:12.869Z vite:time 715.05ms /src/App.tsx
2024-07-27T09:37:12.873Z vite:load 76.57ms [plugin] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:12.877Z vite:import-analysis 3.46ms [1 imports rewritten] node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:12.877Z vite:transform 4.60ms /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:12.878Z vite:load 81.57ms [plugin] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:12.878Z vite:import-analysis 0.06ms [no imports] node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:12.878Z vite:transform 0.27ms /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:12.981Z vite:hmr [self-accepts] src/assets/css/global.scss
2024-07-27T09:37:12.981Z vite:import-analysis 0.19ms [0 imports rewritten] src/assets/css/global.scss
2024-07-27T09:37:12.981Z vite:transform 821.57ms /src/assets/css/global.scss
2024-07-27T09:37:12.982Z vite:time 823.49ms /src/assets/css/global.scss
2024-07-27T09:37:13.017Z vite:load 221.12ms [plugin] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.047Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.047Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.047Z vite:import-analysis 15.62ms [2 imports rewritten] node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.047Z vite:transform 29.48ms /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.061Z vite:load 203.32ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.062Z vite:resolve 0.27ms ./chunk-BB4JC3M7.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.062Z vite:resolve 0.35ms ./chunk-JYA7ERJH.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.062Z vite:resolve 0.38ms ./chunk-4IZEVUZK.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.062Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.062Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-BB4JC3M7.js
2024-07-27T09:37:13.062Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-JYA7ERJH.js
2024-07-27T09:37:13.062Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-4IZEVUZK.js
2024-07-27T09:37:13.062Z vite:import-analysis 1.24ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.063Z vite:transform 1.53ms /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.063Z vite:load 205.05ms [plugin] /node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:13.063Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.063Z vite:import-analysis 0.42ms [1 imports rewritten] node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:13.063Z vite:transform 0.70ms /node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:13.063Z vite:load 205.89ms [plugin] /node_modules/.vite/deps/@ant-design_happy-work-theme.js?v=4d4b8099
2024-07-27T09:37:13.064Z vite:resolve 0.25ms ./chunk-CJRCVHVX.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-CJRCVHVX.js?v=4d4b8099
2024-07-27T09:37:13.064Z vite:resolve 0.30ms ./chunk-MRWV3FAC.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-MRWV3FAC.js?v=4d4b8099
2024-07-27T09:37:13.064Z vite:resolve 0.32ms ./chunk-FJNRTQFW.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.064Z vite:cache [memory] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.065Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.065Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.065Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-CJRCVHVX.js
2024-07-27T09:37:13.065Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-MRWV3FAC.js
2024-07-27T09:37:13.065Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-FJNRTQFW.js
2024-07-27T09:37:13.065Z vite:import-analysis 1.18ms [6 imports rewritten] node_modules/.vite/deps/@ant-design_happy-work-theme.js?v=4d4b8099
2024-07-27T09:37:13.065Z vite:transform 1.47ms /node_modules/.vite/deps/@ant-design_happy-work-theme.js?v=4d4b8099
2024-07-27T09:37:13.065Z vite:load 207.48ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:13.066Z vite:resolve 0.19ms ./chunk-LBPUJSSY.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-LBPUJSSY.js?v=4d4b8099
2024-07-27T09:37:13.066Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.066Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-LBPUJSSY.js
2024-07-27T09:37:13.066Z vite:import-analysis 0.73ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:13.066Z vite:transform 0.94ms /node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:13.066Z vite:load 208.52ms [plugin] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.067Z vite:cache [memory] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.067Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.067Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.067Z vite:import-analysis 0.75ms [6 imports rewritten] node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.067Z vite:transform 0.96ms /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.067Z vite:load 209.57ms [plugin] /node_modules/.vite/deps/react-router-dom.js?v=4d4b8099
2024-07-27T09:37:13.073Z vite:cache [memory] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.073Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.073Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.073Z vite:import-analysis 4.89ms [3 imports rewritten] node_modules/.vite/deps/react-router-dom.js?v=4d4b8099
2024-07-27T09:37:13.073Z vite:transform 6.29ms /node_modules/.vite/deps/react-router-dom.js?v=4d4b8099
2024-07-27T09:37:13.075Z vite:load 217.85ms [plugin] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.081Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.081Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.081Z vite:import-analysis 2.99ms [4 imports rewritten] node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.081Z vite:transform 5.65ms /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.082Z vite:load 224.49ms [plugin] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.083Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.083Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.083Z vite:import-analysis 0.47ms [2 imports rewritten] node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.083Z vite:transform 0.69ms /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.083Z vite:load 225.33ms [plugin] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.083Z vite:resolve 0.17ms ./chunk-IORCOBDI.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.084Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.084Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.084Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-IORCOBDI.js
2024-07-27T09:37:13.084Z vite:import-analysis 0.69ms [3 imports rewritten] node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.084Z vite:transform 0.89ms /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.084Z vite:load 226.45ms [fs] /src/stores/global.ts
2024-07-27T09:37:13.084Z vite:load 226.71ms [fs] /src/stores/clipboard.ts
2024-07-27T09:37:13.084Z vite:load 226.89ms [fs] /src/constants/index.ts
2024-07-27T09:37:13.085Z vite:load 227.16ms [fs] /src/locales/index.ts
2024-07-27T09:37:13.085Z vite:load 227.44ms [fs] /src/utils/color.ts
2024-07-27T09:37:13.085Z vite:load 227.82ms [fs] /src/database/index.tsx
2024-07-27T09:37:13.127Z vite:load 269.05ms [fs] /src/plugins/locale.ts
2024-07-27T09:37:13.127Z vite:load 269.38ms [fs] /src/plugins/window.ts
2024-07-27T09:37:13.127Z vite:load 269.63ms [fs] /src/utils/is.ts
2024-07-27T09:37:13.127Z vite:load 269.87ms [fs] /src/router/index.ts
2024-07-27T09:37:13.128Z vite:load 270.80ms [fs] /src/hooks/useTheme.ts
2024-07-27T09:37:13.138Z vite:resolve 0.28ms @tauri-apps/api/path -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_path.js?v=4d4b8099
2024-07-27T09:37:13.138Z vite:resolve 0.34ms valtio-persist -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/valtio-persist.js?v=4d4b8099
2024-07-27T09:37:13.138Z vite:resolve 0.36ms valtio/utils -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/valtio_utils.js?v=4d4b8099
2024-07-27T09:37:13.139Z vite:import-analysis /node_modules/.vite/deps/valtio-persist.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.139Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_path.js
2024-07-27T09:37:13.139Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/valtio-persist.js
2024-07-27T09:37:13.139Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/valtio_utils.js
2024-07-27T09:37:13.139Z vite:import-analysis 1.26ms [4 imports rewritten] src/stores/clipboard.ts
2024-07-27T09:37:13.140Z vite:transform 56.02ms /src/stores/clipboard.ts
2024-07-27T09:37:13.141Z vite:time 137.31ms /src/stores/clipboard.ts
2024-07-27T09:37:13.152Z vite:import-analysis 0.05ms [no imports] src/constants/index.ts
2024-07-27T09:37:13.153Z vite:transform 68.34ms /src/constants/index.ts
2024-07-27T09:37:13.153Z vite:time 152.14ms /src/constants/index.ts
2024-07-27T09:37:13.154Z vite:resolve 1.55ms ./en-US.json -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/locales/en-US.json
2024-07-27T09:37:13.154Z vite:resolve 1.64ms ./zh-CN.json -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/locales/zh-CN.json
2024-07-27T09:37:13.154Z vite:resolve 1.71ms antd/locale/en_US -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/antd_locale_en_US.js?v=4d4b8099
2024-07-27T09:37:13.154Z vite:resolve 1.73ms antd/locale/zh_CN -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/antd_locale_zh_CN.js?v=4d4b8099
2024-07-27T09:37:13.154Z vite:resolve 1.80ms i18next -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/i18next.js?v=4d4b8099
2024-07-27T09:37:13.155Z vite:resolve 1.88ms react-i18next -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.155Z vite:resolve 1.96ms @tauri-apps/api/app -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_app.js?v=4d4b8099
2024-07-27T09:37:13.155Z vite:resolve 2.00ms @tauri-apps/api/os -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_os.js?v=4d4b8099
2024-07-27T09:37:13.155Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.155Z vite:import-analysis /node_modules/.vite/deps/valtio-persist.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.156Z vite:import-analysis /node_modules/.vite/deps/antd_locale_en_US.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.156Z vite:import-analysis /node_modules/.vite/deps/antd_locale_zh_CN.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.157Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/antd_locale_en_US.js
2024-07-27T09:37:13.157Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/antd_locale_zh_CN.js
2024-07-27T09:37:13.157Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/i18next.js
2024-07-27T09:37:13.157Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-i18next.js
2024-07-27T09:37:13.158Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_app.js
2024-07-27T09:37:13.158Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_os.js
2024-07-27T09:37:13.158Z vite:import-analysis 5.56ms [7 imports rewritten] src/locales/index.ts
2024-07-27T09:37:13.158Z vite:import-analysis 5.58ms [5 imports rewritten] src/stores/global.ts
2024-07-27T09:37:13.160Z vite:transform 75.05ms /src/locales/index.ts
2024-07-27T09:37:13.160Z vite:transform 75.84ms /src/stores/global.ts
2024-07-27T09:37:13.160Z vite:time 156.58ms /src/locales/index.ts
2024-07-27T09:37:13.160Z vite:time 162.62ms /src/stores/global.ts
2024-07-27T09:37:13.161Z vite:load 98.49ms [plugin] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.162Z vite:import-analysis 0.40ms [1 imports rewritten] node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.162Z vite:transform 1.06ms /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.162Z vite:load 99.72ms [plugin] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.162Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.163Z vite:import-analysis 0.35ms [1 imports rewritten] node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.163Z vite:transform 0.58ms /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.163Z vite:load 100.46ms [plugin] /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.163Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:import-analysis 0.70ms [3 imports rewritten] node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:transform 0.91ms /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:load 99.03ms [plugin] /node_modules/.vite/deps/chunk-MRWV3FAC.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:import-analysis 0.23ms [no imports] node_modules/.vite/deps/chunk-MRWV3FAC.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:transform 0.56ms /node_modules/.vite/deps/chunk-MRWV3FAC.js?v=4d4b8099
2024-07-27T09:37:13.164Z vite:load 98.54ms [plugin] /node_modules/.vite/deps/chunk-LBPUJSSY.js?v=4d4b8099
2024-07-27T09:37:13.165Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.166Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.166Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.166Z vite:import-analysis 0.82ms [3 imports rewritten] node_modules/.vite/deps/chunk-LBPUJSSY.js?v=4d4b8099
2024-07-27T09:37:13.166Z vite:transform 1.22ms /node_modules/.vite/deps/chunk-LBPUJSSY.js?v=4d4b8099
2024-07-27T09:37:13.166Z vite:load 82.11ms [plugin] /node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.167Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.167Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.167Z vite:import-analysis 1.00ms [2 imports rewritten] node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.167Z vite:transform 1.41ms /node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.168Z vite:load 103.19ms [plugin] /node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.169Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.169Z vite:import-analysis 0.58ms [1 imports rewritten] node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.169Z vite:transform 0.90ms /node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.177Z vite:resolve 0.17ms lodash-es -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.177Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.177Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/lodash-es.js
2024-07-27T09:37:13.177Z vite:import-analysis 0.64ms [2 imports rewritten] src/utils/color.ts
2024-07-27T09:37:13.177Z vite:transform 91.83ms /src/utils/color.ts
2024-07-27T09:37:13.177Z vite:time 177.92ms /src/utils/color.ts
2024-07-27T09:37:13.200Z vite:resolve 2.24ms /src/constants -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/constants/index.ts
2024-07-27T09:37:13.200Z vite:resolve 3.06ms @tauri-apps/api/fs -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:13.200Z vite:resolve 3.22ms tauri-plugin-sql-api -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/tauri-plugin-sql-api.js?v=4d4b8099
2024-07-27T09:37:13.201Z vite:resolve 3.29ms @tauri-apps/api -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.201Z vite:resolve 3.56ms @tauri-apps/api/window -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:13.202Z vite:resolve 4.40ms @/constants -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/constants/index.ts
2024-07-27T09:37:13.202Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.202Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.203Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_fs.js
2024-07-27T09:37:13.203Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/tauri-plugin-sql-api.js
2024-07-27T09:37:13.203Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api.js
2024-07-27T09:37:13.203Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_window.js
2024-07-27T09:37:13.204Z vite:import-analysis 6.53ms [7 imports rewritten] src/database/index.tsx
2024-07-27T09:37:13.204Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.204Z vite:import-analysis 6.85ms [3 imports rewritten] src/plugins/locale.ts
2024-07-27T09:37:13.206Z vite:transform 120.40ms /src/database/index.tsx
2024-07-27T09:37:13.206Z vite:transform 79.23ms /src/plugins/locale.ts
2024-07-27T09:37:13.206Z vite:import-analysis 9.06ms [5 imports rewritten] src/plugins/window.ts
2024-07-27T09:37:13.207Z vite:time 29.01ms /src/plugins/locale.ts
2024-07-27T09:37:13.207Z vite:transform 79.77ms /src/plugins/window.ts
2024-07-27T09:37:13.207Z vite:cache [304] /src/database/index.tsx
2024-07-27T09:37:13.207Z vite:time 0.18ms /src/database/index.tsx
2024-07-27T09:37:13.209Z vite:cache [304] /src/plugins/window.ts
2024-07-27T09:37:13.210Z vite:time 0.43ms /src/plugins/window.ts
2024-07-27T09:37:13.212Z vite:load 72.63ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_path.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:resolve 0.21ms ./chunk-GWWTMTUP.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-GWWTMTUP.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:resolve 0.26ms ./chunk-WEA6OKKO.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-WEA6OKKO.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:resolve 0.29ms ./chunk-IB6CFPNO.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-IB6CFPNO.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.213Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-GWWTMTUP.js
2024-07-27T09:37:13.214Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-WEA6OKKO.js
2024-07-27T09:37:13.214Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-IB6CFPNO.js
2024-07-27T09:37:13.214Z vite:import-analysis 1.63ms [6 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_path.js?v=4d4b8099
2024-07-27T09:37:13.214Z vite:transform 2.34ms /node_modules/.vite/deps/@tauri-apps_api_path.js?v=4d4b8099
2024-07-27T09:37:13.214Z vite:load 75.21ms [plugin] /node_modules/.vite/deps/valtio_utils.js?v=4d4b8099
2024-07-27T09:37:13.215Z vite:resolve 0.27ms ./chunk-KB52VO44.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-KB52VO44.js?v=4d4b8099
2024-07-27T09:37:13.215Z vite:cache [memory] /node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.215Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.215Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.216Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-KB52VO44.js
2024-07-27T09:37:13.216Z vite:import-analysis 1.42ms [4 imports rewritten] node_modules/.vite/deps/valtio_utils.js?v=4d4b8099
2024-07-27T09:37:13.216Z vite:transform 1.67ms /node_modules/.vite/deps/valtio_utils.js?v=4d4b8099
2024-07-27T09:37:13.216Z vite:load 77.20ms [plugin] /node_modules/.vite/deps/valtio-persist.js?v=4d4b8099
2024-07-27T09:37:13.220Z vite:cache [memory] /node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.220Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.220Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.220Z vite:import-analysis 2.83ms [4 imports rewritten] node_modules/.vite/deps/valtio-persist.js?v=4d4b8099
2024-07-27T09:37:13.220Z vite:transform 4.28ms /node_modules/.vite/deps/valtio-persist.js?v=4d4b8099
2024-07-27T09:37:13.234Z vite:resolve 2.63ms /src/layouts/Preference -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/layouts/Preference/index.tsx
2024-07-27T09:37:13.234Z vite:resolve 3.03ms /src/pages/About -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/About/index.tsx
2024-07-27T09:37:13.234Z vite:resolve 3.19ms /src/pages/Clipboard/History -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.234Z vite:resolve 3.29ms /src/pages/Clipboard/Settings -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.234Z vite:resolve 3.33ms /src/pages/DataBackup -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.234Z vite:resolve 3.35ms /src/pages/Settings -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Settings/index.tsx
2024-07-27T09:37:13.235Z vite:resolve 3.61ms @/layouts/Preference -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/layouts/Preference/index.tsx
2024-07-27T09:37:13.235Z vite:resolve 3.72ms @/pages/About -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/About/index.tsx
2024-07-27T09:37:13.235Z vite:resolve 3.76ms @/pages/Clipboard/History -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.235Z vite:resolve 3.78ms @/pages/Clipboard/Settings -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.235Z vite:resolve 3.81ms @/pages/DataBackup -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.235Z vite:resolve 4.04ms @/pages/Settings -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Settings/index.tsx
2024-07-27T09:37:13.235Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.236Z vite:cache [memory] /node_modules/.vite/deps/react-router-dom.js?v=4d4b8099
2024-07-27T09:37:13.236Z vite:import-analysis 5.08ms [1 imports rewritten] src/utils/is.ts
2024-07-27T09:37:13.237Z vite:transform 109.44ms /src/utils/is.ts
2024-07-27T09:37:13.237Z vite:time 59.18ms /src/utils/is.ts
2024-07-27T09:37:13.237Z vite:import-analysis 7.05ms [7 imports rewritten] src/router/index.ts
2024-07-27T09:37:13.239Z vite:transform 111.10ms /src/router/index.ts
2024-07-27T09:37:13.240Z vite:time 29.64ms /src/router/index.ts
2024-07-27T09:37:13.250Z vite:load 92.85ms [plugin] /node_modules/.vite/deps/antd_locale_en_US.js?v=4d4b8099
2024-07-27T09:37:13.251Z vite:resolve 0.25ms ./chunk-VIYER726.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-VIYER726.js?v=4d4b8099
2024-07-27T09:37:13.251Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.252Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-VIYER726.js
2024-07-27T09:37:13.252Z vite:import-analysis 1.94ms [2 imports rewritten] node_modules/.vite/deps/antd_locale_en_US.js?v=4d4b8099
2024-07-27T09:37:13.252Z vite:transform 2.25ms /node_modules/.vite/deps/antd_locale_en_US.js?v=4d4b8099
2024-07-27T09:37:13.252Z vite:load 95.25ms [plugin] /node_modules/.vite/deps/antd_locale_zh_CN.js?v=4d4b8099
2024-07-27T09:37:13.253Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.253Z vite:import-analysis 0.39ms [2 imports rewritten] node_modules/.vite/deps/antd_locale_zh_CN.js?v=4d4b8099
2024-07-27T09:37:13.253Z vite:transform 0.63ms /node_modules/.vite/deps/antd_locale_zh_CN.js?v=4d4b8099
2024-07-27T09:37:13.253Z vite:load 95.98ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_app.js?v=4d4b8099
2024-07-27T09:37:13.253Z vite:resolve 0.21ms ./chunk-QISYYZH3.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-QISYYZH3.js?v=4d4b8099
2024-07-27T09:37:13.254Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.254Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.254Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.254Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-QISYYZH3.js
2024-07-27T09:37:13.254Z vite:import-analysis 0.79ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_app.js?v=4d4b8099
2024-07-27T09:37:13.254Z vite:transform 0.93ms /node_modules/.vite/deps/@tauri-apps_api_app.js?v=4d4b8099
2024-07-27T09:37:13.254Z vite:load 97.01ms [plugin] /node_modules/.vite/deps/i18next.js?v=4d4b8099
2024-07-27T09:37:13.256Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.256Z vite:import-analysis 1.45ms [1 imports rewritten] node_modules/.vite/deps/i18next.js?v=4d4b8099
2024-07-27T09:37:13.256Z vite:transform 2.19ms /node_modules/.vite/deps/i18next.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:load 99.50ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_os.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:resolve 0.15ms ./chunk-OKVUSGLG.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-OKVUSGLG.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-OKVUSGLG.js
2024-07-27T09:37:13.257Z vite:import-analysis 0.58ms [5 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_os.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:transform 0.75ms /node_modules/.vite/deps/@tauri-apps_api_os.js?v=4d4b8099
2024-07-27T09:37:13.257Z vite:load 100.41ms [plugin] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.258Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.258Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.258Z vite:import-analysis 0.62ms [2 imports rewritten] node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.258Z vite:transform 1.00ms /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.259Z vite:load 101.71ms [fs] /src/locales/en-US.json
2024-07-27T09:37:13.260Z vite:import-analysis [skipped] src/locales/en-US.json
2024-07-27T09:37:13.260Z vite:transform 1.53ms /src/locales/en-US.json
2024-07-27T09:37:13.260Z vite:time 10.80ms /src/locales/en-US.json?import
2024-07-27T09:37:13.266Z vite:resolve 0.49ms @tauri-apps/api/dialog -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_dialog.js?v=4d4b8099
2024-07-27T09:37:13.267Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.267Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:13.267Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.268Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.268Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.268Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.268Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.268Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_dialog.js
2024-07-27T09:37:13.268Z vite:import-analysis 2.70ms [9 imports rewritten] src/hooks/useTheme.ts
2024-07-27T09:37:13.270Z vite:transform 141.18ms /src/hooks/useTheme.ts
2024-07-27T09:37:13.270Z vite:time 267.83ms /src/hooks/useTheme.ts
2024-07-27T09:37:13.274Z vite:load 117.06ms [fs] /src/locales/zh-CN.json
2024-07-27T09:37:13.276Z vite:import-analysis [skipped] src/locales/zh-CN.json
2024-07-27T09:37:13.276Z vite:transform 1.92ms /src/locales/zh-CN.json
2024-07-27T09:37:13.276Z vite:time 27.94ms /src/locales/zh-CN.json?import
2024-07-27T09:37:13.278Z vite:load 101.55ms [plugin] /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.286Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.287Z vite:import-analysis 4.02ms [1 imports rewritten] node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.287Z vite:transform 8.13ms /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.291Z vite:load 88.37ms [plugin] /node_modules/.vite/deps/tauri-plugin-sql-api.js?v=4d4b8099
2024-07-27T09:37:13.291Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.291Z vite:import-analysis 0.30ms [1 imports rewritten] node_modules/.vite/deps/tauri-plugin-sql-api.js?v=4d4b8099
2024-07-27T09:37:13.292Z vite:transform 0.54ms /node_modules/.vite/deps/tauri-plugin-sql-api.js?v=4d4b8099
2024-07-27T09:37:13.292Z vite:load 89.05ms [plugin] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.292Z vite:resolve 0.33ms ./chunk-GWPCJZOQ.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-GWPCJZOQ.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:resolve 0.44ms ./chunk-RYA2V5EJ.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-RYA2V5EJ.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:resolve 0.47ms ./chunk-NRFXTMKE.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-NRFXTMKE.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:resolve 0.49ms ./chunk-MAYVV7DE.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-MAYVV7DE.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:resolve 0.50ms ./chunk-XCIO4MNB.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-XCIO4MNB.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:cache [memory] /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:cache [memory] /node_modules/.vite/deps/chunk-LBPUJSSY.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.293Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-GWPCJZOQ.js
2024-07-27T09:37:13.293Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-RYA2V5EJ.js
2024-07-27T09:37:13.293Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-NRFXTMKE.js
2024-07-27T09:37:13.294Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-MAYVV7DE.js
2024-07-27T09:37:13.294Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-XCIO4MNB.js
2024-07-27T09:37:13.294Z vite:import-analysis 1.81ms [15 imports rewritten] node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:transform 2.08ms /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:load 91.30ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:import-analysis 0.46ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:13.294Z vite:transform 0.63ms /node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:load 91.97ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:cache [memory] /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:import-analysis 0.44ms [5 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:13.295Z vite:transform 0.60ms /node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:13.297Z vite:load 83.56ms [plugin] /node_modules/.vite/deps/chunk-GWWTMTUP.js?v=4d4b8099
2024-07-27T09:37:13.297Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.297Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:import-analysis 0.47ms [4 imports rewritten] node_modules/.vite/deps/chunk-GWWTMTUP.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:transform 0.68ms /node_modules/.vite/deps/chunk-GWWTMTUP.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:load 84.31ms [plugin] /node_modules/.vite/deps/chunk-WEA6OKKO.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:import-analysis 0.01ms [no imports] node_modules/.vite/deps/chunk-WEA6OKKO.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:transform 0.15ms /node_modules/.vite/deps/chunk-WEA6OKKO.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:load 84.51ms [plugin] /node_modules/.vite/deps/chunk-IB6CFPNO.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:import-analysis 0.31ms [2 imports rewritten] node_modules/.vite/deps/chunk-IB6CFPNO.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:transform 0.51ms /node_modules/.vite/deps/chunk-IB6CFPNO.js?v=4d4b8099
2024-07-27T09:37:13.298Z vite:load 82.82ms [plugin] /node_modules/.vite/deps/chunk-KB52VO44.js?v=4d4b8099
2024-07-27T09:37:13.299Z vite:cache [memory] /node_modules/.vite/deps/chunk-IORCOBDI.js?v=4d4b8099
2024-07-27T09:37:13.299Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.299Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.299Z vite:import-analysis 0.54ms [3 imports rewritten] node_modules/.vite/deps/chunk-KB52VO44.js?v=4d4b8099
2024-07-27T09:37:13.299Z vite:transform 0.82ms /node_modules/.vite/deps/chunk-KB52VO44.js?v=4d4b8099
2024-07-27T09:37:13.300Z vite:load 62.65ms [fs] /src/layouts/Preference/index.tsx
2024-07-27T09:37:13.324Z vite:load 259.81ms [plugin] /node_modules/.vite/deps/chunk-CJRCVHVX.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:cache [memory] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:cache [memory] /node_modules/.vite/deps/chunk-MRWV3FAC.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:cache [memory] /node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:import-analysis 48.74ms [5 imports rewritten] node_modules/.vite/deps/chunk-CJRCVHVX.js?v=4d4b8099
2024-07-27T09:37:13.416Z vite:transform 91.32ms /node_modules/.vite/deps/chunk-CJRCVHVX.js?v=4d4b8099
2024-07-27T09:37:13.440Z vite:load 202.68ms [fs] /src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.449Z vite:load 212.35ms [fs] /src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.468Z vite:load 231.03ms [fs] /src/pages/About/index.tsx
2024-07-27T09:37:13.480Z vite:load 242.95ms [fs] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.502Z vite:load 265.08ms [fs] /src/pages/Settings/index.tsx
2024-07-27T09:37:13.509Z vite:load 252.00ms [plugin] /node_modules/.vite/deps/chunk-OKVUSGLG.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:cache [memory] /node_modules/.vite/deps/chunk-WEA6OKKO.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:import-analysis 0.41ms [3 imports rewritten] node_modules/.vite/deps/chunk-OKVUSGLG.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:transform 0.58ms /node_modules/.vite/deps/chunk-OKVUSGLG.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:load 256.09ms [plugin] /node_modules/.vite/deps/chunk-QISYYZH3.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:import-analysis 0.40ms [2 imports rewritten] node_modules/.vite/deps/chunk-QISYYZH3.js?v=4d4b8099
2024-07-27T09:37:13.510Z vite:transform 0.55ms /node_modules/.vite/deps/chunk-QISYYZH3.js?v=4d4b8099
2024-07-27T09:37:13.511Z vite:load 258.78ms [plugin] /node_modules/.vite/deps/chunk-VIYER726.js?v=4d4b8099
2024-07-27T09:37:13.511Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.511Z vite:import-analysis 0.17ms [1 imports rewritten] node_modules/.vite/deps/chunk-VIYER726.js?v=4d4b8099
2024-07-27T09:37:13.511Z vite:transform 0.30ms /node_modules/.vite/deps/chunk-VIYER726.js?v=4d4b8099
2024-07-27T09:37:13.511Z vite:load 242.93ms [fs] /src/plugins/theme.ts
2024-07-27T09:37:13.512Z vite:load 243.38ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_dialog.js?v=4d4b8099
2024-07-27T09:37:13.512Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.512Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.512Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.512Z vite:import-analysis 0.41ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_dialog.js?v=4d4b8099
2024-07-27T09:37:13.512Z vite:transform 0.56ms /node_modules/.vite/deps/@tauri-apps_api_dialog.js?v=4d4b8099
2024-07-27T09:37:13.514Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.514Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.514Z vite:import-analysis 0.48ms [2 imports rewritten] src/plugins/theme.ts
2024-07-27T09:37:13.515Z vite:transform 3.47ms /src/plugins/theme.ts
2024-07-27T09:37:13.515Z vite:load 221.58ms [plugin] /node_modules/.vite/deps/chunk-GWPCJZOQ.js?v=4d4b8099
2024-07-27T09:37:13.515Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.515Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.515Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.515Z vite:import-analysis 0.35ms [3 imports rewritten] node_modules/.vite/deps/chunk-GWPCJZOQ.js?v=4d4b8099
2024-07-27T09:37:13.515Z vite:transform 0.61ms /node_modules/.vite/deps/chunk-GWPCJZOQ.js?v=4d4b8099
2024-07-27T09:37:13.515Z vite:load 222.26ms [plugin] /node_modules/.vite/deps/chunk-RYA2V5EJ.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:import-analysis 0.24ms [2 imports rewritten] node_modules/.vite/deps/chunk-RYA2V5EJ.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:transform 0.37ms /node_modules/.vite/deps/chunk-RYA2V5EJ.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:load 222.69ms [plugin] /node_modules/.vite/deps/chunk-NRFXTMKE.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:cache [memory] /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:import-analysis 0.26ms [2 imports rewritten] node_modules/.vite/deps/chunk-NRFXTMKE.js?v=4d4b8099
2024-07-27T09:37:13.516Z vite:transform 0.41ms /node_modules/.vite/deps/chunk-NRFXTMKE.js?v=4d4b8099
2024-07-27T09:37:13.517Z vite:load 223.38ms [plugin] /node_modules/.vite/deps/chunk-MAYVV7DE.js?v=4d4b8099
2024-07-27T09:37:13.517Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.517Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.517Z vite:import-analysis 0.28ms [2 imports rewritten] node_modules/.vite/deps/chunk-MAYVV7DE.js?v=4d4b8099
2024-07-27T09:37:13.517Z vite:transform 0.45ms /node_modules/.vite/deps/chunk-MAYVV7DE.js?v=4d4b8099
2024-07-27T09:37:13.517Z vite:load 223.92ms [plugin] /node_modules/.vite/deps/chunk-XCIO4MNB.js?v=4d4b8099
2024-07-27T09:37:13.518Z vite:cache [memory] /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.518Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.518Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.518Z vite:import-analysis 0.70ms [3 imports rewritten] node_modules/.vite/deps/chunk-XCIO4MNB.js?v=4d4b8099
2024-07-27T09:37:13.518Z vite:transform 1.24ms /node_modules/.vite/deps/chunk-XCIO4MNB.js?v=4d4b8099
2024-07-27T09:37:13.528Z vite:resolve 1.35ms /src/components/Icon -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Icon/index.tsx
2024-07-27T09:37:13.528Z vite:resolve 1.41ms /src/components/Update -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Update/index.tsx
2024-07-27T09:37:13.528Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.528Z vite:resolve 1.68ms clsx -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.528Z vite:resolve 1.71ms tauri-plugin-autostart-api -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/tauri-plugin-autostart-api.js?v=4d4b8099
2024-07-27T09:37:13.529Z vite:resolve 1.87ms @/components/Icon -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Icon/index.tsx
2024-07-27T09:37:13.529Z vite:resolve 1.90ms @/components/Update -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Update/index.tsx
2024-07-27T09:37:13.529Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.529Z vite:cache [memory] /src/hooks/useTheme.ts
2024-07-27T09:37:13.529Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.529Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.529Z vite:cache [memory] /src/plugins/window.ts
2024-07-27T09:37:13.529Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:13.529Z vite:cache [memory] /src/router/index.ts
2024-07-27T09:37:13.529Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.529Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/react-router-dom.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.530Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/clsx.js
2024-07-27T09:37:13.530Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/tauri-plugin-autostart-api.js
2024-07-27T09:37:13.530Z vite:hmr [self-accepts] src/layouts/Preference/index.tsx
2024-07-27T09:37:13.530Z vite:import-analysis 3.89ms [23 imports rewritten] src/layouts/Preference/index.tsx
2024-07-27T09:37:13.537Z vite:transform 237.64ms /src/layouts/Preference/index.tsx
2024-07-27T09:37:13.538Z vite:time 264.93ms /src/layouts/Preference/index.tsx
2024-07-27T09:37:13.553Z vite:resolve 1.75ms /src/components/Hotkey -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Hotkey/index.tsx
2024-07-27T09:37:13.553Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.553Z vite:resolve 1.92ms ./components/Language -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:13.553Z vite:resolve 1.94ms ./components/ThemeMode -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:13.553Z vite:resolve 1.96ms ./components/TrayClick -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:13.553Z vite:resolve 2.12ms @/components/Hotkey -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Hotkey/index.tsx
2024-07-27T09:37:13.553Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.553Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.553Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.553Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.553Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.553Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.553Z vite:hmr [self-accepts] src/pages/Settings/index.tsx
2024-07-27T09:37:13.554Z vite:import-analysis 3.05ms [10 imports rewritten] src/pages/Settings/index.tsx
2024-07-27T09:37:13.555Z vite:transform 53.12ms /src/pages/Settings/index.tsx
2024-07-27T09:37:13.555Z vite:time 258.69ms /src/pages/Settings/index.tsx
2024-07-27T09:37:13.556Z vite:cache [304] /src/plugins/theme.ts
2024-07-27T09:37:13.556Z vite:time 0.07ms /src/plugins/theme.ts
2024-07-27T09:37:13.566Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.566Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.566Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.566Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_app.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_os.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.567Z vite:hmr [self-accepts] src/pages/About/index.tsx
2024-07-27T09:37:13.567Z vite:import-analysis 1.88ms [13 imports rewritten] src/pages/About/index.tsx
2024-07-27T09:37:13.569Z vite:transform 100.52ms /src/pages/About/index.tsx
2024-07-27T09:37:13.569Z vite:time 295.90ms /src/pages/About/index.tsx
2024-07-27T09:37:13.569Z vite:load 38.74ms [fs] /src/components/Icon/index.tsx
2024-07-27T09:37:13.575Z vite:load 44.82ms [plugin] /node_modules/.vite/deps/tauri-plugin-autostart-api.js?v=4d4b8099
2024-07-27T09:37:13.575Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.575Z vite:import-analysis 0.27ms [1 imports rewritten] node_modules/.vite/deps/tauri-plugin-autostart-api.js?v=4d4b8099
2024-07-27T09:37:13.575Z vite:transform 0.45ms /node_modules/.vite/deps/tauri-plugin-autostart-api.js?v=4d4b8099
2024-07-27T09:37:13.575Z vite:load 45.41ms [plugin] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.576Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.576Z vite:import-analysis 0.29ms [1 imports rewritten] node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.576Z vite:transform 0.44ms /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.576Z vite:load 45.99ms [fs] /src/hooks/useRegister.ts
2024-07-27T09:37:13.576Z vite:load 45.99ms [fs] /src/components/Update/index.tsx
2024-07-27T09:37:13.598Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.599Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.599Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.599Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.599Z vite:cache [memory] /src/database/index.tsx
2024-07-27T09:37:13.599Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_dialog.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_path.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.599Z vite:hmr [self-accepts] src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.599Z vite:import-analysis 2.24ms [16 imports rewritten] src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.601Z vite:transform 151.73ms /src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.601Z vite:time 310.62ms /src/pages/DataBackup/index.tsx
2024-07-27T09:37:13.602Z vite:load 48.24ms [fs] /src/components/Hotkey/index.tsx
2024-07-27T09:37:13.614Z vite:load 60.39ms [fs] /src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:13.618Z vite:load 64.43ms [fs] /src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:13.622Z vite:load 68.56ms [fs] /src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:13.631Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.631Z vite:resolve 1.88ms ./components/DefaultFocus -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:13.631Z vite:resolve 1.92ms ./components/DoubleClickFeedback -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:13.631Z vite:resolve 1.93ms ./components/HistoryCapacity -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:13.631Z vite:resolve 1.95ms ./components/SearchPosition -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:13.631Z vite:resolve 1.97ms ./components/WindowPosition -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:13.632Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.632Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.632Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.632Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.632Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.632Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.632Z vite:hmr [self-accepts] src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.632Z vite:import-analysis 2.98ms [12 imports rewritten] src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.634Z vite:transform 193.86ms /src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.634Z vite:time 343.25ms /src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:13.635Z vite:load 67.95ms [fs] /src/plugins/clipboard.ts
2024-07-27T09:37:13.637Z vite:load 38.02ms [fs] /src/plugins/fsExtra.ts
2024-07-27T09:37:13.638Z vite:load 38.49ms [fs] /src/plugins/backup.ts
2024-07-27T09:37:13.640Z vite:load 7.47ms [fs] /src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:13.646Z vite:load 14.04ms [fs] /src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:13.650Z vite:load 17.65ms [fs] /src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:13.668Z vite:resolve 2.81ms /src/assets/audio/copy.mp3 -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/assets/audio/copy.mp3
2024-07-27T09:37:13.669Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.669Z vite:resolve 3.22ms ./components/Header -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:13.669Z vite:resolve 3.29ms ./components/List -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:13.669Z vite:resolve 3.31ms ./components/Search -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:13.669Z vite:resolve 3.31ms @tauri-apps/api/globalShortcut -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_globalShortcut.js?v=4d4b8099
2024-07-27T09:37:13.669Z vite:resolve 3.53ms @/assets/audio/copy.mp3 -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/assets/audio/copy.mp3
2024-07-27T09:37:13.669Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.669Z vite:cache [memory] /src/plugins/window.ts
2024-07-27T09:37:13.669Z vite:cache [memory] /src/database/index.tsx
2024-07-27T09:37:13.669Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.669Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:13.670Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.670Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.670Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.670Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.670Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.670Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.670Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:13.670Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.670Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.670Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.671Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.671Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.671Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_globalShortcut.js
2024-07-27T09:37:13.671Z vite:import-analysis 5.88ms [3 imports rewritten] src/hooks/useRegister.ts
2024-07-27T09:37:13.671Z vite:hmr [self-accepts] src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.672Z vite:transform 95.58ms /src/hooks/useRegister.ts
2024-07-27T09:37:13.672Z vite:import-analysis 6.79ms [23 imports rewritten] src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.672Z vite:time 78.24ms /src/hooks/useRegister.ts
2024-07-27T09:37:13.674Z vite:transform 194.03ms /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.674Z vite:time 401.11ms /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.675Z vite:load 3.46ms [plugin] /src/assets/audio/copy.mp3
2024-07-27T09:37:13.675Z vite:import-analysis 0.02ms [no imports] src/assets/audio/copy.mp3
2024-07-27T09:37:13.675Z vite:transform 0.32ms /src/assets/audio/copy.mp3
2024-07-27T09:37:13.676Z vite:load 44.49ms [fs] /src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:13.682Z vite:load 50.25ms [fs] /src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:13.698Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.698Z vite:resolve 0.86ms ./index.module.scss -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Update/index.module.scss
2024-07-27T09:37:13.698Z vite:resolve 0.92ms @tauri-apps/api/process -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_process.js?v=4d4b8099
2024-07-27T09:37:13.698Z vite:resolve 0.95ms @tauri-apps/api/updater -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_updater.js?v=4d4b8099
2024-07-27T09:37:13.698Z vite:resolve 0.97ms react-markdown -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-markdown.js?v=4d4b8099
2024-07-27T09:37:13.698Z vite:resolve 0.98ms rehype-raw -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/rehype-raw.js?v=4d4b8099
2024-07-27T09:37:13.698Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.698Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.698Z vite:cache [memory] /src/plugins/window.ts
2024-07-27T09:37:13.698Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.698Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.698Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.698Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.698Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.699Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.699Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.699Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.699Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.699Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.699Z vite:hmr [self-accepts] src/components/Update/index.tsx
2024-07-27T09:37:13.699Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_process.js
2024-07-27T09:37:13.699Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_updater.js
2024-07-27T09:37:13.699Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/react-markdown.js
2024-07-27T09:37:13.699Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/rehype-raw.js
2024-07-27T09:37:13.699Z vite:import-analysis 2.42ms [18 imports rewritten] src/components/Update/index.tsx
2024-07-27T09:37:13.701Z vite:transform 124.96ms /src/components/Update/index.tsx
2024-07-27T09:37:13.701Z vite:time 107.45ms /src/components/Update/index.tsx
2024-07-27T09:37:13.711Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.711Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.711Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.711Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.711Z vite:hmr [self-accepts] src/components/Icon/index.tsx
2024-07-27T09:37:13.712Z vite:import-analysis 0.68ms [3 imports rewritten] src/components/Icon/index.tsx
2024-07-27T09:37:13.712Z vite:transform 142.66ms /src/components/Icon/index.tsx
2024-07-27T09:37:13.712Z vite:time 154.56ms /src/components/Icon/index.tsx
2024-07-27T09:37:13.712Z vite:load 41.59ms [fs] /src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:13.717Z vite:load 46.73ms [fs] /src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:13.725Z vite:load 54.01ms [fs] /src/plugins/autoLaunch.ts
2024-07-27T09:37:13.725Z vite:load 54.60ms [fs] /src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:13.735Z vite:load 64.20ms [fs] /src/plugins/mouse.ts
2024-07-27T09:37:13.736Z vite:load 65.03ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_globalShortcut.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:cache [memory] /node_modules/.vite/deps/chunk-GWPCJZOQ.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:import-analysis 0.49ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_globalShortcut.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:transform 2.32ms /node_modules/.vite/deps/@tauri-apps_api_globalShortcut.js?v=4d4b8099
2024-07-27T09:37:13.738Z vite:load 67.50ms [fs] /src/utils/dayjs.ts
2024-07-27T09:37:13.746Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.746Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.746Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:13.746Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.746Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.746Z vite:cache [memory] /node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:13.746Z vite:import-analysis 2.23ms [8 imports rewritten] src/plugins/clipboard.ts
2024-07-27T09:37:13.748Z vite:transform 112.93ms /src/plugins/clipboard.ts
2024-07-27T09:37:13.748Z vite:time 8.53ms /src/plugins/clipboard.ts
2024-07-27T09:37:13.757Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.757Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.757Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:13.757Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.757Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.758Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.758Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.758Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.758Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.758Z vite:hmr [self-accepts] src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:13.758Z vite:hmr [self-accepts] src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:13.758Z vite:import-analysis 1.96ms [7 imports rewritten] src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:13.758Z vite:import-analysis 1.99ms [6 imports rewritten] src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:13.759Z vite:transform 141.25ms /src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:13.759Z vite:transform 145.34ms /src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:13.759Z vite:time 69.68ms /src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:13.759Z vite:time 122.82ms /src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:13.764Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.764Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.764Z vite:import-analysis 0.43ms [2 imports rewritten] src/plugins/fsExtra.ts
2024-07-27T09:37:13.764Z vite:transform 127.01ms /src/plugins/fsExtra.ts
2024-07-27T09:37:13.764Z vite:load 65.69ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_process.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:cache [memory] /node_modules/.vite/deps/chunk-RYA2V5EJ.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:import-analysis 0.42ms [4 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_process.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:transform 0.57ms /node_modules/.vite/deps/@tauri-apps_api_process.js?v=4d4b8099
2024-07-27T09:37:13.765Z vite:load 66.32ms [plugin] /node_modules/.vite/deps/react-markdown.js?v=4d4b8099
2024-07-27T09:37:13.771Z vite:resolve 0.15ms ./chunk-J55WHEZN.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-J55WHEZN.js?v=4d4b8099
2024-07-27T09:37:13.771Z vite:resolve 0.21ms ./chunk-7RYHLFHP.js -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-7RYHLFHP.js?v=4d4b8099
2024-07-27T09:37:13.771Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.771Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.771Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-J55WHEZN.js
2024-07-27T09:37:13.771Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/chunk-7RYHLFHP.js
2024-07-27T09:37:13.771Z vite:import-analysis 3.40ms [4 imports rewritten] node_modules/.vite/deps/react-markdown.js?v=4d4b8099
2024-07-27T09:37:13.771Z vite:transform 6.15ms /node_modules/.vite/deps/react-markdown.js?v=4d4b8099
2024-07-27T09:37:13.773Z vite:load 74.28ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_updater.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:cache [memory] /node_modules/.vite/deps/chunk-NRFXTMKE.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:cache [memory] /node_modules/.vite/deps/chunk-BB4JC3M7.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:cache [memory] /node_modules/.vite/deps/chunk-JYA7ERJH.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:import-analysis 0.47ms [5 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_updater.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:transform 0.64ms /node_modules/.vite/deps/@tauri-apps_api_updater.js?v=4d4b8099
2024-07-27T09:37:13.774Z vite:load 75.17ms [fs] /src/components/Update/index.module.scss
2024-07-27T09:37:13.777Z vite:load 78.66ms [plugin] /node_modules/.vite/deps/rehype-raw.js?v=4d4b8099
2024-07-27T09:37:13.783Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.783Z vite:import-analysis 3.27ms [2 imports rewritten] node_modules/.vite/deps/rehype-raw.js?v=4d4b8099
2024-07-27T09:37:13.783Z vite:transform 5.74ms /node_modules/.vite/deps/rehype-raw.js?v=4d4b8099
2024-07-27T09:37:13.785Z vite:cache [304] /src/plugins/fsExtra.ts
2024-07-27T09:37:13.785Z vite:time 0.09ms /src/plugins/fsExtra.ts
2024-07-27T09:37:13.795Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.796Z vite:cache [memory] /src/hooks/useTheme.ts
2024-07-27T09:37:13.796Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.796Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:13.796Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.796Z vite:cache [memory] /src/database/index.tsx
2024-07-27T09:37:13.796Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:hmr [self-accepts] src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_app.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_dialog.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:cache [memory] /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.796Z vite:import-analysis 1.74ms [5 imports rewritten] src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:13.796Z vite:import-analysis 1.76ms [10 imports rewritten] src/plugins/backup.ts
2024-07-27T09:37:13.797Z vite:transform 174.95ms /src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:13.797Z vite:transform 159.06ms /src/plugins/backup.ts
2024-07-27T09:37:13.797Z vite:time 161.95ms /src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:13.797Z vite:time 57.68ms /src/plugins/backup.ts
2024-07-27T09:37:13.800Z vite:load 54.05ms [fs] /src/plugins/ocr.ts
2024-07-27T09:37:13.807Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.807Z vite:resolve 1.71ms ../Icon -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Icon/index.tsx
2024-07-27T09:37:13.807Z vite:resolve 1.76ms ./keys -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Hotkey/keys.ts
2024-07-27T09:37:13.807Z vite:resolve 1.90ms @formkit/auto-animate/react -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@formkit_auto-animate_react.js?v=4d4b8099
2024-07-27T09:37:13.808Z vite:cache [memory] /src/components/Icon/index.tsx
2024-07-27T09:37:13.808Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:13.808Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.808Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.809Z vite:hmr [self-accepts] src/components/Hotkey/index.tsx
2024-07-27T09:37:13.810Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@formkit_auto-animate_react.js
2024-07-27T09:37:13.810Z vite:import-analysis 4.37ms [13 imports rewritten] src/components/Hotkey/index.tsx
2024-07-27T09:37:13.812Z vite:transform 210.28ms /src/components/Hotkey/index.tsx
2024-07-27T09:37:13.812Z vite:time 130.51ms /src/components/Hotkey/index.tsx
2024-07-27T09:37:13.820Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.820Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.820Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.821Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.821Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.821Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.821Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.821Z vite:hmr [self-accepts] src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:13.821Z vite:import-analysis 1.15ms [6 imports rewritten] src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:13.822Z vite:transform 176.04ms /src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:13.823Z vite:time 37.01ms /src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:13.823Z vite:load 52.28ms [plugin] /node_modules/.vite/deps/chunk-J55WHEZN.js?v=4d4b8099
2024-07-27T09:37:13.826Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.827Z vite:import-analysis 1.82ms [1 imports rewritten] node_modules/.vite/deps/chunk-J55WHEZN.js?v=4d4b8099
2024-07-27T09:37:13.827Z vite:transform 3.24ms /node_modules/.vite/deps/chunk-J55WHEZN.js?v=4d4b8099
2024-07-27T09:37:13.827Z vite:load 56.00ms [plugin] /node_modules/.vite/deps/chunk-7RYHLFHP.js?v=4d4b8099
2024-07-27T09:37:13.829Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.829Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.829Z vite:import-analysis 1.26ms [2 imports rewritten] node_modules/.vite/deps/chunk-7RYHLFHP.js?v=4d4b8099
2024-07-27T09:37:13.829Z vite:transform 1.89ms /node_modules/.vite/deps/chunk-7RYHLFHP.js?v=4d4b8099
2024-07-27T09:37:13.856Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.856Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.856Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.856Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_event.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.857Z vite:hmr [self-accepts] src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:13.857Z vite:import-analysis 1.58ms [10 imports rewritten] src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:13.859Z vite:transform 209.74ms /src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:13.860Z vite:time 59.83ms /src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:13.860Z vite:load 50.69ms [fs] /src/components/Hotkey/keys.ts
2024-07-27T09:37:13.864Z vite:load 54.76ms [plugin] /node_modules/.vite/deps/@formkit_auto-animate_react.js?v=4d4b8099
2024-07-27T09:37:13.865Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.865Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.866Z vite:import-analysis 0.80ms [2 imports rewritten] node_modules/.vite/deps/@formkit_auto-animate_react.js?v=4d4b8099
2024-07-27T09:37:13.866Z vite:transform 1.19ms /node_modules/.vite/deps/@formkit_auto-animate_react.js?v=4d4b8099
2024-07-27T09:37:13.871Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.871Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.871Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.872Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.872Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.872Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.872Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.872Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.872Z vite:hmr [self-accepts] src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:13.872Z vite:hmr [self-accepts] src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:13.872Z vite:import-analysis 1.90ms [6 imports rewritten] src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:13.872Z vite:import-analysis 2.00ms [6 imports rewritten] src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:13.874Z vite:transform 234.66ms /src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:13.875Z vite:transform 192.23ms /src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:13.875Z vite:time 89.10ms /src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:13.875Z vite:time 74.23ms /src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:13.882Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.882Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.882Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.882Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.883Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.883Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.883Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.883Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.883Z vite:hmr [self-accepts] src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:13.883Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.883Z vite:import-analysis 1.43ms [6 imports rewritten] src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:13.883Z vite:import-analysis 1.46ms [2 imports rewritten] src/plugins/autoLaunch.ts
2024-07-27T09:37:13.884Z vite:transform 207.21ms /src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:13.884Z vite:transform 158.93ms /src/plugins/autoLaunch.ts
2024-07-27T09:37:13.884Z vite:time 83.20ms /src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:13.884Z vite:time 5.36ms /src/plugins/autoLaunch.ts
2024-07-27T09:37:13.913Z vite:hmr [detected api usage] src/components/Update/index.module.scss
2024-07-27T09:37:13.913Z vite:import-analysis 0.18ms [0 imports rewritten] src/components/Update/index.module.scss
2024-07-27T09:37:13.913Z vite:transform 138.78ms /src/components/Update/index.module.scss
2024-07-27T09:37:13.913Z vite:cache [304] /src/assets/audio/copy.mp3?import
2024-07-27T09:37:13.913Z vite:time 0.06ms /src/assets/audio/copy.mp3?import
2024-07-27T09:37:13.915Z vite:resolve 0.28ms dayjs -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs.js?v=4d4b8099
2024-07-27T09:37:13.915Z vite:resolve 0.34ms dayjs/locale/zh-cn -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs_locale_zh-cn.js?v=4d4b8099
2024-07-27T09:37:13.915Z vite:resolve 0.36ms dayjs/plugin/relativeTime -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs_plugin_relativeTime.js?v=4d4b8099
2024-07-27T09:37:13.915Z vite:resolve 0.37ms dayjs/plugin/utc -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs_plugin_utc.js?v=4d4b8099
2024-07-27T09:37:13.915Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.915Z vite:import-analysis /node_modules/.vite/deps/dayjs.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.916Z vite:import-analysis /node_modules/.vite/deps/dayjs_locale_zh-cn.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.916Z vite:import-analysis /node_modules/.vite/deps/dayjs_plugin_relativeTime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.916Z vite:import-analysis /node_modules/.vite/deps/dayjs_plugin_utc.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.916Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.916Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs.js
2024-07-27T09:37:13.916Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs_locale_zh-cn.js
2024-07-27T09:37:13.916Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs_plugin_relativeTime.js
2024-07-27T09:37:13.916Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/dayjs_plugin_utc.js
2024-07-27T09:37:13.916Z vite:import-analysis 1.27ms [2 imports rewritten] src/plugins/mouse.ts
2024-07-27T09:37:13.916Z vite:import-analysis 1.45ms [4 imports rewritten] src/utils/dayjs.ts
2024-07-27T09:37:13.916Z vite:transform 181.36ms /src/plugins/mouse.ts
2024-07-27T09:37:13.916Z vite:transform 178.12ms /src/utils/dayjs.ts
2024-07-27T09:37:13.917Z vite:cache [304] /src/components/Update/index.module.scss
2024-07-27T09:37:13.917Z vite:time 0.12ms /src/components/Update/index.module.scss
2024-07-27T09:37:13.917Z vite:cache [304] /src/utils/dayjs.ts
2024-07-27T09:37:13.917Z vite:time 0.22ms /src/utils/dayjs.ts
2024-07-27T09:37:13.918Z vite:cache [304] /src/plugins/mouse.ts
2024-07-27T09:37:13.918Z vite:time 0.43ms /src/plugins/mouse.ts
2024-07-27T09:37:13.932Z vite:resolve 0.96ms /src/components/Scrollbar -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Scrollbar/index.tsx
2024-07-27T09:37:13.932Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.932Z vite:resolve 1.13ms ../.. -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.933Z vite:resolve 1.14ms ./components/Item -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:13.933Z vite:resolve 1.18ms @tanstack/react-virtual -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tanstack_react-virtual.js?v=4d4b8099
2024-07-27T09:37:13.933Z vite:resolve 1.27ms @/components/Scrollbar -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/components/Scrollbar/index.tsx
2024-07-27T09:37:13.933Z vite:cache [memory] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.933Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.933Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.933Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.933Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.933Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.933Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:13.933Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.933Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.934Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tanstack_react-virtual.js
2024-07-27T09:37:13.934Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:13.934Z vite:import-analysis 3.10ms [11 imports rewritten] src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:13.936Z vite:transform 218.37ms /src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:13.936Z vite:time 87.71ms /src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:13.943Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.943Z vite:resolve 1.09ms ./components/Tab -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:13.943Z vite:cache [memory] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.943Z vite:cache [memory] /src/plugins/window.ts
2024-07-27T09:37:13.943Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.944Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.944Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.944Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.944Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:13.944Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.944Z vite:cache [memory] /src/components/Icon/index.tsx
2024-07-27T09:37:13.944Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:13.944Z vite:import-analysis 2.02ms [10 imports rewritten] src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:13.945Z vite:transform 232.22ms /src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:13.945Z vite:time 96.87ms /src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:13.950Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:13.950Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:13.950Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:13.950Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.950Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:13.951Z vite:import-analysis 1.81ms [2 imports rewritten] src/plugins/ocr.ts
2024-07-27T09:37:13.951Z vite:cache [memory] /src/components/Icon/index.tsx
2024-07-27T09:37:13.951Z vite:cache [memory] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:13.951Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:13.951Z vite:transform 150.65ms /src/plugins/ocr.ts
2024-07-27T09:37:13.951Z vite:import-analysis 2.08ms [11 imports rewritten] src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:13.951Z vite:time 14.54ms /src/plugins/ocr.ts
2024-07-27T09:37:13.952Z vite:transform 226.63ms /src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:13.952Z vite:time 38.88ms /src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:13.957Z vite:cache [memory] /node_modules/.vite/deps/lodash-es.js?v=4d4b8099
2024-07-27T09:37:13.957Z vite:import-analysis 0.27ms [1 imports rewritten] src/components/Hotkey/keys.ts
2024-07-27T09:37:13.957Z vite:transform 96.80ms /src/components/Hotkey/keys.ts
2024-07-27T09:37:13.957Z vite:time 20.00ms /src/components/Hotkey/keys.ts
2024-07-27T09:37:13.957Z vite:load 41.62ms [plugin] /node_modules/.vite/deps/dayjs_plugin_relativeTime.js?v=4d4b8099
2024-07-27T09:37:13.958Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.958Z vite:import-analysis 0.29ms [1 imports rewritten] node_modules/.vite/deps/dayjs_plugin_relativeTime.js?v=4d4b8099
2024-07-27T09:37:13.958Z vite:transform 0.63ms /node_modules/.vite/deps/dayjs_plugin_relativeTime.js?v=4d4b8099
2024-07-27T09:37:13.958Z vite:load 42.42ms [plugin] /node_modules/.vite/deps/dayjs.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:cache [memory] /node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:import-analysis 0.33ms [2 imports rewritten] node_modules/.vite/deps/dayjs.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:transform 0.65ms /node_modules/.vite/deps/dayjs.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:load 43.15ms [plugin] /node_modules/.vite/deps/dayjs_locale_zh-cn.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:cache [memory] /node_modules/.vite/deps/chunk-FJNRTQFW.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:import-analysis 0.31ms [2 imports rewritten] node_modules/.vite/deps/dayjs_locale_zh-cn.js?v=4d4b8099
2024-07-27T09:37:13.959Z vite:transform 0.46ms /node_modules/.vite/deps/dayjs_locale_zh-cn.js?v=4d4b8099
2024-07-27T09:37:13.960Z vite:load 43.68ms [plugin] /node_modules/.vite/deps/dayjs_plugin_utc.js?v=4d4b8099
2024-07-27T09:37:13.960Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.960Z vite:import-analysis 0.21ms [1 imports rewritten] node_modules/.vite/deps/dayjs_plugin_utc.js?v=4d4b8099
2024-07-27T09:37:13.960Z vite:transform 0.36ms /node_modules/.vite/deps/dayjs_plugin_utc.js?v=4d4b8099
2024-07-27T09:37:13.960Z vite:load 26.78ms [fs] /src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:13.984Z vite:load 50.29ms [fs] /src/components/Scrollbar/index.tsx
2024-07-27T09:37:13.991Z vite:load 56.93ms [plugin] /node_modules/.vite/deps/@tanstack_react-virtual.js?v=4d4b8099
2024-07-27T09:37:13.992Z vite:cache [memory] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:13.992Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:13.992Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:13.992Z vite:import-analysis 0.68ms [3 imports rewritten] node_modules/.vite/deps/@tanstack_react-virtual.js?v=4d4b8099
2024-07-27T09:37:13.992Z vite:transform 0.97ms /node_modules/.vite/deps/@tanstack_react-virtual.js?v=4d4b8099
2024-07-27T09:37:13.993Z vite:load 48.93ms [fs] /src/hooks/useFocus.ts
2024-07-27T09:37:13.993Z vite:load 49.61ms [fs] /src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:14.003Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.003Z vite:resolve 0.33ms mac-scrollbar -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/mac-scrollbar.js?v=4d4b8099
2024-07-27T09:37:14.003Z vite:cache [memory] /src/hooks/useTheme.ts
2024-07-27T09:37:14.003Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.003Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.003Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.003Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.003Z vite:hmr [self-accepts] src/components/Scrollbar/index.tsx
2024-07-27T09:37:14.003Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/mac-scrollbar.js
2024-07-27T09:37:14.003Z vite:import-analysis 1.06ms [5 imports rewritten] src/components/Scrollbar/index.tsx
2024-07-27T09:37:14.004Z vite:transform 19.39ms /src/components/Scrollbar/index.tsx
2024-07-27T09:37:14.004Z vite:time 50.63ms /src/components/Scrollbar/index.tsx
2024-07-27T09:37:14.010Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:14.010Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_window.js?v=4d4b8099
2024-07-27T09:37:14.010Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:14.010Z vite:import-analysis 0.54ms [3 imports rewritten] src/hooks/useFocus.ts
2024-07-27T09:37:14.010Z vite:transform 17.46ms /src/hooks/useFocus.ts
2024-07-27T09:37:14.010Z vite:time 18.09ms /src/hooks/useFocus.ts
2024-07-27T09:37:14.016Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.016Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.016Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.016Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.016Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:14.016Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:14.016Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.016Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:14.016Z vite:cache [memory] /src/components/Scrollbar/index.tsx
2024-07-27T09:37:14.016Z vite:cache [memory] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:14.016Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:14.016Z vite:import-analysis 1.47ms [8 imports rewritten] src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:14.017Z vite:transform 23.49ms /src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:14.017Z vite:time 25.28ms /src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:14.020Z vite:load 16.35ms [plugin] /node_modules/.vite/deps/mac-scrollbar.js?v=4d4b8099
2024-07-27T09:37:14.020Z vite:cache [memory] /node_modules/.vite/deps/chunk-WFZP5V7H.js?v=4d4b8099
2024-07-27T09:37:14.020Z vite:cache [memory] /node_modules/.vite/deps/chunk-FEW2R62K.js?v=4d4b8099
2024-07-27T09:37:14.020Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:14.020Z vite:import-analysis 0.46ms [3 imports rewritten] node_modules/.vite/deps/mac-scrollbar.js?v=4d4b8099
2024-07-27T09:37:14.020Z vite:transform 0.67ms /node_modules/.vite/deps/mac-scrollbar.js?v=4d4b8099
2024-07-27T09:37:14.037Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.037Z vite:resolve 3.42ms ./components/Files -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:14.037Z vite:resolve 3.45ms ./components/HTML -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:14.037Z vite:resolve 3.47ms ./components/Header -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:14.037Z vite:resolve 3.48ms ./components/Image -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.037Z vite:resolve 3.50ms ./components/RichText -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:14.037Z vite:resolve 3.51ms ./components/Text -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:14.037Z vite:resolve 3.58ms tauri-plugin-context-menu -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/tauri-plugin-context-menu.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /src/stores/global.ts
2024-07-27T09:37:14.039Z vite:cache [memory] /src/stores/clipboard.ts
2024-07-27T09:37:14.039Z vite:cache [memory] /src/hooks/useTheme.ts
2024-07-27T09:37:14.039Z vite:cache [memory] /src/plugins/clipboard.ts
2024-07-27T09:37:14.039Z vite:cache [memory] /src/database/index.tsx
2024-07-27T09:37:14.039Z vite:cache [memory] /src/plugins/fsExtra.ts
2024-07-27T09:37:14.039Z vite:cache [memory] /src/plugins/window.ts
2024-07-27T09:37:14.039Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:14.039Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.039Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_fs.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_path.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api_shell.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/valtio.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.039Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:14.040Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/tauri-plugin-context-menu.js
2024-07-27T09:37:14.040Z vite:cache [memory] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:14.040Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:14.040Z vite:import-analysis 6.59ms [26 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:14.046Z vite:transform 86.07ms /src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:14.046Z vite:time 92.62ms /src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:14.057Z vite:load 16.99ms [plugin] /node_modules/.vite/deps/tauri-plugin-context-menu.js?v=4d4b8099
2024-07-27T09:37:14.057Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:14.057Z vite:import-analysis 0.46ms [1 imports rewritten] node_modules/.vite/deps/tauri-plugin-context-menu.js?v=4d4b8099
2024-07-27T09:37:14.057Z vite:transform 0.76ms /node_modules/.vite/deps/tauri-plugin-context-menu.js?v=4d4b8099
2024-07-27T09:37:14.057Z vite:load 18.00ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:14.060Z vite:load 20.95ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:14.063Z vite:load 23.66ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.066Z vite:load 26.67ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:14.074Z vite:load 34.69ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:14.077Z vite:load 37.41ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:14.081Z vite:load 41.20ms [fs] /src/plugins/paste.ts
2024-07-27T09:37:14.084Z vite:cache [memory] /src/constants/index.ts
2024-07-27T09:37:14.084Z vite:cache [memory] /node_modules/.vite/deps/@tauri-apps_api.js?v=4d4b8099
2024-07-27T09:37:14.084Z vite:import-analysis 0.46ms [2 imports rewritten] src/plugins/paste.ts
2024-07-27T09:37:14.084Z vite:transform 3.32ms /src/plugins/paste.ts
2024-07-27T09:37:14.084Z vite:time 2.41ms /src/plugins/paste.ts
2024-07-27T09:37:14.086Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.087Z vite:resolve 0.36ms @tauri-apps/api/tauri -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_tauri.js?v=4d4b8099
2024-07-27T09:37:14.087Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.087Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.087Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.087Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.087Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:14.087Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.087Z vite:optimize-deps load /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/node_modules/.vite/deps/@tauri-apps_api_tauri.js
2024-07-27T09:37:14.087Z vite:import-analysis 1.26ms [5 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.088Z vite:transform 24.98ms /src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.090Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.090Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.090Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.090Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.090Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.090Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:14.090Z vite:import-analysis 0.59ms [3 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:14.091Z vite:transform 30.37ms /src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:14.091Z vite:time 9.21ms /src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:14.091Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.091Z vite:time 0.06ms /src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:14.094Z vite:load 6.61ms [plugin] /node_modules/.vite/deps/@tauri-apps_api_tauri.js?v=4d4b8099
2024-07-27T09:37:14.094Z vite:cache [memory] /node_modules/.vite/deps/chunk-4IZEVUZK.js?v=4d4b8099
2024-07-27T09:37:14.094Z vite:cache [memory] /node_modules/.vite/deps/chunk-WXXH56N5.js?v=4d4b8099
2024-07-27T09:37:14.094Z vite:import-analysis 0.29ms [2 imports rewritten] node_modules/.vite/deps/@tauri-apps_api_tauri.js?v=4d4b8099
2024-07-27T09:37:14.094Z vite:transform 0.45ms /node_modules/.vite/deps/@tauri-apps_api_tauri.js?v=4d4b8099
2024-07-27T09:37:14.102Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.102Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:14.102Z vite:cache [memory] /src/utils/dayjs.ts
2024-07-27T09:37:14.102Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.103Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.103Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.103Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/arcdash.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/react-i18next.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/ahooks.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.103Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:14.103Z vite:import-analysis 2.54ms [3 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:14.103Z vite:cache [memory] /src/components/Icon/index.tsx
2024-07-27T09:37:14.103Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:14.104Z vite:transform 46.28ms /src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:14.104Z vite:import-analysis 3.21ms [11 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:14.104Z vite:time 22.55ms /src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:14.110Z vite:transform 44.20ms /src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:14.111Z vite:time 33.82ms /src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:14.113Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.113Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.113Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.113Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:14.113Z vite:import-analysis 0.52ms [2 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:14.113Z vite:transform 39.17ms /src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:14.114Z vite:time 32.10ms /src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:14.117Z vite:cache [memory] /@react-refresh
2024-07-27T09:37:14.117Z vite:resolve 0.53ms ./index.module.scss -> /Users/altnt/gitdep/ecopaste/EcoPaste-bak/EcoPaste/src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:14.117Z vite:cache [memory] /src/utils/is.ts
2024-07-27T09:37:14.117Z vite:import-analysis /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.118Z vite:import-analysis /node_modules/.vite/deps/react.js?v=4d4b8099 needs interop
2024-07-27T09:37:14.118Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:14.118Z vite:cache [memory] /node_modules/.vite/deps/antd.js?v=4d4b8099
2024-07-27T09:37:14.118Z vite:cache [memory] /node_modules/.vite/deps/clsx.js?v=4d4b8099
2024-07-27T09:37:14.118Z vite:cache [memory] /node_modules/.vite/deps/react.js?v=4d4b8099
2024-07-27T09:37:14.118Z vite:hmr [self-accepts] src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:14.118Z vite:import-analysis 1.43ms [7 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:14.119Z vite:transform 41.82ms /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:14.119Z vite:time 37.27ms /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:14.120Z vite:load 1.62ms [fs] /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:14.127Z vite:hmr [detected api usage] src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:14.128Z vite:import-analysis 0.23ms [0 imports rewritten] src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:14.128Z vite:transform 7.98ms /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:14.128Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:14.128Z vite:time 0.12ms /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:15.292Z vite:time 14.04ms /node_modules/.vite/deps/chunk-WXXH56N5.js.map
2024-07-27T09:37:15.292Z vite:time 14.03ms /node_modules/.vite/deps/react-dom_client.js.map
2024-07-27T09:37:15.294Z vite:time 15.15ms /node_modules/.vite/deps/react_jsx-dev-runtime.js.map
2024-07-27T09:37:15.294Z vite:time 15.85ms /node_modules/.vite/deps/chunk-MRWV3FAC.js.map
2024-07-27T09:37:15.296Z vite:time 17.64ms /node_modules/.vite/deps/chunk-FEW2R62K.js.map
2024-07-27T09:37:15.297Z vite:time 18.13ms /node_modules/.vite/deps/@ant-design_happy-work-theme.js.map
register Accelerator { id: Some(AcceleratorId(11944)), mods: ALT, key: KeyC }
2024-07-27T09:37:15.414Z vite:time 87.99ms /node_modules/.vite/deps/chunk-FJNRTQFW.js.map
2024-07-27T09:37:15.414Z vite:time 87.34ms /node_modules/.vite/deps/@tauri-apps_api_shell.js.map
2024-07-27T09:37:15.414Z vite:time 87.67ms /node_modules/.vite/deps/@tauri-apps_api_event.js.map
2024-07-27T09:37:15.416Z vite:time 89.26ms /node_modules/.vite/deps/chunk-JYA7ERJH.js.map
2024-07-27T09:37:15.416Z vite:time 89.49ms /node_modules/.vite/deps/chunk-BB4JC3M7.js.map
2024-07-27T09:37:15.456Z vite:time 129.87ms /node_modules/.vite/deps/chunk-4IZEVUZK.js.map
2024-07-27T09:37:15.462Z vite:time 2.98ms /node_modules/.vite/deps/chunk-LBPUJSSY.js.map
2024-07-27T09:37:15.464Z vite:time 4.70ms /node_modules/.vite/deps/arcdash.js.map
2024-07-27T09:37:15.465Z vite:time 5.38ms /node_modules/.vite/deps/chunk-MAYVV7DE.js.map
2024-07-27T09:37:15.466Z vite:time 6.69ms /node_modules/.vite/deps/valtio.js.map
2024-07-27T09:37:15.467Z vite:time 7.05ms /node_modules/.vite/deps/antd.js.map
2024-07-27T09:37:15.469Z vite:time 9.05ms /node_modules/.vite/deps/chunk-IORCOBDI.js.map
2024-07-27T09:37:15.473Z vite:time 4.70ms /node_modules/.vite/deps/@tauri-apps_api_dialog.js.map
2024-07-27T09:37:15.474Z vite:time 3.95ms /node_modules/.vite/deps/@tauri-apps_api_window.js.map
2024-07-27T09:37:15.475Z vite:time 4.29ms /node_modules/.vite/deps/chunk-WEA6OKKO.js.map
2024-07-27T09:37:15.476Z vite:time 5.44ms /node_modules/.vite/deps/chunk-QISYYZH3.js.map
2024-07-27T09:37:15.477Z vite:time 6.21ms /node_modules/.vite/deps/@tauri-apps_api_app.js.map
2024-07-27T09:37:15.482Z vite:time 9.86ms /node_modules/.vite/deps/chunk-XCIO4MNB.js.map
2024-07-27T09:37:15.484Z vite:time 5.49ms /node_modules/.vite/deps/@tauri-apps_api_os.js.map
2024-07-27T09:37:15.485Z vite:time 5.66ms /node_modules/.vite/deps/chunk-OKVUSGLG.js.map
2024-07-27T09:37:15.486Z vite:time 6.82ms /node_modules/.vite/deps/chunk-KB52VO44.js.map
2024-07-27T09:37:15.487Z vite:time 7.78ms /node_modules/.vite/deps/chunk-GWPCJZOQ.js.map
2024-07-27T09:37:15.487Z vite:time 5.14ms /node_modules/.vite/deps/valtio_utils.js.map
2024-07-27T09:37:15.493Z vite:time 9.36ms /node_modules/.vite/deps/chunk-RYA2V5EJ.js.map
2024-07-27T09:37:15.496Z vite:time 7.40ms /node_modules/.vite/deps/chunk-NRFXTMKE.js.map
2024-07-27T09:37:15.497Z vite:time 8.25ms /node_modules/.vite/deps/chunk-IB6CFPNO.js.map
2024-07-27T09:37:15.500Z vite:time 11.45ms /node_modules/.vite/deps/chunk-GWWTMTUP.js.map
2024-07-27T09:37:15.502Z vite:time 12.51ms /node_modules/.vite/deps/@tauri-apps_api.js.map
2024-07-27T09:37:15.516Z vite:time 24.43ms /node_modules/.vite/deps/react-router-dom.js.map
2024-07-27T09:37:15.517Z vite:time 21.69ms /node_modules/.vite/deps/react.js.map
2024-07-27T09:37:15.518Z vite:time 14.95ms /node_modules/.vite/deps/@tauri-apps_api_fs.js.map
2024-07-27T09:37:15.519Z vite:time 16.02ms /node_modules/.vite/deps/@tauri-apps_api_path.js.map
2024-07-27T09:37:15.521Z vite:time 18.51ms /node_modules/.vite/deps/react-i18next.js.map
2024-07-27T09:37:15.522Z vite:time 16.53ms /node_modules/.vite/deps/tauri-plugin-sql-api.js.map
2024-07-27T09:37:15.533Z vite:time 15.37ms /node_modules/.vite/deps/ahooks.js.map
2024-07-27T09:37:15.577Z vite:time 58.91ms /node_modules/.vite/deps/chunk-WFZP5V7H.js.map
2024-07-27T09:37:15.577Z vite:time 54.76ms /node_modules/.vite/deps/chunk-VIYER726.js.map
2024-07-27T09:37:15.577Z vite:time 54.87ms /node_modules/.vite/deps/antd_locale_en_US.js.map
2024-07-27T09:37:15.583Z vite:time 57.23ms /node_modules/.vite/deps/antd_locale_zh_CN.js.map
2024-07-27T09:37:15.584Z vite:time 57.80ms /node_modules/.vite/deps/@tauri-apps_api_process.js.map
2024-07-27T09:37:15.593Z vite:time 54.36ms /node_modules/.vite/deps/clsx.js.map
2024-07-27T09:37:15.605Z vite:time 22.87ms /node_modules/.vite/deps/@tauri-apps_api_updater.js.map
2024-07-27T09:37:15.607Z vite:time 24.46ms /node_modules/.vite/deps/i18next.js.map
2024-07-27T09:37:15.617Z vite:time 32.65ms /node_modules/.vite/deps/lodash-es.js.map
2024-07-27T09:37:15.618Z vite:time 28.53ms /node_modules/.vite/deps/dayjs.js.map
2024-07-27T09:37:15.619Z vite:time 30.32ms /node_modules/.vite/deps/chunk-7RYHLFHP.js.map
2024-07-27T09:37:15.619Z vite:time 15.25ms /node_modules/.vite/deps/dayjs_locale_zh-cn.js.map
2024-07-27T09:37:15.623Z vite:time 4.39ms /node_modules/.vite/deps/chunk-J55WHEZN.js.map
2024-07-27T09:37:15.624Z vite:time 4.47ms /node_modules/.vite/deps/dayjs_plugin_relativeTime.js.map
2024-07-27T09:37:15.625Z vite:time 5.58ms /node_modules/.vite/deps/dayjs_plugin_utc.js.map
2024-07-27T09:37:15.628Z vite:time 8.15ms /node_modules/.vite/deps/tauri-plugin-autostart-api.js.map
2024-07-27T09:37:15.648Z vite:time 29.16ms /node_modules/.vite/deps/valtio-persist.js.map
2024-07-27T09:37:15.649Z vite:time 27.74ms /node_modules/.vite/deps/@tauri-apps_api_globalShortcut.js.map
2024-07-27T09:37:15.651Z vite:time 24.42ms /node_modules/.vite/deps/mac-scrollbar.js.map
2024-07-27T09:37:15.652Z vite:time 22.97ms /node_modules/.vite/deps/@tauri-apps_api_tauri.js.map
2024-07-27T09:37:15.654Z vite:resolve 1.54ms /preference -> null
2024-07-27T09:37:15.658Z vite:html-fallback Rewriting GET /preference to /index.html
2024-07-27T09:37:15.661Z vite:time 32.48ms /node_modules/.vite/deps/@tanstack_react-virtual.js.map
2024-07-27T09:37:15.664Z vite:time 16.09ms /node_modules/.vite/deps/tauri-plugin-context-menu.js.map
2024-07-27T09:37:15.703Z vite:time 42.61ms /node_modules/.vite/deps/@formkit_auto-animate_react.js.map
2024-07-27T09:37:15.712Z vite:cache [memory-hmr] /src/main.tsx
2024-07-27T09:37:15.712Z vite:cache [memory] /node_modules/.vite/deps/react_jsx-dev-runtime.js?v=4d4b8099
2024-07-27T09:37:15.712Z vite:cache [memory] /node_modules/.vite/deps/react-dom_client.js?v=4d4b8099
2024-07-27T09:37:15.712Z vite:cache [memory] /src/App.tsx
2024-07-27T09:37:15.712Z vite:cache [memory] /node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:15.712Z vite:cache [memory] /src/assets/css/global.scss
2024-07-27T09:37:15.712Z vite:cache [memory] /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:15.712Z vite:time 59.75ms /index.html
2024-07-27T09:37:15.715Z vite:load 2.58ms [plugin] /__uno.css
2024-07-27T09:37:15.726Z vite:hmr [self-accepts] /__uno.css
2024-07-27T09:37:15.726Z vite:import-analysis 0.36ms [0 imports rewritten] /__uno.css
2024-07-27T09:37:15.726Z vite:transform 11.69ms /__uno.css
2024-07-27T09:37:15.730Z vite:time 64.07ms /src/assets/audio/copy.mp3
2024-07-27T09:37:15.739Z vite:time 78.20ms /node_modules/.vite/deps/rehype-raw.js.map
2024-07-27T09:37:15.749Z vite:time 88.88ms /node_modules/.vite/deps/react-markdown.js.map
2024-07-27T09:37:15.751Z vite:cache [304] /@vite/client
2024-07-27T09:37:15.751Z vite:time 0.11ms /@vite/client
2024-07-27T09:37:15.752Z vite:cache [304] /src/main.tsx
2024-07-27T09:37:15.752Z vite:time 0.04ms /src/main.tsx
2024-07-27T09:37:15.752Z vite:cache [304] /@react-refresh
2024-07-27T09:37:15.752Z vite:time 0.06ms /@react-refresh
2024-07-27T09:37:15.771Z vite:cache [memory] /__uno.css
2024-07-27T09:37:15.771Z vite:time 0.22ms /__uno.css
2024-07-27T09:37:15.772Z vite:cache [304] /src/App.tsx
2024-07-27T09:37:15.772Z vite:time 0.05ms /src/App.tsx
2024-07-27T09:37:15.773Z vite:cache [304] /node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:15.773Z vite:time 0.08ms /node_modules/.pnpm/vite@5.2.12_@types+node@20.14.9_less@4.2.0_sass@1.77.4_stylus@0.62.0/node_modules/vite/dist/client/env.mjs
2024-07-27T09:37:15.773Z vite:cache [304] /node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:15.773Z vite:time 0.09ms /node_modules/.pnpm/@unocss+reset@0.60.4/node_modules/@unocss/reset/tailwind-compat.css
2024-07-27T09:37:15.774Z vite:cache [304] /src/assets/css/global.scss
2024-07-27T09:37:15.774Z vite:time 0.18ms /src/assets/css/global.scss
2024-07-27T09:37:15.774Z vite:cache [304] /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:15.774Z vite:time 0.10ms /node_modules/.pnpm/mac-scrollbar@0.13.6/node_modules/mac-scrollbar/dist/mac-scrollbar.css
2024-07-27T09:37:15.805Z vite:cache [304] /src/stores/global.ts
2024-07-27T09:37:15.805Z vite:time 0.10ms /src/stores/global.ts
2024-07-27T09:37:15.806Z vite:cache [304] /src/hooks/useTheme.ts
2024-07-27T09:37:15.806Z vite:time 0.10ms /src/hooks/useTheme.ts
2024-07-27T09:37:15.814Z vite:cache [304] /src/constants/index.ts
2024-07-27T09:37:15.816Z vite:time 1.63ms /src/constants/index.ts
2024-07-27T09:37:15.817Z vite:cache [304] /src/utils/color.ts
2024-07-27T09:37:15.818Z vite:time 1.21ms /src/utils/color.ts
2024-07-27T09:37:15.822Z vite:cache [304] /src/stores/clipboard.ts
2024-07-27T09:37:15.822Z vite:time 0.63ms /src/stores/clipboard.ts
2024-07-27T09:37:15.825Z vite:cache [304] /src/locales/index.ts
2024-07-27T09:37:15.826Z vite:time 0.24ms /src/locales/index.ts
2024-07-27T09:37:15.832Z vite:cache [304] /src/utils/is.ts
2024-07-27T09:37:15.832Z vite:time 0.08ms /src/utils/is.ts
2024-07-27T09:37:15.833Z vite:cache [304] /src/plugins/locale.ts
2024-07-27T09:37:15.833Z vite:time 0.21ms /src/plugins/locale.ts
2024-07-27T09:37:15.833Z vite:cache [304] /src/plugins/window.ts
2024-07-27T09:37:15.833Z vite:time 0.09ms /src/plugins/window.ts
2024-07-27T09:37:15.834Z vite:cache [304] /src/router/index.ts
2024-07-27T09:37:15.835Z vite:time 0.34ms /src/router/index.ts
2024-07-27T09:37:15.836Z vite:cache [304] /src/database/index.tsx
2024-07-27T09:37:15.836Z vite:time 0.24ms /src/database/index.tsx
2024-07-27T09:37:15.838Z vite:cache [304] /src/plugins/theme.ts
2024-07-27T09:37:15.839Z vite:time 0.08ms /src/plugins/theme.ts
2024-07-27T09:37:15.985Z vite:time 320.48ms /node_modules/.vite/deps/chunk-CJRCVHVX.js.map
2024-07-27T09:37:16.034Z vite:cache [304] /src/locales/en-US.json?import
2024-07-27T09:37:16.034Z vite:time 0.11ms /src/locales/en-US.json?import
2024-07-27T09:37:16.034Z vite:cache [304] /src/locales/zh-CN.json?import
2024-07-27T09:37:16.034Z vite:time 0.05ms /src/locales/zh-CN.json?import
2024-07-27T09:37:16.038Z vite:cache [304] /src/pages/About/index.tsx
2024-07-27T09:37:16.038Z vite:time 0.18ms /src/pages/About/index.tsx
2024-07-27T09:37:16.039Z vite:cache [304] /src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:16.039Z vite:time 0.09ms /src/pages/Clipboard/Settings/index.tsx
2024-07-27T09:37:16.039Z vite:cache [304] /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:16.039Z vite:time 0.04ms /src/pages/Clipboard/History/index.tsx
2024-07-27T09:37:16.039Z vite:cache [304] /src/pages/DataBackup/index.tsx
2024-07-27T09:37:16.039Z vite:time 0.04ms /src/pages/DataBackup/index.tsx
2024-07-27T09:37:16.039Z vite:cache [304] /src/pages/Settings/index.tsx
2024-07-27T09:37:16.040Z vite:time 0.03ms /src/pages/Settings/index.tsx
2024-07-27T09:37:16.040Z vite:cache [304] /src/layouts/Preference/index.tsx
2024-07-27T09:37:16.040Z vite:time 0.03ms /src/layouts/Preference/index.tsx
2024-07-27T09:37:16.078Z vite:cache [304] /src/components/Hotkey/index.tsx
2024-07-27T09:37:16.078Z vite:time 0.19ms /src/components/Hotkey/index.tsx
2024-07-27T09:37:16.078Z vite:cache [304] /src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:16.078Z vite:time 0.19ms /src/pages/Clipboard/Settings/components/DefaultFocus/index.tsx
2024-07-27T09:37:16.079Z vite:cache [304] /src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:16.079Z vite:time 0.04ms /src/pages/Clipboard/Settings/components/DoubleClickFeedback/index.tsx
2024-07-27T09:37:16.079Z vite:cache [304] /src/components/Icon/index.tsx
2024-07-27T09:37:16.079Z vite:time 0.05ms /src/components/Icon/index.tsx
2024-07-27T09:37:16.080Z vite:cache [304] /src/plugins/clipboard.ts
2024-07-27T09:37:16.080Z vite:time 0.45ms /src/plugins/clipboard.ts
2024-07-27T09:37:16.085Z vite:cache [304] /src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:16.085Z vite:time 0.09ms /src/pages/Clipboard/Settings/components/WindowPosition/index.tsx
2024-07-27T09:37:16.086Z vite:cache [304] /src/assets/audio/copy.mp3?import
2024-07-27T09:37:16.086Z vite:time 0.17ms /src/assets/audio/copy.mp3?import
2024-07-27T09:37:16.086Z vite:cache [304] /src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:16.086Z vite:time 0.04ms /src/pages/Clipboard/History/components/Header/index.tsx
2024-07-27T09:37:16.086Z vite:cache [304] /src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:16.086Z vite:time 0.04ms /src/pages/Clipboard/History/components/List/index.tsx
2024-07-27T09:37:16.087Z vite:cache [304] /src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:16.087Z vite:time 0.06ms /src/pages/Clipboard/Settings/components/SearchPosition/index.tsx
2024-07-27T09:37:16.093Z vite:cache [304] /src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:16.094Z vite:time 1.08ms /src/pages/Clipboard/Settings/components/HistoryCapacity/index.tsx
2024-07-27T09:37:16.094Z vite:cache [304] /src/utils/dayjs.ts
2024-07-27T09:37:16.094Z vite:time 0.13ms /src/utils/dayjs.ts
2024-07-27T09:37:16.096Z vite:cache [304] /src/hooks/useRegister.ts
2024-07-27T09:37:16.096Z vite:time 0.08ms /src/hooks/useRegister.ts
2024-07-27T09:37:16.096Z vite:cache [304] /src/plugins/autoLaunch.ts
2024-07-27T09:37:16.096Z vite:time 0.04ms /src/plugins/autoLaunch.ts
2024-07-27T09:37:16.101Z vite:cache [304] /src/plugins/mouse.ts
2024-07-27T09:37:16.101Z vite:time 0.08ms /src/plugins/mouse.ts
2024-07-27T09:37:16.102Z vite:cache [304] /src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:16.102Z vite:time 0.08ms /src/pages/Settings/components/ThemeMode/index.tsx
2024-07-27T09:37:16.104Z vite:cache [304] /src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:16.104Z vite:time 0.08ms /src/pages/Clipboard/History/components/Search/index.tsx
2024-07-27T09:37:16.105Z vite:cache [304] /src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:16.105Z vite:time 0.07ms /src/pages/Settings/components/TrayClick/index.tsx
2024-07-27T09:37:16.108Z vite:cache [304] /src/plugins/backup.ts
2024-07-27T09:37:16.108Z vite:time 0.07ms /src/plugins/backup.ts
2024-07-27T09:37:16.109Z vite:cache [304] /src/plugins/ocr.ts
2024-07-27T09:37:16.109Z vite:time 0.08ms /src/plugins/ocr.ts
2024-07-27T09:37:16.110Z vite:cache [304] /src/components/Update/index.tsx
2024-07-27T09:37:16.110Z vite:time 0.07ms /src/components/Update/index.tsx
2024-07-27T09:37:16.111Z vite:cache [304] /src/components/Hotkey/keys.ts
2024-07-27T09:37:16.111Z vite:time 0.07ms /src/components/Hotkey/keys.ts
2024-07-27T09:37:16.111Z vite:cache [304] /src/plugins/fsExtra.ts
2024-07-27T09:37:16.111Z vite:time 0.05ms /src/plugins/fsExtra.ts
2024-07-27T09:37:16.111Z vite:cache [304] /src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:16.111Z vite:time 0.04ms /src/pages/Settings/components/Language/index.tsx
2024-07-27T09:37:16.112Z vite:cache [304] /src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:16.112Z vite:time 0.10ms /src/pages/Clipboard/History/components/Header/components/Tab/index.tsx
2024-07-27T09:37:16.113Z vite:cache [304] /src/hooks/useFocus.ts
2024-07-27T09:37:16.113Z vite:time 0.06ms /src/hooks/useFocus.ts
2024-07-27T09:37:16.113Z vite:cache [304] /src/components/Scrollbar/index.tsx
2024-07-27T09:37:16.114Z vite:time 1.12ms /src/components/Scrollbar/index.tsx
2024-07-27T09:37:16.116Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:16.116Z vite:time 0.08ms /src/pages/Clipboard/History/components/List/components/Item/index.tsx
2024-07-27T09:37:16.118Z vite:cache [304] /src/components/Update/index.module.scss
2024-07-27T09:37:16.118Z vite:time 0.18ms /src/components/Update/index.module.scss
2024-07-27T09:37:16.139Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:16.139Z vite:time 0.11ms /src/pages/Clipboard/History/components/List/components/Item/components/Files/index.tsx
2024-07-27T09:37:16.139Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:16.139Z vite:time 0.05ms /src/pages/Clipboard/History/components/List/components/Item/components/HTML/index.tsx
2024-07-27T09:37:16.140Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:16.140Z vite:time 0.04ms /src/pages/Clipboard/History/components/List/components/Item/components/Header/index.tsx
2024-07-27T09:37:16.140Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:16.140Z vite:time 0.06ms /src/pages/Clipboard/History/components/List/components/Item/components/Image/index.tsx
2024-07-27T09:37:16.140Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:16.140Z vite:time 0.05ms /src/pages/Clipboard/History/components/List/components/Item/components/RichText/index.tsx
2024-07-27T09:37:16.141Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:16.141Z vite:time 0.17ms /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.tsx
2024-07-27T09:37:16.143Z vite:cache [304] /src/plugins/paste.ts
2024-07-27T09:37:16.143Z vite:time 0.19ms /src/plugins/paste.ts
2024-07-27T09:37:16.146Z vite:cache [304] /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:16.146Z vite:time 0.14ms /src/pages/Clipboard/History/components/List/components/Item/components/Text/index.module.scss
2024-07-27T09:37:16.287Z vite:cache [memory] /__uno.css
2024-07-27T09:37:16.287Z vite:time 0.56ms /__uno.css
2024-07-27T09:37:16.290Z vite:time 1.82ms /src/assets/audio/copy.mp3
register Accelerator { id: Some(AcceleratorId(17952)), mods: ALT, key: KeyX }

glob模式

Glob 模式是一种用于文件名匹配的模式,它使用通配符来指定文件名的模式。以下是 Glob 模式的一些特点和常见用法:

特点:

  • 相对简单:语法比正则表达式简单,容易理解和使用。
  • 基于通配符:广泛使用通配符,如星号(*)表示任意字符序列(包括空字符),问号(?)表示任意单个字符。
  • 用于文件匹配:主要目的是匹配文件名或文件路径,而不是一般的文本内容

常见用法和通配符示例:

  • *:匹配任意数量(包括零个)的字符。例如,*.txt 匹配所有扩展名为 .txt 的文件。
  • ?:匹配任意单个字符。例如,file?.txt 匹配 file1.txtfilea.txt 等。
  • {}:用于表示字符组或多个模式。例如,*.{html,htm} 匹配所有扩展名为 .html.htm 的文件;(a-c).txt 匹配文件名中单个字符为 abc 且扩展名为 .txt 的文件。
  • **:在一些实现中,** 可用于匹配任意数量的目录及其子目录。例如,/home/**/*.txt 在 Unix 平台上匹配 /home 目录及其所有子目录下的 .txt 文件。
  • !:用于否定。例如,!(a).txt 匹配文件名中单个字符不为 a 且扩展名为 .txt 的文件。
  • []:指定字符范围。例如,[0-9] 匹配任意单个数字,[a-z] 匹配任意小写字母。
  • 转义字符:某些情况下,可能需要匹配包含通配符本身的文件名,可以使用转义字符(如在 Unix 系统中常用的反斜线 \)来转义通配符。例如,\*.txt 可匹配实际名为 *.txt 的文件。

例如,在 Unix/Linux 系统中,你可以使用类似 mv *.txt textfiles/ 的命令将当前目录下所有扩展名为 .txt 的文件移动到 textfiles 目录。

在不同的编程语言或工具中,对 Glob 模式的具体支持和语法可能会略有差异,但总体上的概念和常用通配符是相似的。它在文件操作、批量处理文件等场景中非常有用,可以方便地根据一定的模式选择一组文件进行操作。

以下是一些额外的 Glob 模式示例,帮助你更好地理解其用法:

  • 匹配以 file 开头且扩展名为 .txt 的所有文件:file*.txt
  • 匹配以 docdocx 结尾的所有文件:*.(doc|docx)
  • 匹配以 img 开头,中间有任意一个字符,然后以 .jpg 结尾的文件:img?.jpg
  • 匹配 dir 目录下所有子目录中的 .png 文件:dir/**/*.png
  • 匹配文件名中包含数字的所有文件:*(*[0-9]*).*
  • 匹配除了 .git 目录及其子目录外的所有文件:!**.git** (假设使用支持 ! 排除的 Glob 实现)

正则表达式

1723639246355
1723639267666
1723639288584
1723639313650
1723639333918
1723639343744
1723639301123
1723639509548

查看Python文档的几种方法

1.help

在交互模式下,help函数是获取文档的好帮手,使用非常简单。 [1.help]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> import struct
>>> help(struct)
Help on module struct:

NAME
struct

DESCRIPTION
Functions to convert between Python values and C structs.
Python bytes objects are used to hold the data representing the C struct
and also as format strings (explained below) to describe the layout of data
in the C struct.

The optional first format char indicates byte order, size and alignment:
@: native order, size & alignment (default)
=: native order, std. size & alignment
<: little-endian, std. size & alignment
>: big-endian, std. size & alignment
!: same as >

The remaining chars indicate types of args and must match exactly;
these can be preceded by a decimal repeat count:
x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;
?: _Bool (requires C99; if not available, char is used instead)
h:short; H:unsigned short; i:int; I:unsigned int;

2.__doc__

__doc__是每个对象都有的属性,其存放了对象文档。

3.在线文档

在浏览器打开https://docs.python.org/3.4/

解决python 扩展中的调试程序不再支持低于 3.8 的 python 版本。

1731060076127

-----2024年11月8日更新,发现点取消还是能调试的

vscode 安装的python解释器版本太低或太高。需要重新安装一下vscode的python解释器。

1731060116229

VS Code调试Python时,选择conda虚拟环境(远程调试也支持)

1、选择VS Code 的菜单项 View-> Command Palette 2、输入Python:Select Interpreter 1731057842204 3.选择指定的conda虚拟环境 1731057857901

命令行调试 python 代码https://docs.python.org/2/library/pdb.html)

1726470633544

从命令行运行

你可以在命令行使用Python debugger运行一个脚本,举个例子:

复制

1
$python-mpdbmy_script.py

这会触发 debugger 在脚本第一行指令处停止执行。这在脚本很短时会很有帮助。你可以通过(Pdb)模式接着查看变量信息,并且逐行调试。

从脚本内部运行

同时,你也可以在脚本内部设置断点,这样就可以在某些特定点查看变量信息和各种执行时信息了。这里将使用 pdb.set_trace() 方法来实现。举个例子:

复制

1
2
3
4
5
6
7
import pdb

defmake_bread():
pdb.set_trace()
return"I don't have time"

print(make_bread())

试下保存上面的脚本后运行之。你会在运行时马上进入 debugger 模式。现在是时候了解下 debugger 模式下的一些命令了。

命令列表:

  • c: 继续执行
  • w: 显示当前正在执行的代码行的上下文信息
  • a: 打印当前函数的参数列表
  • s: 执行当前代码行,并停在第一个能停的地方(相当于单步进入)
  • n: 继续执行到当前函数的下一行,或者当前行直接返回(单步跳过)
  • p表达在当前上下文中评估表达式并打印其值。<span class="pre">print</span>也可以使用,但它不是调试器命令——它会执行 Python<span class="pre">print</span>语句。
  • pp表达式与命令类似 <span class="pre">p</span>,不同之处在于表达式的值是使用<span class="pre">pprint</span>模块漂亮地打印的。
  • 别名 [ 名称 [命令]]创建一个名为name的别名,用于执行 command 。命令不能 引号括起来。可替换参数可以用 <span class="pre">%1</span>、 <span class="pre">%2</span>等表示,而 则 <span class="pre">%*</span>用所有参数替换。如果没有给出 command ,则显示name的当前别名。如果没有给出参数,则列出所有别名。

别名可以嵌套,并且可以包含可以在 pdb 提示符下合法输入的任何内容。请注意,内部 pdb 命令可以被别名覆盖。然后,这样的命令将被隐藏,直到别名被删除。别名以递归方式应用于命令行的第一个单词;行中的所有其他单词保持不变。

作为示例,这里有两个有用的别名(尤其是放在文件中时 <span class="pre">.pdbrc</span>):

1
2
3
4
#Print instance variables (usage "pi classInst")
alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
#Print instance variables in self
alias ps pi self

单步跳过(next)和单步进入(step)的区别在于,单步进入会进入当前行调用的函数内部并停在里面,而单步跳过会(几乎)全速执行完当前行调用的函数,并停在当前函数的下一行。

直接输入变量名称

还可以直接输入变量的名称查看变量的值 alt text

使用类的方法查看变量/类的信息(输入表达式)
1731057698270
1726470151914
1726470664777

python装饰器

在 Python 中,装饰器(Decorator)是一种用于修改或增强函数或类功能的强大工具。

装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数。这个新的函数通常会在调用原始函数之前或之后执行一些额外的操作

首先了解一下装饰器的原理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def a_new_decorator(a_func):

def wrapTheFunction():
print("I am doing some boring work before executing a_func()")

a_func()

print("I am doing some boring work after executing a_func()")

return wrapTheFunction
@a_new_decorator
def a_function_requiring_decoration():
"""Hey you! Decorate me!"""
print("I am the function which needs some decoration to "
"remove my foul smell")

a_function_requiring_decoration()
#outputs: I am doing some boring work before executing a_func()
# I am the function which needs some decoration to remove my foul smell
# I am doing some boring work after executing a_func()

#the @a_new_decorator is just a short way of saying:
a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)

上面的代码说明:

1
2
#the @a_new_decorator is just a short way of saying:
a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)

希望你现在对 Python 装饰器的工作原理有一个基本的理解。如果我们运行如下代码会存在一个问题:

1
2
print(a_function_requiring_decoration.__name__)
# Output: wrapTheFunction

这并不是我们想要的!Ouput输出应该是"a_function_requiring_decoration"。这里的函数被warpTheFunction替代了。它重写了我们函数的名字和注释文档(docstring)。幸运的是Python提供给我们一个简单的函数来解决这个问题,那就是functools.wraps。我们修改上一个例子来使用functools.wraps:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from functools import wraps

def a_new_decorator(a_func):
@wraps(a_func)
def wrapTheFunction():
print("I am doing some boring work before executing a_func()")
a_func()
print("I am doing some boring work after executing a_func()")
return wrapTheFunction

@a_new_decorator
def a_function_requiring_decoration():
"""Hey yo! Decorate me!"""
print("I am the function which needs some decoration to "
"remove my foul smell")

print(a_function_requiring_decoration.__name__)
# Output: a_function_requiring_decoration

接下来学习装饰器的一些常用场景。

蓝本规范:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from functools import wraps
def decorator_name(f):
@wraps(f)
def decorated(*args, **kwargs):
if not can_run:
return "Function will not run"
return f(*args, **kwargs)
return decorated

@decorator_name
def func():
return("Function is running")

can_run = True
print(func())
# Output: Function is running

can_run = False
print(func())
# Output: Function will not run

注意: @wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。

使用场景

现在我们来看一下装饰器在哪些地方特别耀眼,以及使用它可以让一些事情管理起来变得更简单。

(1)授权(Authorization)

装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint)。它们被大量使用于Flask和Django web框架中。这里是一个例子来使用基于装饰器的授权:

1
2
3
4
5
6
7
8
9
10
from functools import wraps

def requires_auth(f):
@wraps(f)
def decorated(*args, **kwargs):
auth = request.authorization
if not auth or not check_auth(auth.username, auth.password):
authenticate()
return f(*args, **kwargs)
return decorated

(2)日志(Logging)

日志是装饰器运用的另一个亮点。这是个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from functools import wraps

def logit(func):
@wraps(func)
def with_logging(*args, **kwargs):
print(func.__name__ + " was called")
return func(*args, **kwargs)
return with_logging

@logit
def addition_func(x):
"""Do some math."""
return x + x


result = addition_func(4)
# Output: addition_func was called

带参数的装饰器

(1)在函数中嵌入装饰器

我们回到日志的例子,并创建一个包裹函数,能让我们指定一个用于输出的日志文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from functools import wraps

def logit(logfile='out.log'):
def logging_decorator(func):
@wraps(func)
def wrapped_function(*args, **kwargs):
log_string = func.__name__ + " was called"
print(log_string)
# 打开logfile,并写入内容
with open(logfile, 'a') as opened_file:
# 现在将日志打到指定的logfile
opened_file.write(log_string + '\n')
return func(*args, **kwargs)
return wrapped_function
return logging_decorator

@logit()
def myfunc1():
pass

myfunc1()
# Output: myfunc1 was called
# 现在一个叫做 out.log 的文件出现了,里面的内容就是上面的字符串

@logit(logfile='func2.log')
def myfunc2():
pass

myfunc2()
# Output: myfunc2 was called
# 现在一个叫做 func2.log 的文件出现了,里面的内容就是上面的字符串

装饰器类

现在我们有了能用于正式环境的logit装饰器,但当我们的应用的某些部分还比较脆弱时,异常也许是需要更紧急关注的事情。比方说有时你只想打日志到一个文件。而有时你想把引起你注意的问题发送到一个email,同时也保留日志,留个记录。这是一个使用继承的场景,但目前为止我们只看到过用来构建装饰器的函数。

幸运的是,类也可以用来构建装饰器。那我们现在以一个类而不是一个函数的方式,来重新构建logit。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from functools import wraps

class logit(object):
def __init__(self, logfile='out.log'):
self.logfile = logfile

def __call__(self, func):
@wraps(func)
def wrapped_function(*args, **kwargs):
log_string = func.__name__ + " was called"
print(log_string)
# 打开logfile并写入
with open(self.logfile, 'a') as opened_file:
# 现在将日志打到指定的文件
opened_file.write(log_string + '\n')
# 现在,发送一个通知
self.notify()
return func(*args, **kwargs)
return wrapped_function

def notify(self):
# logit只打日志,不做别的
pass

这个实现有一个附加优势,在于比嵌套函数的方式更加整洁,而且包裹一个函数还是使用跟以前一样的语法:

1
2
3
@logit()
def myfunc1():
pass

现在,我们给 logit 创建子类,来添加 email 的功能(虽然 email 这个话题不会在这里展开)。

1
2
3
4
5
6
7
8
9
10
11
12
class email_logit(logit):
'''
一个logit的实现版本,可以在函数调用时发送email给管理员
'''
def __init__(self, email='admin@myproject.com', *args, **kwargs):
self.email = email
super(email_logit, self).__init__(*args, **kwargs)

def notify(self):
# 发送一封email到self.email
# 这里就不做实现了
pass

从现在起,@email_logit 将会和 @logit 产生同样的效果,但是在打日志的基础上,还会多发送一封邮件给管理员。

其他场景

以下是一个简单的装饰器示例,用于计算函数的执行时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import time

def timeit(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")
return result
return wrapper

@timeit
def my_function():
time.sleep(2)
print("Function is done.")

my_function()

在上述示例中,timeit 是装饰器函数。@timeit 这种语法应用装饰器到 my_function 函数上。

装饰器还可以用于权限验证、日志记录、缓存等多种场景。

比如,用于权限验证的装饰器:

1
2
3
4
5
6
7
8
9
10
11
12
13
def requires_permission(permission_level):
def decorator(func):
def wrapper(*args, **kwargs):
if not user_has_permission(permission_level):
print("Permission denied.")
return
return func(*args, **kwargs)
return wrapper
return decorator

@requires_permission("admin")
def admin_function():
print("This is an admin-only function.")

用于日志记录的装饰器:

1
2
3
4
5
6
7
8
9
10
11
def log_function_call(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
print(f"{func.__name__} returned: {result}")
return result
return wrapper

@log_function_call
def add_numbers(a, b):
return a + b

装饰器为 Python 编程提供了极大的灵活性和可扩展性,使代码更加简洁、优雅和易于维护。

@property python装饰器的用法

在 Python 中,@property 装饰器用于将一个方法转换为属性,使得可以像访问属性一样访问该方法。

以下是一个示例来说明 @property 的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Circle:
def __init__(self, radius):
self._radius = radius

@property
def radius(self):
return self._radius

@radius.setter
def radius(self, value):
if value < 0:
raise ValueError("Radius cannot be negative")
self._radius = value

@property
def area(self):
return 3.14 * self._radius ** 2

在上述 Circle 类中:

  • radius 方法被 @property 装饰后,可以像访问属性一样访问 radius ,例如 my_circle.radius
  • 同时,通过定义 @radius.setter 方法,可以实现对 radius 属性的赋值操作,例如 my_circle.radius = 5
  • area 方法只使用了 @property 装饰,它是只读属性,不能直接对其赋值。

这样使用 @property 装饰器的好处包括:

  • 提供了更简洁和直观的接口,使代码看起来更像在操作属性,而不是调用方法。
  • 可以在获取或设置属性值时添加额外的逻辑,例如数据验证、计算其他相关属性等。

再比如一个示例,用于计算矩形的周长和面积:

1
2
3
4
5
6
7
8
9
10
11
12
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width

@property
def perimeter(self):
return 2 * (self.length + self.width)

@property
def area(self):
return self.length * self.width

在这个例子中,可以直接通过 rectangle.perimeterrectangle.area 来获取矩形的周长和面积,而无需调用明确的方法。

python **kwargs

在 Python 中,**kwargs 用于接收不定数量的关键字参数。

关键字参数是以键值对的形式传递给函数的。当我们不确定函数会接收多少个关键字参数,或者不知道具体的参数名称时,就可以使用 **kwargs

以下是一个示例:

1
2
3
4
5
def my_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

my_function(name="Alice", age=25, city="New York")

在上述示例中,my_function 函数可以接收任意数量的关键字参数,并通过遍历 kwargs 来处理它们。

**kwargs 常常与位置参数和默认参数一起使用,以提供更灵活的函数接口。

例如:

1
2
3
4
5
6
def another_function(a, b=10, **kwargs):
print(f"a: {a}, b: {b}")
for key, value in kwargs.items():
print(f"{key}: {value}")

another_function(5, name="Bob", occupation="Engineer")

在这个例子中,函数 another_function 接收一个位置参数 a ,一个默认参数 b ,以及不定数量的关键字参数 **kwargs

React

React 应用是使用 Facebook 开发的 React 库构建的 Web 应用程序。

React 是一个用于构建用户界面的 JavaScript 库。一个 React 应用通常由多个组件组成,这些组件可以是函数组件或类组件。组件通过组合和嵌套来构建复杂的用户界面结构。

在 React 应用中,数据通过一种称为“单向数据流”的方式流动。父组件可以将数据传递给子组件,但子组件通常不能直接修改父组件的数据,而是通过回调函数将更改通知给父组件。

React 应用的核心特点包括:

  1. 组件化开发:将界面分解为独立的、可复用的组件,提高代码的可维护性和可扩展性。
  2. 虚拟 DOM:React 会创建一个虚拟的 DOM 树,在数据变化时,通过比较新旧虚拟 DOM 树的差异,然后高效地更新实际的 DOM,以优化性能。
  3. 声明式编程:开发者只需描述界面应该呈现的样子,而无需直接操作 DOM 进行更新。

例如,一个简单的 React 应用可能包含一个显示待办事项列表的组件,以及用于添加、删除和标记完成待办事项的功能组件。

通过使用 React,可以更高效地构建复杂、交互性强的用户界面,并提高开发效率和应用的性能。同时,结合其他技术和工具,如 Redux 用于状态管理、Webpack 用于模块打包等,可以构建出功能更强大的完整 React 应用。

假设我们有一个简单的待办事项应用,它可能有一个 TodoList 组件来展示待办事项列表,一个 AddTodo 组件用于添加新的待办事项,以及相关的样式和逻辑处理。在数据变化时,React 会自动更新界面,确保用户始终看到最新和正确的信息。

1722076032101

ReactDOM 模块

ReactDOM 模块在 React 应用中起着关键作用。

它主要负责将 React 组件渲染到 DOM(文档对象模型)中,实现组件与实际网页视图的连接和更新。

具体来说,ReactDOM.render() 方法是 ReactDOM 模块中最常用的方法之一。它接受一个 React 元素(通常是一个根组件)和一个 DOM 节点作为参数,将组件渲染到指定的 DOM 节点中。

例如:

1
2
3
4
5
6
import React from'react';
import ReactDOM from'react-dom';

const App = () => <h1>Hello, World!</h1>;

ReactDOM.render(<App />, document.getElementById('root'));

在上述示例中,ReactDOM.render(<App />, document.getElementById('root'))App 组件渲染到具有 idroot 的 DOM 节点中。

当组件的状态或属性发生变化时,ReactDOM 会负责高效地更新 DOM,以反映这些变化,而无需手动操作 DOM 节点,从而提高了应用的性能和可维护性。

此外,ReactDOM 还提供了一些其他方法,如 unmountComponentAtNode 用于卸载已渲染的组件,以及一些与服务器端渲染相关的方法等。

总的来说,ReactDOM 是 React 与浏览器 DOM 进行交互的桥梁,使得开发者能够以声明式的方式构建和管理用户界面,并实现高效的视图更新。

1722076122387

typescript

JavaScript 与 TypeScript 的区别

TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。

TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。 alt textalt text

第一个 TypeScript 实例

以下实例我们使用 TypeScript 来输出 Hello World!:

1
2
const hello : string = "Hello World!"
console.log(hello)

TypeScript 安装

本文介绍 TypeScript 环境的安装。

我们需要使用到 npm 工具安装,如果你还不了解 npm,可以参考我们的NPM 使用介绍

NPM 安装 TypeScript

如果你的本地环境已经安装了 npm 工具,可以使用以下命令来安装。

使用国内镜像:

1
npm config set registry https://registry.npmmirror.com

安装 typescript:

1
npm install -g typescript

安装完成后我们可以使用 tsc 命令来执行 TypeScript 的相关代码,以下是查看版本号:

1
2
$ tsc -v
Version3.2.2

然后我们新建一个 app.ts 的文件,代码如下:

1
2
var message:string = "Hello World" 
console.log(message)

通常我们使用 .ts 作为 TypeScript 代码文件的扩展名。

然后执行以下命令将 TypeScript 转换为 JavaScript 代码:

1
tsc app.ts
alt text

这时候在当前目录下(与 app.ts 同一目录)就会生成一个 app.js 文件,代码如下:

1
2
var message = "Hello World";
console.log(message);

使用 node 命令来执行 app.js 文件:

1
2
$ node app.js 
HelloWorld

TypeScript 转换为 JavaScript 过程如下图: alt text

TypeScript 基础语法

TypeScript 程序由以下几个部分组成:

  • 模块
  • 函数
  • 变量
  • 语句和表达式
  • 注释

上面有helloworld程序,就不再重复写了

我们可以同时编译多个 ts 文件:

1
tsc file1.ts file2.ts file3.ts

tsc 常用编译参数如下表所示:

序号 编译参数说明
1. --help显示帮助信息
2. --module载入扩展模块
3. --target设置 ECMA 版本
4. --declaration额外生成一个 .d.ts 扩展名的文件。
tsc ts-hw.ts --declaration
以上命令会生成 ts-hw.d.ts、ts-hw.js 两个文件。
5. --removeComments删除文件的注释
6. --out编译多个文件并合并到一个输出的文件
7. --sourcemap生成一个 sourcemap (.map) 文件。sourcemap 是一个存储源代码与编译代码对应位置映射的信息文件。
8. --module noImplicitAny在表达式和声明上有隐含的 any 类型时报错
9. --watch在监视模式下运行编译器。会监视输出文件,在它们改变时重新编译。

TypeScript 保留关键字

TypeScript 保留关键字如下表所示:

break as catch switch
case if throw else
var number string get
module type instanceof typeof
public private enum export
finally for while void
null super this new
in return true false
any extends static let
package implements interface function
do try yield const
continue

空白和换行

TypeScript 会忽略程序中出现的空格、制表符和换行符。

空格、制表符通常用来缩进代码,使代码易于阅读和理解。

TypeScript 区分大小写

TypeScript 区分大写和小写字符。

分号是可选的

每行指令都是一段语句,你可以使用分号或不使用, 分号在 TypeScript 中是可选的,建议使用。

以下代码都是合法的:

1
2
console.log("Runoob")
console.log("Google");

如果语句写在同一行则一定需要使用分号来分隔,否则会报错,如:

1
console.log("Runoob");console.log("Google");

TypeScript 注释

注释是一个良好的习惯,虽然很多程序员讨厌注释,但还是建议你在每段代码写上文字说明。

注释可以提高程序的可读性。

注释可以包含有关程序一些信息,如代码的作者,有关函数的说明等。

编译器会忽略注释。

TypeScript 支持两种类型的注释

  • 单行注释 ( // ) − 在 // 后面的文字都是注释内容。
  • **多行注释 (/* */)** − 这种注释可以跨越多行。

注释实例:

1
2
3
4
5
6
7
// 这是一个单行注释

/*
这是一个多行注释
这是一个多行注释
这是一个多行注释
*/

TypeScript 与面向对象

面向对象是一种对现实世界理解和抽象的方法。

TypeScript 是一种面向对象的编程语言。

面向对象主要有两个概念:对象和类。

  • 对象 :对象是类的一个实例( 对象不是找个女朋友 ),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • :类是一个模板,它描述一类对象的行为和状态。
  • 方法 :方法是类的操作的实现步骤。

TypeScript 面向对象编程实例:

1
2
3
4
5
6
7
class Site { 
name():void {
console.log("Runoob")
}
}
var obj = new Site();
obj.name();

以上实例定义了一个类 Site,该类有一个方法 name(),该方法在终端上输出字符串 Runoob。

new 关键字创建类的对象,该对象调用方法 name()。

编译后生成的 JavaScript 代码如下:

1
2
3
4
5
6
7
8
9
10
var Site = /** @class */ (function () {
function Site() {
}
Site.prototype.name = function () {
console.log("Runoob");
};
return Site;
}());
var obj = new Site();
obj.name();

执行以上 JavaScript 代码,输出结果如下:

1
Runoob

TypeScript 基础类型

TypeScript 包含的数据类型如下表:

1722093566892
1722093591214

G#### Null 和 Undefined

null

在 JavaScript 中 null 表示 "什么都没有"。

null是一个只有一个值的特殊类型。表示一个空对象引用。

用 typeof 检测 null 返回是 object。

undefined

在 JavaScript 中, undefined 是一个没有设置值的变量。

typeof 一个没有值的变量会返回 undefined。

Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined。而在TypeScript中启用严格的空校验(--strictNullChecks)特性,就可以使得null 和 undefined 只能被赋值给 void 或本身对应的类型,示例代码如下:

1
2
3
4
5
// 启用 --strictNullChecks
let x: number;
x =1;// 编译正确
x =undefined;// 编译错误
x =null;// 编译错误

上面的例子中变量 x 只能是数字类型。如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型,示例代码如下:

1
2
3
4
5
// 启用 --strictNullChecks
let x: number |null|undefined;
x =1;// 编译正确
x =undefined;// 编译正确
x =null;// 编译正确

更多内容可以查看:JavaScript typeof, null, 和 undefined

never 类型

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环),示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let x: never;
let y: number;

// 编译错误,数字类型不能转为 never 类型
x =123;

// 运行正确,never 类型可以赋值给 never类型
x =(()=>{thrownewError('exception')})();

// 运行正确,never 类型可以赋值给 数字类型
y =(()=>{thrownewError('exception')})();

// 返回值为 never 的函数可以是抛出异常的情况
function error(message:string): never {
thrownewError(message);
}

// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {
while(true){}
}

TypeScript 变量声明

声明变量的类型及初始值:

1
var[变量名]:[类型]=值;

例如:

1
var uname:string="Runoob";

声明变量的类型,但没有初始值,变量值会设置为 undefined:

1
var[变量名]:[类型];

例如:

1
var uname:string;

声明变量并初始值,但不设置类型,该变量可以是任意类型:

1
var[变量名]=值;

例如:

1
var uname ="Runoob";

声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:

1
var[变量名];

例如:

1
var uname;

类型断言(Type Assertion)

类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。

语法格式:

1
<类型>值

或:

1
值 as 类型

实例

1
2
3
var str = '1' 
var str2:number = <number> <any> str //str、str2 是 string 类型
console.log(str2)

TypeScript 条件语句

1
2
3
4
if(boolean_expression){
# 在布尔表达式 boolean_expression 为 true 执行
}

1
2
3
4
5
6
if(boolean_expression){
# 在布尔表达式 boolean_expression 为 true 执行
}else{
# 在布尔表达式 boolean_expression 为 false 执行
}

1
2
3
4
5
6
7
8
9
10
if(boolean_expression 1) {
# 在布尔表达式 boolean_expression 1 为 true 执行
} else if( boolean_expression 2) {
# 在布尔表达式 boolean_expression 2 为 true 执行
} else if( boolean_expression 3) {
# 在布尔表达式 boolean_expression 3 为 true 执行
} else {
# 布尔表达式的条件都为 false 时执行
}

1
2
3
4
5
6
7
8
9
10
11
12
switch(expression){
case constant-expression :
statement(s);
break; /* 可选的 */
case constant-expression :
statement(s);
break; /* 可选的 */

/* 您可以有任意数量的 case 语句 */
default : /* 可选的 */
statement(s);
}

TypeScript 循环

for 循环

1
2
3
4
for ( init; condition; increment ){
statement(s);
}

1
2
3
4
5
6
7
8
var num:number = 5; 
var i:number;
var factorial = 1;

for(i = num;i>=1;i--) {
factorial *= i;
}
console.log(factorial)

for...in 循环

1
2
3
4
for (var val in list) { 
//语句
}

for…of 、forEach、every 和 some 循环

for...of 循环

for...of 语句创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach() ,并支持新的迭代协议。for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。

1
2
3
4
5
let someArray = [1, "string", false];

for (let entry of someArray) {
console.log(entry); // 1, "string", false
}

forEach 循环

forEach、every 和 some 是 JavaScript 的循环语法,TypeScript 作为 JavaScript 的语法超集,当然默认也是支持的。

因为 forEach 在 iteration 中是无法返回的,所以可以使用 every 和 some 来取代 forEach。

1
2
3
4
5
6
let list = [4, 5, 6];
list.forEach((val, idx, array) => {
// val: 当前值
// idx:当前index
// array: Array
});

every 循环

1
2
3
4
5
6
7
8
let list = [4, 5, 6];
list.every((val, idx, array) => {
// val: 当前值
// idx:当前index
// array: Array
return true; // Continues
// Return false will quit the iteration
});

while 循环

1
2
3
4
5
while(condition)
{
statement(s);
}

do...while 循环

1
2
3
4
5
do
{
statement(s);
}while( condition );

TypeScript 函数

1
2
3
4
5
function function_name()
{
// 执行代码
}

函数返回值

1
2
3
4
5
function function_name():return_type { 
// 语句
return value;
}

示例:

1
2
3
4
5
6
7
8
9
10
11
12
// 函数定义
function greet():string { // 返回一个字符串
return "Hello World"
}

function caller() {
var msg = greet() // 调用 greet() 函数
console.log(msg)
}

// 调用函数
caller()

带参数函数

1
2
3
function func_name( param1 [:datatype], param2 [:datatype]) {   
}

  • param1、param2 为参数名。

  • datatype 为参数类型。 示例:

    1
    2
    3
    4
    function add(x: number, y: number): number {
    return x + y;
    }
    console.log(add(1,2))

可选参数和默认参数

可选参数

在 TypeScript 函数里,如果我们定义了参数,则我们必须传入这些参数,除非将这些参数设置为可选,可选参数使用问号标识 ?

1
2
3
4
5
6
7
8
9
10
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName;
}

let result1 = buildName("Bob"); // 正确
let result2 = buildName("Bob", "Adams", "Sr."); // 错误,参数太多了
let result3 = buildName("Bob", "Adams"); // 正确

默认参数

我们也可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数,语法格式为:

1
2
function function_name(param1[:type],param2[:type] = default_value) { 
}

示例:

1
2
3
4
5
6
function calculate_discount(price:number,rate:number = 0.50) { 
var discount = price * rate;
console.log("计算结果: ",discount);
}
calculate_discount(1000)
calculate_discount(1000,0.30)

剩余参数

有一种情况,我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义。

剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。

1
2
3
4
5
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

函数的最后一个命名参数 restOfName 以 ... 为前缀,它将成为一个由剩余参数组成的数组,索引值从0(包括)到 restOfName.length(不包括)。

1
2
3
4
5
6
7
8
9
10
11
function addNumbers(...nums:number[]) {  
var i;
var sum:number = 0;

for(i = 0;i<nums.length;i++) {
sum = sum + nums[i];
}
console.log("和为:",sum)
}
addNumbers(1,2,3)
addNumbers(10,10,10,10,10)

匿名函数

匿名函数是一个没有函数名的函数。

匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。

我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。

语法格式如下:

1
var res = function( [arguments] ) { ... }

示例:

1
2
3
4
var msg = function() { 
return "hello world";
}
console.log(msg())

带参数匿名函数:

1
2
3
4
var res = function(a:number,b:number) { 
return a*b;
};
console.log(res(12,2))

匿名函数自调用

匿名函数自调用在函数后使用 () 即可:

1
2
3
4
(function () { 
var x = "Hello!!";
console.log(x)
})()

构造函数

TypeScript 也支持使用 JavaScript 内置的构造函数 Function() 来定义函数:

语法格式如下:

1
var res =newFunction([arg1[, arg2[,...argN]],] functionBody)

参数说明:

  • arg1, arg2, ... argN :参数列表。
  • functionBody :一个含有包括函数定义的 JavaScript 语句的字符串。
1
2
3
var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3);
console.log(x);

Lambda 函数

Lambda 函数也称之为箭头函数。

箭头函数表达式的语法比函数表达式更短。

形式一:

函数只有一行语句:

1
([param1, param2,…param n])=>statement;

实例

以下实例声明了 lambda 表达式函数,函数返回两个数的和:

1
2
var foo = (x:number)=>10 + x 
console.log(foo(100)) //输出结果为 110

形式二:

1
2
3
4
( [param1, param2,…param n] )=> {

// 代码块
}

示例:

1
2
3
4
5
var foo = (x:number)=> {  
x = 10 + x
console.log(x)
}
foo(100)

形式二.1:

单个参数 () 是可选的:

1
2
3
4
var display = x => { 
console.log("输出为 "+x)
}
display(12)

形式二.2:

1
2
3
4
var disp =()=> { 
console.log("Function invoked");
}
disp();

函数重载

重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

参数类型不同:

1
2
function disp(string):void; 
function disp(number):void;

参数数量不同:

1
2
function disp(n1:number):void; 
function disp(x:number,y:number):void;

参数类型顺序不同:

1
2
function disp(n1:number,s1:string):void; 
function disp(s:string,n:number):void;

如果参数类型不同,则参数类型应设置为 any

参数数量不同你可以将不同的参数设置为可选。

示例:

1
2
3
4
5
6
7
8
9
function disp(s1:string):void; 
function disp(n1:number,s1:string):void;

function disp(x:any,y?:any):void {
console.log(x);
console.log(y);
}
disp("abc")
disp(1,"xyz");

TypeScript 联合类型

联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。

注意 :只能赋值指定的类型,如果赋值其它类型就会报错。

创建联合类型的语法格式如下:

1
Type1|Type2|Type3

实例

声明一个联合类型:

1
2
3
4
5
var val:string|number 
val = 12
console.log("数字为 "+ val)
val = "Runoob"
console.log("字符串为 " + val)

结果:

1
2
数字为 12
字符串为 Runoob

也可以将联合类型作为函数参数使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
function disp(name:string|string[]) { 
if(typeof name == "string") {
console.log(name)
} else {
var i;
for(i = 0;i<name.length;i++) {
console.log(name[i])
}
}
}
disp("Runoob")
console.log("输出数组....")
disp(["Runoob","Google","Taobao","Facebook"])

联合类型数组

我们也可以将数组声明为联合类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var arr:number[]|string[]; 
var i:number;
arr = [1,2,4]
console.log("**数字数组**")

for(i = 0;i<arr.length;i++) {
console.log(arr[i])
}

arr = ["Runoob","Google","Taobao"]
console.log("**字符串数组**")

for(i = 0;i<arr.length;i++) {
console.log(arr[i])
}

TypeScript 接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

TypeScript 接口定义如下:

1
2
interface interface_name { 
}

实例

以下实例中,我们定义了一个接口 IPerson,接着定义了一个变量 customer,它的类型是 IPerson。

customer 实现了接口 IPerson 的属性和方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
interface IPerson { 
firstName:string,
lastName:string,
sayHi: ()=>string
}

var customer:IPerson = {
firstName:"Tom",
lastName:"Hanks",
sayHi: ():string =>{return "Hi there"}
}

console.log("Customer 对象 ")
console.log(customer.firstName)
console.log(customer.lastName)
console.log(customer.sayHi())

var employee:IPerson = {
firstName:"Jim",
lastName:"Blakes",
sayHi: ():string =>{return "Hello!!!"}
}

console.log("Employee 对象 ")
console.log(employee.firstName)
console.log(employee.lastName)

联合类型和接口

以下实例演示了如何在接口中使用联合类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
interface RunOptions { 
program:string;
commandline:string[]|string|(()=>string);
}

// commandline 是字符串
var options:RunOptions = {program:"test1",commandline:"Hello"};
console.log(options.commandline)

// commandline 是字符串数组
options = {program:"test1",commandline:["Hello","World"]};
console.log(options.commandline[0]);
console.log(options.commandline[1]);

// commandline 是一个函数表达式
options = {program:"test1",commandline:()=>{return "**Hello World**";}};

var fn:any = options.commandline;
console.log(fn());

接口和数组

接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。

设置元素为字符串类型:

1
2
3
4
5
6
7
8
interface namelist { 
[index:number]:string
}

// 类型一致,正确
var list2:namelist = ["Google","Runoob","Taobao"]
// 错误元素 1 不是 string 类型
// var list2:namelist = ["Runoob",1,"Taobao"]

接口继承

接口继承就是说接口可以通过其他接口来扩展自己。

Typescript 允许接口继承多个接口。

继承使用关键字 extends

单接口继承语法格式:

1
Child_interface_nameextends super_interface_name

多接口继承语法格式:

1
Child_interface_nameextends super_interface1_name, super_interface2_name,…,super_interfaceN_name

继承的各个接口使用逗号 , 分隔。

单继承实例
1
2
3
4
5
6
7
8
9
10
11
12
13
interface Person { 
age:number
}

interface Musician extends Person {
instrument:string
}

var drummer = <Musician>{};
drummer.age = 27
drummer.instrument = "Drums"
console.log("年龄: "+drummer.age)
console.log("喜欢的乐器: "+drummer.instrument)
多继承实例
1
2
3
4
5
6
7
8
9
10
11
interface IParent1 { 
v1:number
}

interface IParent2 {
v2:number
}

interface Child extends IParent1, IParent2 { }
var Iobj:Child = { v1:12, v2:23}
console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2)

TypeScript 类

1
2
3
class class_name { 
// 类作用域
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Car { 
// 字段
engine:string;

// 构造函数
constructor(engine:string) {
this.engine = engine
}

// 方法
disp():void {
console.log("发动机为 : "+this.engine)
}
}

创建实例化对象

我们使用 new 关键字来实例化类的对象,语法格式如下:

1
var object_name =new class_name([ arguments ])

类实例化时会调用构造函数,例如:

1
var obj =newCar("Engine 1")

类中的字段属性和方法可以使用 . 号来访问:

1
2
3
4
5
// 访问属性
obj.field_name

// 访问方法
obj.function_name()

类的继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Shape { 
Area:number

constructor(a:number) {
this.Area = a
}
}

class Circle extends Shape {
disp():void {
console.log("圆的面积: "+this.Area)
}
}

var obj = new Circle(223);
obj.disp()

TypeScript 对象

对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等,如下实例:

1
2
3
4
5
6
7
8
var object_name = { 
key1: "value1", // 标量
key2: "value",
key3: function() {
// 函数
},
key4:["content1", "content2"] //集合
}

TypeScript 类型模板

1
2
3
4
5
6
7
8
9
var sites = {
site1: "Runoob",
site2: "Google",
sayHello: function () { } // 类型模板
};
sites.sayHello = function () {
console.log("hello " + sites.site1);
};
sites.sayHello();

鸭子类型(Duck Typing)

鸭子类型(英语:duck typing)是动态类型的一种风格,是多态(polymorphism)的一种形式。

在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。

可以这样表述:

"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"

在鸭子类型中,关注点在于对象的行为能做什么,而不是关注对象所属的类型。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface IPoint { 
x:number
y:number
}
function addPoints(p1:IPoint,p2:IPoint):IPoint {
var x = p1.x + p2.x
var y = p1.y + p2.y
return {x:x,y:y}
}

// 正确
var newPoint = addPoints({x:3,y:4},{x:5,y:1})

// 错误
var newPoint2 = addPoints({x:1},{x:4,y:3})

TypeScript 命名空间

1
2
3
4
namespace SomeNameSpaceName { 
export interface ISomeInterfaceName { }
export class SomeClassName { }
}

以上定义了一个命名空间 SomeNameSpaceName,如果我们需要在外部可以调用 SomeNameSpaceName 中的类和接口,则需要在类和接口添加 export 关键字。

要在另外一个命名空间调用语法格式为:

1
SomeNameSpaceName.SomeClassName;

如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:

1
/// <reference path = "SomeFileName.ts" />

以下实例演示了命名空间的使用,定义在不同文件中:

IShape.ts 文件代码:

1
2
3
4
5
namespace Drawing { 
export interface IShape {
draw();
}
}

Circle.ts 文件代码:

1
2
3
4
5
6
7
8
/// <reference path = "IShape.ts" /> 
namespace Drawing {
export class Circle implements IShape {
public draw() {
console.log("Circle is drawn");
}
}
}

Triangle.ts 文件代码:

1
2
3
4
5
6
7
8
/// <reference path = "IShape.ts" /> 
namespace Drawing {
export class Triangle implements IShape {
public draw() {
console.log("Triangle is drawn");
}
}
}

TestShape.ts 文件代码:

1
2
3
4
5
6
7
8
/// <reference path = "IShape.ts" />   
/// <reference path = "Circle.ts" />
/// <reference path = "Triangle.ts" />
function drawAllShapes(shape:Drawing.IShape) {
shape.draw();
}
drawAllShapes(new Drawing.Circle());
drawAllShapes(new Drawing.Triangle());

使用 tsc 命令编译以上代码:

1
tsc --out app.js TestShape.ts  

嵌套命名空间

命名空间支持嵌套,即你可以将命名空间定义在另外一个命名空间里头。

1
2
3
4
5
namespace namespace_name1 { 
export namespace namespace_name2 {
export class class_name { }
}
}

成员的访问使用点号 . 来实现,如下实例:

Invoice.ts 文件代码:

1
2
3
4
5
6
7
8
9
namespace Runoob { 
export namespace invoiceApp {
export class Invoice {
public calculateDiscount(price: number) {
return price * .40;
}
}
}
}

InvoiceTest.ts 文件代码:

1
2
3
/// <reference path = "Invoice.ts" />
var invoice = new Runoob.invoiceApp.Invoice();
console.log(invoice.calculateDiscount(500));

使用 tsc 命令编译以上代码:

1
tsc --out app.js InvoiceTest.ts

TypeScript 模块

TypeScript 模块的设计理念是可以更换的组织代码。

模块是在其自身的作用域里执行,并不是在全局作用域,这意味着定义在模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。

两个模块之间的关系是通过在文件级别上使用 import 和 export 建立的。

模块使用模块加载器去导入其它的模块。 在运行时,模块加载器的作用是在执行此模块代码前去查找并执行这个模块的所有依赖。 大家最熟知的JavaScript模块加载器是服务于 Node.js 的 CommonJS 和服务于 Web 应用的 Require.js。

此外还有有 SystemJs 和 Webpack。

模块导出使用关键字 export 关键字,语法格式如下:

1
2
3
4
// 文件名 : SomeInterface.ts 
export interface SomeInterface {
// 代码部分
}

要在另外一个文件使用该模块就需要使用 import 关键字来导入:

1
import someInterfaceRef = require("./SomeInterface");

示例:

IShape.ts 文件代码:

1
2
3
4
/// <reference path = "IShape.ts" /> 
export interface IShape {
draw();
}

Circle.ts 文件代码:

1
2
3
4
5
6
import shape = require("./IShape"); 
export class Circle implements shape.IShape {
public draw() {
console.log("Cirlce is drawn (external module)");
}
}

Triangle.ts 文件代码:

1
2
3
4
5
6
import shape = require("./IShape"); 
export class Triangle implements shape.IShape {
public draw() {
console.log("Triangle is drawn (external module)");
}
}

TestShape.ts 文件代码:

1
2
3
4
5
6
7
8
9
10
import shape = require("./IShape"); 
import circle = require("./Circle");
import triangle = require("./Triangle");

function drawAllShapes(shapeToDraw: shape.IShape) {
shapeToDraw.draw();
}

drawAllShapes(new circle.Circle());
drawAllShapes(new triangle.Triangle());

使用 tsc 命令编译以上代码(AMD):

1
tsc --module amd TestShape.ts 

得到以下 JavaScript 代码:

IShape.js 文件代码:

1
2
define(["require", "exports"], function (require, exports) {
});

Circle.js 文件代码:

1
2
3
4
5
6
7
8
9
10
11
define(["require", "exports"], function (require, exports) {
var Circle = (function () {
function Circle() {
}
Circle.prototype.draw = function () {
console.log("Cirlce is drawn (external module)");
};
return Circle;
})();
exports.Circle = Circle;
});

Triangle.js 文件代码:

1
2
3
4
5
6
7
8
9
10
11
define(["require", "exports"], function (require, exports) {
var Triangle = (function () {
function Triangle() {
}
Triangle.prototype.draw = function () {
console.log("Triangle is drawn (external module)");
};
return Triangle;
})();
exports.Triangle = Triangle;
});

TestShape.js 文件代码:

1
2
3
4
5
6
7
8
9
define(["require", "exports", "./Circle", "./Triangle"], 
function (require, exports, circle, triangle) {

function drawAllShapes(shapeToDraw) {
shapeToDraw.draw();
}
drawAllShapes(new circle.Circle());
drawAllShapes(new triangle.Triangle());
});

使用 tsc 命令编译以上代码(Commonjs):

1
tsc --module commonjs TestShape.ts

得到以下 JavaScript 代码:

Circle.js 文件代码:

1
2
3
4
5
6
7
8
9
10
var Circle = (function () {
function Circle() {
}
Circle.prototype.draw = function () {
console.log("Cirlce is drawn");
};
return Circle;
})();

exports.Circle = Circle;

Triangle.js 文件代码:

1
2
3
4
5
6
7
8
9
var Triangle = (function () {
function Triangle() {
}
Triangle.prototype.draw = function () {
console.log("Triangle is drawn (external module)");
};
return Triangle;
})();
exports.Triangle = Triangle;

TestShape.js 文件代码:

1
2
3
4
5
6
7
8
var circle = require("./Circle");
var triangle = require("./Triangle");

function drawAllShapes(shapeToDraw) {
shapeToDraw.draw();
}
drawAllShapes(new circle.Circle());
drawAllShapes(new triangle.Triangle());

输出结果为:

1
2
Cirlceis drawn (external module)
Triangleis drawn (external module)

TypeScript 声明文件

TypeScript 作为 JavaScript 的超集,在开发过程中不可避免要引用其他第三方的 JavaScript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用TypeScript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 JavaScript 库和模块信息的声明文件。通过引用这个声明文件,就可以借用 TypeScript 的各种特性来使用库文件了。

假如我们想使用第三方库,比如 jQuery,我们通常这样获取一个 id 是 foo 的元素:

1
2
3
$('#foo');
// 或
jQuery('#foo');

但是在 TypeScript 中,我们并不知道 $ 或 jQuery 是什么东西:

1
2
3
jQuery('#foo');

// index.ts(1,1): error TS2304: Cannot find name 'jQuery'.

这时,我们需要使用 declare 关键字来定义它的类型,帮助 TypeScript 判断我们传入的参数类型对不对:

1
2
3
declare var jQuery:(selector:string)=> any;

jQuery('#foo');

declare 定义的类型只会用于编译时的检查,编译结果中会被删除。

上例的编译结果是:

1
jQuery('#foo');

声明文件

声明文件以 .d.ts 为后缀,例如:

1
runoob.d.ts

声明文件或模块的语法格式如下:

1
2
declare module Module_Name {
}

TypeScript 引入声明文件语法格式:

1
/// <reference path = " runoob.d.ts" />

当然,很多流行的第三方库的声明文件不需要我们定义了,比如 jQuery 已经有人帮我们定义好了:jQuery in DefinitelyTyped

实例

以下定义一个第三方库来演示:

CalcThirdPartyJsLib.js 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var Runoob;  
(function(Runoob) {
var Calc = (function () {
function Calc() {
}
})
Calc.prototype.doSum = function (limit) {
var sum = 0;

for (var i = 0; i <= limit; i++) {
sum = sum + i;
}
return sum;
}
Runoob.Calc = Calc;
return Calc;
})(Runoob || (Runoob = {}));
var test = new Runoob.Calc();

如果我们想在 TypeScript 中引用上面的代码,则需要设置声明文件 Calc.d.ts,代码如下:

Calc.d.ts 文件代码:

1
2
3
4
5
declare module Runoob { 
export class Calc {
doSum(limit:number) : number;
}
}

声明文件不包含实现,它只是类型声明,把声明文件加入到 TypeScript 中:

CalcTest.ts 文件代码:

1
2
3
4
5
declare module Runoob { 
export class Calc {
doSum(limit:number) : number;
}
}

声明文件不包含实现,它只是类型声明,把声明文件加入到 TypeScript 中:

CalcTest.ts 文件代码:

1
2
3
4
/// <reference path = "Calc.d.ts" /> 
var obj = new Runoob.Calc();
// obj.doSum("Hello"); // 编译错误
console.log(obj.doSum(10));

下面这行导致编译错误,因为我们需要传入数字参数:

1
obj.doSum("Hello");

使用 tsc 命令来编译以上代码文件:

1
tsc CalcTest.ts

生成的 JavaScript 代码如下:

CalcTest.js 文件代码:

1
2
3
4
/// <reference path = "Calc.d.ts" /> 
var obj = new Runoob.Calc();
//obj.doSum("Hello"); // 编译错误
console.log(obj.doSum(10));

最后我们编写一个 runoob.html 文件,引入 CalcTest.js 文件及第三方库 CalcThirdPartyJsLib.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<script src = "CalcThirdPartyJsLib.js"></script>
<script src = "CalcTest.js"></script>
</head>
<body>
<h1>声明文件测试</h1>
<p>菜鸟测试一下。</p>
</body>
</html>

浏览器打开该文件输出结果如下:

alt text

Openwrt防火墙配置

相关文档

ping ipv6:https://www.itdog.cn/ping tcping ipv6:https://www.itdog.cn/tcping_ipv6

获取局域网设备公网IPv6地址

1
INTERF=br-lan; SUFFIX="6dcb:1863:2bd1:b28f"; ip -6 addr show dev $INTERF | awk '/inet6/ && !/fe80::|deprecated/ {print $2}' | cut -d':' -f1-4 | sed "s/$/:$SUFFIX/"

用来放在这里,注意SUFFIX是ipv6地址的后缀

1722594617806

防火墙配置说明

在默认情况下,openwrt会帮我们创建两个区域,绿色的lan区域和红色的wan区域,我们家里的局域网设备都接入到了lan区域,而wan区域连接的是光猫,光猫后面是整个互联网,你可以想像成互联网上所有的网络设备全都接入了wan区域,包括你连接了运营商5G网络的手机

1722591112251

默认配置下,lan区域的数据允许转发给wan区域,也就是局域网的设备可以将数据发送到互联网,

1722591180663

wan区域禁止转发给任何区域,当然也包括了lan区域,也就是你在公网的手机禁止访问你家里有公网ip的电脑

1722591161437

另外每个区域还有对应的入站和出站设置,这里的入站和出站是从路由器的角度来说的,访问路由器本身的数据就是入站数据,路由器主动访问别人就是出站数据

lan区域的入站设置为接受,也就是在lan区域里的设备可以访问路由器本身,比如当前这个路由器的web管理网页就是访问路由器本身,

1722591257701

而wan区域的入站设置为拒绝,也就是wan区域的手机不能访问这个路由器的web管理网页

1722591272910

出站在wan和lan区域都接受,也就是路由器本身可以访问lan区域里的电脑,也可以访问wan区域的互联网,当然手机这边的话也有运营商的防火墙对你的数据包进行拦截,

1722591310885

这里还有一个转发,和前面区域之间的转发不同,这里的转发表示区域内的转发,

1722591415480

lan区域设置为接受,表示lan区域内不同网段(注意是不同网段的设备之间可以互访,比如192.168.2.2可以与192.168.3.2互访,不过大部分家庭的内网都只有一个网段,所以一般用不到注意相同网段的设备之间并不通过路由转发,而是直接通过交换机(注意是交换机)转发,所以如果区域内的转发改成拒绝的话也不影响同网段的192.168.2.2和192.168.2.3互访,具体可以回看第一期的家庭网络速通有详细的解释,

1722591538716

最后上面还有默认出入站的配置项,只有你的设备没有设置防火墙区域,也就是既不在lan区域也不在wan区域才会使用这里的默认配置,普通用户没这个需求就不展开讲了

1722591608073

有了这个基本认识,现在我们回过头来看看为什么公网可以ping通内网的电脑,按照刚才的讲解,公网访问电脑的数据包来到路由器,需要从wan区域转发到lan区域的电脑,但我们的防火墙设置了wan区域禁止转发到任何区域,数据包会被丢弃,按理来说应该无法ping通

1722591727359

如果只看当前页面的配置,确实不应该ping通,但openwrt在此基础上单独设置了一些例外规则,来到通信规则,这些都是为了保证openwrt能正常运行所自带的例外规则,优先级比主界面的规则要高,虽然主界面禁止了wan区域到lan区域的转发,但这里有一条规则,如果wan区域发过来的是icmpv6数据包,不管目标是哪个区域,都接受转发,

1722591772447
1722591830206

而icmp里包含了ping规则,所以公网ping内网的电脑命中了这条规则,于是防火墙接受并转发了数据包到lan区域的电脑,这也是为什么公网可以直接ping通内网设备的原因,假设我取消启用这条规则,再重新ping,此时没有针对icmp的例外规则,于是会按照主界面的防火墙策略拒绝转发wan区域过来的数据包,也就无法ping通了

1722591906876

路由器端口转发原理

端口转发实际上就是做DNAT,而做过DNAT的数据包会被防火墙放行,可以在状态下的防火墙看到相关的规则,比如刚才设置20000端口转发到80端口的规则

1722592698316

input就是访问路由器本身的规则,

1722592737437

如果是从wan区域发过来的数据,就进入input_wan处理,input_wan中可以看到通信规则中设置的例外规则,

1722592775841
1722592804589

其中有一条是如果数据包做过DNAT,就接受数据包,所以做了端口转发之后数据包可以访问路由器。

1722592830758

从这些规则中可以发现防火墙能干很多复杂的事,不只是单纯的接收和拦截数据包,你如果想深入了解请自行查阅iptables和nftables以及Netfilter相关资料

在openclash那期中尝试讲过iptables,发现这玩意根本没法用接地气的方式讲,太晦涩

1722592921537

ddns内网无法通过域名访问的问题

这里有个需要注意的点,你如果用局域网里的电脑访问20000端口是不通的,不过可以直接用80端口访问,因为我这台电脑不在wan区域,而是lan区域,所以没有命中端口转发规则,(注意这里域名对应的ipv6地址是路由器,所以如果要访问局域网其他设备,就做了端口转发)

‘如果你非要局域网也能使用20000端口访问,那么再添加一条lan区域的端口转发规则,将源区域改成lan,其他按相同的设置方法, 保存之后就可以在内网设备使用20000端口访问路由器了,

1722593242536
1722593281667

另外如果是ipv4做端口转发导致内网设备无法通过公网ip访问路由器的话,是由于NAT环境下的非对称路由导致的,旁路由那期讲过非对称路由会导致流量失效的问题,要通过nat反射解决,这里就不展开讲了,遇到此问题的朋友请自行谷歌搜索(之前遇到过,其实没必要解决,使用https+tls就没有问题了,直接http不加tls还是太危险了,有封宽带风险)

1722593340468

openwrt布置tls证书

别看,下面的太麻烦了,我是搞了个nginx proxy manager docker容器来设置证书

现在我们已经可以做到在公网随时通过域名访问家里的路由器了,但现在又会遇到一个问题,我们现在用的是http的方式访问路由器的管理页面,众所周知http是明文的,也就是说你从公网访问路由器的管理页面,在这里输入账号密码登陆后台,数据包经过公网传输,经过的所有路由器都知道你的密码是什么,非常的不safe,所以我们还需要为其配置tls证书,使用https的加密方式访问,来到软件包,安装uhttpd插件,选择这个luci插件,接着安装openssl插件,刷新页面,进入uhttpd插件,如果你嫌麻烦,并且对自身隐私安全没有那么高的追求,那么用自签证书就行了,简单方便,数据同样经过了加密,缺点是浏览器会报警显示不安全,并且无法防止中间人攻击,注意严格按照我的步骤操作,防止把网页搞崩了进不来了,点击删除旧证书和密钥,提示网页错误,不用管,鼠标焦点来到地址栏,按一下回车键重新访问网页,此时会多出一个自签证书和私钥,修改密钥长度为1024,点击保存并应用,不出意外的话现在就能通过443端口使用https方式访问了,但是443被运营商封禁了, 所以需要先进行端口转发, 将原来的80端口转发改成443,点击保存并应用,此时就可以在公网通过https的方式访问路由器的管理界面了,正如之前讲的,自签证书浏览器会报警,点击这里可以继续访问,这样就能通过https加密的方式访问了,在这里输入密码点击登陆,通信链路中间的路由器就看不到你的账号密码了。但由于自签证书无法防御中间人攻击,别人硬要看的话也是有办法的,所以建议用正规CA机构颁发的证书,即使麻烦一点,来到软件包,安装acme工具用于申请证书,先安装这个luci插件,接着安装这个dnsapi插件,刷新页面,进入acme插件,输入你的邮箱,将这两个示例配置删除,在这里添加一个,勾选启用,域名设置为刚才我们做ddns的域名,点击添加,以前可以直接让其自动将证书部署到uhttpd,现在没用了,需要手动配置,所以不用勾选,来到质询验证,选择dns,dns api可以在这个网址查看,支持很多dns商家,我们以cf为例,复制这个值,填入这里,凭证要填入zone id和token,token我们刚才做ddns已经获取到了,接下来获取zone id,来到当前域名的概述,这个区域id就是zone id,点击复制,粘贴到这里,将这两行分别添加到api凭证处,点击保存,最后点击保存并应用,这样就算是配置好了,也不是很麻烦,现在路由器已经在后台默默的帮我们申请证书了,我们要做的就是静静的等待三五分钟,然后来到uhttpd插件,修改证书路径,跟着视频演示找到/etc/acme目录,如果申请成功的话,这个路径下应该会有我们域名的文件夹,里面会有证书和私钥,证书选择fullchain,在同目录下找到私钥,这个key就是私钥,选中它,注意证书和私钥不要选错了,选错了会导致服务无法启动,从而进不来管理页面了,如果你没开启ssh访问那就凉凉了,点击保存并应用,这样就算是配置好了,如果你等待三五分钟之后,目录下还是没有出现证书和私钥,可能是申请证书的环节出现了错误,可以登录ssh,在命令行中输入这条指令查看acme的相关命令,使用restart重新运行证书申请,可以看到错误出现的原因,再按照相应的提示排错,我这里就不演示了,这样我们就可以在公网通过正规证书访问家里的路由器了,浏览器不会报警,同时能防御中间人攻击了。这样我们通过公网访问路由器就算是配置好了

从公网访问局域网里的设备

除了从公网访问路由器本身,还可以从公网访问局域网里的设备,假设我在这台电脑上的9000端口运行了nas服务,现在局域网内的电脑可以通过9000端口访问到这台电脑的nas服务,可以看到相应的访问日志,但是公网设备目前无法访问,比如我现在用手机的移动5G网络访问电脑ipv6地址的9000端口,显示拒绝访问,因为当前防火墙的规则拒绝wan区域转发数据到任何其他区域,所以没法访问,可以在这个网址进行tcping检测,输入ip和端口,可以看到全红,接着需要设置防火墙让公网用户可以访问,如果你的电脑开启了防火墙,需要先将电脑本身的防火墙关闭,除非你能弄明白多层防火墙怎么玩,否则就统一交给路由器的防火墙管理

回到路由器管理,由于每台设备都有公网ipv6地址,所以不需要和ipv4一样配置端口转发,直接添加放行规则即可,(我估计那台局域网设备也安装了ddns-go)

你当然可以直接在这里设置讲wan区域的数据允许转发lan区域,非常省事,但这样就相当于直接大门全开,黑阔进来屙屎屙尿的概率很高,所以不能这样做,要针对性的放行,

我们的目标是让公网用户能访问电脑的9000端口,那么只需添加对应的放行规则即可,其他保持禁止,进入防火墙里的通信规则,添加一条规则,随便给个备注,源区域选择wan,目标区域选择windows电脑所在的lan区域,目标ip填入电脑的ipv6地址,

1722594370171
1722594501871

但正如之前讲的,ipv6前缀会定期改变,如果直接在这里写死的话,ip地址改变之后就无法命中这条规则了,不过上期我们讲过,ipv6后64位是和网卡接口相关联的,一般不会发生改变,改变的都是前面64位前缀,所以我们可以利用反掩码的方式配置防火墙规则,来到最底下,在这里输入电脑的ipv6接口ID,也就是ipv6固定不变的后64位,注意不要用下面的临时ipv6地址,跟着视频演示填写,输入两个冒号,贴上刚才复制的接口id,然后输入对应数量的掩码位,

1722594290769
1722594337369

什么是掩码可以回看软路由第一期的家庭网络速通教程,意思是只要后64位匹配到了目标ip就命中这条规则,按回车键选中,目标端口就填写nas监听的9000,动作为接受,点击保存,这样就添加了一条防火墙规则,意思是wan口收到的数据包,如果是发给lan区域ipv6后64位是这个的9000端口,就接受数据包的转发,数据包将会被路由到这台windows电脑,由于我们直接关掉了这台电脑的防火墙,会接受所有数据包,所以9000端口将会直接收到这个数据包,于是就通了,点击保存并应用,再来尝试公网tcping,没有问题,使用手机在公网访问,同样没有问题,nas可以看到被访问的日志信息,是直接ipv6到ipv6的无NAT端到端访问

同样的,为了应对ipv6前缀变化,内网设备同样可以做ddns,目前只有一个ddns配置,是我们刚才设置给路由器用的,点击添加一个给nas用,还是用同一个顶级域名,所以token和刚才是一样的,关闭ipv4,ipv6选择通过命令获取,使用我给大家的这段指令,这些用到的信息我会放在视频下方的说明栏,需要修改两个地方,首先要设置nas所在的区域的ipv6前缀,这里设置的是br-lan,也就是lan区域的前缀,如果你的ipv6是中继模式,br-lan的接口没有ipv6地址,就填wan,脚本不一定适合所有人,总之你要想办法获取到nas正确的前缀,然后这里填写nas固定不变的后64位,将其全选复制,粘贴到这里,随便设置一个域名,点击保存,这里提示新增了域名解析,这样我们就可以通过winnas的域名从公网访问家里的nas设备了,你还可以给这个域名申请tls证书,开启https访问,如果你有很多需要开放的服务,还可以用nginx进行反代,这里就不再进行拓展了

最后防火墙主页还有一个NAT分载的选项,大家直接看视频感受一下区别吧,分载就是让已经建立好了连接的转发数据包不再经过防火墙各个hook点,可以提升转发效率

1722599238217

关闭分载:

1722599135411

软件分载:

1722599170374

硬件分载

1722599194560

,如果只是软件分载的话提升并不大,但如果你的路由设备支持硬件nat,同时openwrt支持的话,开启硬件流量分载之后可以大幅降低CPU的使用率提高转发性能,不过开启分载之后会导致一些流量控制类的工具失效,比如之前讲过的opengfw就不兼容,毕竟hook点都被跳过了,所以按需启用

Zerotier

参考视频:https://www.youtube.com/watch?v=pa0tkch3lss

https://my.zerotier.com/

各平台使用:

1722609174201

zerotier网络结构

1722647688143

linux安装zerotier

1、在线安装zerotier curl -s https://install.zerotier.com/ | sudo bash

2、添加开机自启

$ sudo systemctl enable zerotier-one.service

3、启动zerotier-one.service

$ sudo systemctl start zerotier-one.service

4、加入网络

$ sudo zerotier-cli join 363c67c55acba179

查看zerotier id和重新生成zerotier id

1722647569787

zerotier-cli peers

1722647814625

主路由安装zerotier

目前没有需求,不想搞

实现以nas为中介,让节点和它所处的局域网设备互访(算了,这个需要主路由设置路由规则,如果是主路由是硬路由的话,那没办法了,下面最后第4步有讲原因)

注意局域网nas的虚拟ip192.168.196.43

1722609649500

1、将nas所处的虚拟网段路由到nas道德zerotier虚拟网卡

1722609753399

2、nas上输入ip link查看nas的实际网卡和虚拟网卡

1722609866123

3、nas把物理网卡和虚拟网卡的ip伪装都开启:

1722609951904
1
2
3
4
5
6
iptables -I FORWARD -i eth0 -j ACCEPT#这条命令将在 FORWARD 链中插入一条规则,对于从 eth0 接口进入的数据包,采取 ACCEPT (接受)动作。这意味着允许从 eth0 接口进入的数据包进行转发。
iptables -I FORWARD -o eth0 -j ACCEPT #此命令在 FORWARD 链中插入一条规则,对于从其他接口转发并从 eth0 接口出去的数据包,采取 ACCEPT 动作,允许其通过。
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE #这条命令在 nat 表的 POSTROUTING 链中插入一条规则。当数据包从其他接口通过 eth0 接口出去时,执行 MASQUERADE (地址伪装)操作。这通常用于实现网络地址转换(NAT),使内网中的多个设备能够通过一个公共的 eth0 接口访问外部网络。
iptables -I FORWARD -i zt6ntkyzbd -j ACCEPT
iptables -I FORWARD -o zt6ntkyzbd -j ACCEPT
iptables -t nat -I POSTROUTING -o zt6ntkyzbd -j MASQUERADE
1722610243745

4、主路由设置路由信息,将目标网段为192.168.196.0的网关设置为nas的局域网ip

1722610371591

由于硬路由到的路由配置一般是针对wan口来设置的,不能对lan口进行设置,所以放弃了

1722610881354

5、将上面的防火墙规则设置开机自启动

异地组建虚拟大局域网

1722610529555

注意要把两地局域网的网段错开,如下所示,其他没什么区别

1722610626044

全隧道模式(解决无法在校外访问校园网)

1722611210731

1、管理界面将默认路由设置为需要作为中转的那个设备的虚拟ip

1722611146947

2、在想要开启全隧道模式的设备上打开覆盖默认路由选项就好了(,linux系统需要通过命令)

1722611313846
1722611331043

linux系统需要输入下面的命令

1722611372187

注意:

如果局域网的zerotier设备是主路由的话,需要设置主路由防火墙规则

加上转发到wan区域

1722611502977

zerotier搭建控制器

控制器可以选择zeroui或者ztncui,这里使用比较简洁的zeroui做介绍。 首先,在服务器上安装好zerotier并启动,安装过程不详述。

1
2
3
4
5
6
# 安装Zerotier
curl -s https://install.zerotier.com | sudo bash
# 加入开机启动
systemctl enable zerotier-one
# 启动服务
systemctl start zerotier-one

为了数据方便管理和快捷搭建,使用docker运行控制器。安装docker-compose。新建一个你要保存数据的文件夹,比如/home/zero/,新建docker-compose.yaml。 /home/zero/docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version:"3"

services:
zero-ui:
image:dec0dos/zero-ui:latest
container_name:zero-ui
restart:unless-stopped
volumes:
- /var/lib/zerotier-one:/var/lib/zerotier-one
- ./data:/app/backend/data
environment:
- ZU_CONTROLLER_ENDPOINT=http://127.0.0.1:9993/
- ZU_SECURE_HEADERS=false
- ZU_DEFAULT_USERNAME=登录的用户名
- ZU_DEFAULT_PASSWORD=登录的密码
network_mode:"host"

这个镜像是支持armv7的

1722656156519

启动docker:

1
2
cd /home/zero/
docker-compose up -d

需要对外开放的防火墙端口:

作用 端口
zero-ui后台web TCP 4000

你可以对4000端口使用caddy或者nginx进行本地反代,加上https,如果你使用https请设置 ZU_SECURE_HEADERS=true(自动跳转https)。 登录后台管理地址:http://IP:4000 , zeroui的界面基本跟官方相似并且更简洁好看,不用多介绍就可以上手。 如果遇到无法访问或者启动的问题,可以查看一下日志:

1
docker-compose logs -f

搭建Moon

搭建Moon官方也有指南,这里简单总结一下。 运行Moon节点模板工具,看一下模板长什么样: zerotier-idtool initmoon /var/lib/zerotier-one/identity.public 可以看到输出了一个类似一下内容的模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "deadbeef00:0:34031483094...",
"stableEndpoints": []
}
],
"signingKey": "b324d84cec708d1b51d5ac0ce3f54e58d8944b5...",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220de...",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5c0b52632...",
"worldType": "moon"
}

其中,id就是节点的id,这个在zerotier客户端右键或者运行 zerotier-cli info都可以看到,我们要关心的是roots下面的内容。identity其实就是/var/lib/zerotier-one/identity.public这个文件里面的内容,是这个节点的唯一标识,而stableEndpoints就是需要我们补充的东西,里面填服务器的IPV4或者IPV6地址。 导出Moon模板: zerotier-idtool initmoon /var/lib/zerotier-one/identity.public > /tmp/moon.json 编辑 moon.json里面的 stableEndpoints: (/9993是表示zerotier默认通信端口UDP:9993)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": "dkisera650",
"objtype": "world",
"roots": [
{
"identity": "keadbeef00:0:34031483094...",
"stableEndpoints": [ "103.1.2.3/9993","2001:d234:d234::9993" ]
}
],
"signingKey": "b324d84cec708d1b51d5ac0ce3f54e58d8944b5...",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220de...",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5c0b52632...",
"worldType": "moon"
}

如果你只有IPV4或者只有IPV6,填一个即可,格式如下:

1
2
"stableEndpoints": [ "103.1.2.3/9993" ]
"stableEndpoints": [ "2001:d234:d234::9993" ]

而如果你要搭建多个Moon节点,也不需要一个个去编辑的,你只需要编辑其中一个生成的Moon模板,修改roots的内容即可。比如上面的模板是节点A生成的,你可以在节点B、节点C…运行一下 zerotier-idtool initmoon /var/lib/zerotier-one/identity.public,得到identity那一段,复制出来,然后一段一段插进去节点A的模板里面去就好了,格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"id": "dkisera650",
"objtype": "world",
"roots": [
{
"identity": "keadbeef00:0:34031483094...",
"stableEndpoints": [ "103.1.2.3/9993","2001:d234:d234::9993" ]
},
{
"identity": "osgmebeef00:0:688541064...",
"stableEndpoints": [ "133.7.2.8/9993"]
},
{
"identity": "pdbnkjayef00:0:65231488041...",
"stableEndpoints": ["2001:8888:d234::9993" ]
}
],
"signingKey": "b324d84cec708d1b51d5ac0ce3f54e58d8944b5...",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220de...",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5c0b52632...",
"worldType": "moon"
}

当你把Moon.json编辑好之后,下一步是对Moon.json签名:

1
zerotier-idtool genmoon /tmp/moon.json

运行后会在当前目录生成0000xxxxxxxxxx.moon的文件,把这个文件放到每一个moon节点下面运行:

1
2
3
4
5
6
# 创建moons.d文件夹
mkdir /var/lib/zerotier-one/moons.d/
# 放入moon文件
cp 0000xxxxxxxxxx.moon /var/lib/zerotier-one/moons.d/
# 重启zerotier服务,应用moon
systemctl restart zerotier-one

moon.json含有你节点的密钥信息,不要忘了删除:rm /tmp/moon.json 需要对外开放的防火墙端口:

作用 端口
zerotier根通信 UDP 9993

客户端应用Moon

  • 标准Linux客户端:如Ubuntu、centos等有官方包的系统,应用方法其实和搭建Moon节点的最后一步差不多一样,为了方便,其实你可以把自己的moon文件放在web上,写一个脚本就可以一键应用、加入网络节点一气呵成:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建moons.d文件夹
mkdir /var/lib/zerotier-one/moons.d/
# 下载moon文件
wget https://example.com/00000000axxxx.moon -O /var/lib/zerotier-one/moons.d/00000000axxxx.moon
# 重启zerotier服务,应用moon
systemctl restart zerotier-one
# 加入网络节点
zerotier-cli join e0axxxxxx2
# 查看peers,确认moon在跑
zerotier-cli peers
# 查看本机信息
zerotier-cli info
# 查看加入的网络
zerotier-cli listnetworks

把脚本保存成moon.sh扔在web上,你就可以curl -s http://example.com/moon.sh | sh一键执行啦~

  • Windows客户端(管理员运行CMD):
1
2
3
4
5
6
7
8
9
10
11
12
cmd
@echo off
echo 停止zerotier服务
net stop ZeroTierOneService
echo 创建moons.d文件夹
mkdir C:\ProgramData\ZeroTier\One\moons.d
echo 下载moon文件
curl https://example.com/00000000aaxxxxb.moon -o C:\ProgramData\ZeroTier\One\moons.d\00000000aa562e4b.moon
echo 启动zerotier服务
net start ZeroTierOneService
echo 加入网络节点
"C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat" join xxxxxxxxx
  • 安卓:https://github.com/kaaass/ZerotierFix
  • IOS:目前没有
  • 其他系统,参考下一节在容器中运行zerotier
  • 如何确认Moon节点正常跑了呢?zerotier-cli peers命令可以观察: Windows:"C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat" peers
1
2
3
4
5
6
7
8
9
10
11
12
# zerotier-cli peers
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
00aa562e2b 1.10.3 MOON 264 DIRECT 5058 5058 183.245.71.24/22800
2bca99064f 1.10.1 LEAF 230 DIRECT 10313 10313 110.4.0.3/9993
5f1e2945aa 1.10.3 LEAF 5 DIRECT 499 499 221.11.201.11/9993
67603675ab 1.10.3 MOON 17 DIRECT 268 13268 2001:3b6:32b0:9390:d9ce
62f865ae71 - PLANET 384 DIRECT 20777 185516 50.7.252.138/9993
778cde7190 - PLANET 213 DIRECT 20777 185682 103.195.103.66/9993
cafe04eba9 - PLANET 266 DIRECT 20777 185632 84.17.53.155/9993
cafe9efeb9 - PLANET 177 DIRECT 763 577 104.194.8.134/9993
62f865ae71 - PLANET 153 DIRECT 15921 105780 2001:49f0:d0db:2::2/9993

<Role>一列可以看到有MOON的字样,PLANET是官方服务器,LEAF是客户端,可以看到 <path>对应着你的MOON服务器IP,而 link一列表示中继还是直连,DIRECT就是直连,RELAY就是中继。

  • 小提示:如果加入网络之后在控制界面看不到新的客户端,或者你在控制界面上删除了客户端,你可以在客户端join之后手动在web上添加,方法是右键客户端复制到ID或者运行 zerotier-cli info得到id,然后在web界面的 Manually Add Member框里面粘贴点加号即可。

数据备份与迁移

对于控制器来说,其实只需要备份一个zeroui的 db.json数据文件就可以,按照教程,就在上面的/home/zero/data目录下,非常简单,这就是容器的方便! 对于根(也就是Moon)来说,把 /var/lib/zerotier-one/整个目录拷走就是了,非常简单。 根(Moon)挂了不要紧,还有官方的节点,但你的控制器的 db.json没了的话你的网络就失去控制了哦~!好在他只有一个文件,备份同步挺简单。