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 ({ clearScreen : false , server : { strictPort : true , }, envPrefix : ['vite_' , 'tauri_platform' , 'tauri_arch' , 'tauri_family' , 'tauri_platform_version' , 'tauri_platform_type' , 'tauri_debug' ], build : { target : process.env .tauri_platform === 'windows' ? 'chrome105' :'safari13' , minify :!process.env .tauri_debug ? 'esbuild' : false , 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
编译器的配置。
它具有以下几个重要作用:
指定编译选项 :例如设置编译的目标 JavaScript
版本("target"),决定是否生成源映射("sourceMap"),控制模块解析策略("module")等。
定义文件包含和排除规则 :通过 "include"
和 "exclude" 字段,确定哪些 TypeScript
文件应该被编译,哪些应该被排除。
启用严格类型检查 :可以通过 "strict"
等选项开启更严格的类型检查,提高代码质量和减少类型相关的错误。
路径别名配置 :与 Vite
配置中的路径别名结合使用,方便在代码中使用简洁的别名来引用文件路径。
指定库声明文件 :使用 "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
代码相关的特定配置选项。例如:
可能会有不同的模块解析策略(moduleResolution),以适应
Node.js 的模块加载机制。
可以指定特定的库(lib),比如与 Node.js
核心模块或特定的 Node.js 相关的库。
可能会调整一些类型检查的严格程度(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>中,具体步骤如下:
全局安装
vue-devtools:cnpm install -g @vue/devtools(若没有
cnpm,可使用
npm install -g @vue/devtools)。
在命令行中直接运行
vue-devtools,然后复制里面的代码。
打开项目中对应的
index.html文件(tauri+vite构建的项目在
src-tauri目录下)。
在 index.html文件的
<head>部分添加刚刚复制的代码并保存。添加代码后,窗口就会刷新,vue-devtools即可正常使用。
不同的 tauri项目可能会根据自身的需求和配置对
index.html进行不同的设置和使用。如果你在特定项目中有关于
index.html的更具体问题,可能需要参考该项目的文档、配置以及相关的开发指南来获取更准确的信息。另外,在修改
index.html之前,最好先了解修改可能带来的影响,以确保不会破坏项目的正常功能。
同时,如果你想清理
tauri项目编译出来的相关文件或缓存,可以参考以下步骤:
删除项目中的
node_modules文件夹,这将删除项目的大部分依赖模块。
删除 pnpm-lock.yaml文件(如果有)。
对于
tauri项目编译过程中生成的其他特定文件或目录,需要根据项目的配置和结构来确定其位置并进行手动删除。常见的编译输出可能会放在类似
dist、build或项目的特定输出目录中。
需注意,删除文件时要谨慎操作,确保你知道这些文件的用途并且确实不再需要它们,以免误删重要文件。如果使用了版本控制系统(如
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 命令时,通常会执行以下主要操作:
解析配置:首先,Vite 会读取项目中的 vite.config.ts
或其他配置文件(如
vite.config.js),获取项目的配置信息,包括入口文件、输出目录、插件配置、构建选项等。
模块解析:根据配置中的模块解析规则,解析项目中的模块依赖关系。
依赖预构建:对于一些常见的第三方模块(如 lodash
等),Vite 可能会进行预构建,将其转换为 ESM(ECMAScript
模块)格式,以提高在浏览器中的加载性能。
开发服务器启动:启动一个本地开发服务器,监听指定的端口。
处理请求:当浏览器发送请求获取模块时,Vite
根据请求的模块路径和类型,进行相应的处理。
对于 JavaScript/TypeScript
模块,直接进行实时编译和转换,并将结果返回给浏览器。
对于静态资源(如 CSS、图片等),直接返回相应的文件。
热模块替换(HMR):在开发过程中,如果检测到代码的修改,Vite
会自动进行热模块替换,只更新修改的模块,实现页面的实时更新,无需手动刷新页面,极大地提高了开发效率。
构建优化:如果是在生产环境中运行 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... [1m[33mwarning[0m[1m:[0m skipping duplicate package `app` found at `/Users/altnt/.cargo/git/checkouts/tauri-plugin-context-menu-2c3100763c3e1052/e2afd46/examples/vanilla/src-tauri` [1m[32m Compiling[0m libc v0.2.155 [1m[32m Compiling[0m proc-macro2 v1.0.86 [1m[32m Compiling[0m unicode-ident v1.0.12 [1m[32m Compiling[0m cfg-if v1.0.0 [1m[32m Compiling[0m serde v1.0.204 [1m[32m Compiling[0m autocfg v1.3.0 [1m[32m Compiling[0m once_cell v1.19.0 [1m[32m Compiling[0m memchr v2.7.4 [1m[36m Building[0m [ ] 0/502: proc-macro2(build.rs), cf... [K[1m[32m Compiling[0m version_check v0.9.4 [1m[36m Building[0m [ ] 1/502: proc-macro2(build.rs), au... [K[1m[32m Compiling[0m log v0.4.22 [1m[36m Building[0m [ ] 2/502: proc-macro2(build.rs), au... .......... [1m[36m Building[0m [=======================> ] 501/502: eco-paste(bin) [K[1m[32m Finished[0m `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.txt、filea.txt 等。
{}:用于表示字符组或多个模式。例如,*.{html,htm}
匹配所有扩展名为 .html 或 .htm
的文件;(a-c).txt 匹配文件名中单个字符为
a、b 或 c 且扩展名为
.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
匹配以 doc 或 docx
结尾的所有文件:*.(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 3.选择指定的conda虚拟环境
命令行调试
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 pdbdefmake_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)的区别在于,单步进入会进入当前行调用的函数内部并停在里面,而单步跳过会(几乎)全速执行完当前行调用的函数,并停在当前函数的下一行。
直接输入变量名称
还可以直接输入变量的名称查看变量的值
使用类的方法查看变量/类的信息(输入表达式)
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() a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)
上面的代码说明:
1 2 a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)
希望你现在对 Python
装饰器的工作原理有一个基本的理解。如果我们运行如下代码会存在一个问题:
1 2 print (a_function_requiring_decoration.__name__)
这并不是我们想要的!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__)
接下来学习装饰器的一些常用场景。
蓝本规范:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from functools import wrapsdef 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()) can_run = False print (func())
注意: @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 )
带参数的装饰器
(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) with open (logfile, 'a' ) as opened_file: opened_file.write(log_string + '\n' ) return func(*args, **kwargs) return wrapped_function return logging_decorator @logit() def myfunc1 (): pass myfunc1() @logit(logfile='func2.log' ) def myfunc2 (): pass myfunc2()
装饰器类
现在我们有了能用于正式环境的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) 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 ): 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 ): pass
从现在起,@email_logit 将会和 @logit
产生同样的效果,但是在打日志的基础上,还会多发送一封邮件给管理员。
其他场景
以下是一个简单的装饰器示例,用于计算函数的执行时间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import timedef 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.perimeter 和
rectangle.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 应用的核心特点包括:
组件化开发:将界面分解为独立的、可复用的组件,提高代码的可维护性和可扩展性。
虚拟 DOM:React 会创建一个虚拟的 DOM
树,在数据变化时,通过比较新旧虚拟 DOM 树的差异,然后高效地更新实际的
DOM,以优化性能。
声明式编程:开发者只需描述界面应该呈现的样子,而无需直接操作 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 组件渲染到具有 id 为 root
的 DOM 节点中。
当组件的状态或属性发生变化时,ReactDOM 会负责高效地更新
DOM,以反映这些变化,而无需手动操作 DOM
节点,从而提高了应用的性能和可维护性。
此外,ReactDOM 还提供了一些其他方法,如
unmountComponentAtNode
用于卸载已渲染的组件,以及一些与服务器端渲染相关的方法等。
总的来说,ReactDOM 是 React 与浏览器 DOM
进行交互的桥梁,使得开发者能够以声明式的方式构建和管理用户界面,并实现高效的视图更新。
1722076122387
typescript
JavaScript 与 TypeScript
的区别
TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的
JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript
通过类型注解提供编译时的静态类型检查。
TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript
代码进行编译。
第一个 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
的相关代码,以下是查看版本号:
然后我们新建一个 app.ts 的文件,代码如下:
1 2 var message :string = "Hello World" console .log (message)
通常我们使用 .ts 作为 TypeScript
代码文件的扩展名。
然后执行以下命令将 TypeScript 转换为 JavaScript 代码:
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 过程如下图:
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 = (function ( ) { function Site ( ) { } Site .prototype .name = function ( ) { console .log ("Runoob" ); }; return Site ; }()); var obj = new Site ();obj.name ();
执行以上 JavaScript 代码,输出结果如下:
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 let x : number ;x =1 ; x =undefined ; x =null ;
上面的例子中变量 x 只能是数字类型。如果一个类型可能出现 null 或
undefined, 可以用 | 来支持多种类型,示例代码如下:
1 2 3 4 5 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 ;x =123 ; x =(()=> {thrownewError ('exception' )})(); y =(()=> {thrownewError ('exception' )})(); function error (message:string ): never { thrownewError (message); } function loop ( ): never { while (true ){} }
TypeScript 变量声明
声明变量的类型及初始值:
例如:
1 var uname:string="Runoob";
声明变量的类型,但没有初始值,变量值会设置为 undefined:
例如:
声明变量并初始值,但不设置类型,该变量可以是任意类型:
例如:
声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为
undefined:
例如:
类型断言(Type Assertion)
类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。
语法格式:
或:
实例
1 2 3 var str = '1' var str2 :number = <number > <any > str 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 ))
形式二:
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 2 3 4 5 var val :string |number val = 12 console .log ("数字为 " + val) val = "Runoob" console .log ("字符串为 " + val)
结果:
也可以将联合类型作为函数参数使用:
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 ); } var options :RunOptions = {program :"test1" ,commandline :"Hello" }; console .log (options.commandline ) options = {program :"test1" ,commandline :["Hello" ,"World" ]}; console .log (options.commandline [0 ]); console .log (options.commandline [1 ]); 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" ]
接口继承
接口继承就是说接口可以通过其他接口来扩展自己。
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 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 namespace Drawing { export class Circle implements IShape { public draw ( ) { console .log ("Circle is drawn" ); } } }
Triangle.ts 文件代码:
1 2 3 4 5 6 7 8 namespace Drawing { export class Triangle implements IShape { public draw ( ) { console .log ("Triangle is drawn" ); } } }
TestShape.ts 文件代码:
1 2 3 4 5 6 7 8 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 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 export interface SomeInterface { }
要在另外一个文件使用该模块就需要使用 import
关键字来导入:
1 import someInterfaceRef = require ("./SomeInterface" );
示例:
IShape.ts 文件代码:
1 2 3 4 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 是什么东西:
这时,我们需要使用 declare 关键字来定义它的类型,帮助 TypeScript
判断我们传入的参数类型对不对:
1 2 3 declare var jQuery :(selector:string )=> any ;jQuery ('#foo' );
declare 定义的类型只会用于编译时的检查,编译结果中会被删除。
上例的编译结果是:
声明文件
声明文件以 .d.ts 为后缀,例如:
声明文件或模块的语法格式如下:
1 2 declare module Module _Name {}
TypeScript 引入声明文件语法格式:
当然,很多流行的第三方库的声明文件不需要我们定义了,比如 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 var obj = new Runoob .Calc (); console .log (obj.doSum (10 ));
下面这行导致编译错误,因为我们需要传入数字参数:
使用 tsc 命令来编译以上代码文件:
生成的 JavaScript 代码如下:
CalcTest.js 文件代码:
1 2 3 4 var obj = new Runoob .Calc ();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的界面基本跟官方相似并且更简洁好看,不用多介绍就可以上手。
如果遇到无法访问或者启动的问题,可以查看一下日志:
搭建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一键执行啦~
1 2 3 4 5 6 7 8 9 10 11 12 cmd @echo off echo 停止zerotier服务net stop ZeroTierOneServiceecho 创建moons.d文件夹mkdir C:\ProgramData\ZeroTier\One\moons.decho 下载moon文件curl https://example.com/00000000 aaxxxxb.moon -o C:\ProgramData\ZeroTier\One\moons.d\00000000 aa562e4b.moon echo 启动zerotier服务net start ZeroTierOneServiceecho 加入网络节点"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没了的话你的网络就失去控制了哦~!好在他只有一个文件,备份同步挺简单。