diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs new file mode 100644 index 0000000..812e548 --- /dev/null +++ b/.commitlintrc.cjs @@ -0,0 +1,100 @@ +// .commitlintrc.js +/** @type {import('cz-git').UserConfig} */ +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + // @see: https://commitlint.js.org/#/reference-rules + 'type-enum': [ + 2, + 'always', + ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'] + ] + }, + prompt: { + alias: { fd: 'docs: fix typos' }, + messages: { + type: "选择你要提交的类型 | Select the type of change that you're committing:", + scope: '选择一个提交范围(可选)| Denote the SCOPE of this change (optional):', + customScope: '请输入自定义的提交范围 | Denote the SCOPE of this change:', + subject: '填写简短精炼的变更描述 | Write a SHORT, IMPERATIVE tense description of the change:\n', + body: '填写更加详细的变更描述(可选)。使用 "|" 换行 | Provide a LONGER description of the change (optional). Use "|" to break new line:\n', + breaking: + '列举非兼容性重大的变更(可选)。使用 "|" 换行 | List any BREAKING CHANGES (optional). Use "|" to break new line:\n', + footerPrefixesSelect: + '选择关联issue前缀(可选)| Select the ISSUES type of changeList by this change (optional):', + customFooterPrefix: '输入自定义issue前缀 | Input ISSUES prefix:', + footer: '列举关联issue (可选) 例如: #31, #I3244 | List any ISSUES by this change. E.g.: #31, #34:\n', + confirmCommit: '是否提交或修改commit ? | Are you sure you want to proceed with the commit above?' + }, + types: [ + { value: 'feat', name: 'feat: 新增功能 | A new feature' }, + { value: 'fix', name: 'fix: 修复缺陷 | A bug fix' }, + { + value: 'docs', + name: 'docs: 文档更新 | Documentation only changes' + }, + { + value: 'style', + name: 'style: 代码格式 | Changes that do not affect the meaning of the code' + }, + { + value: 'refactor', + name: 'refactor: 代码重构 | A code change that neither fixes a bug nor adds a feature' + }, + { + value: 'perf', + name: 'perf: 性能提升 | A code change that improves performance' + }, + { + value: 'test', + name: 'test: 测试相关 | Adding missing tests or correcting existing tests' + }, + { + value: 'build', + name: 'build: 构建相关 | Changes that affect the build system or external dependencies' + }, + { + value: 'ci', + name: 'ci: 持续集成 | Changes to our CI configuration files and scripts' + }, + { value: 'revert', name: 'revert: 回退代码 | Revert to a commit' }, + { + value: 'chore', + name: 'chore: 其他修改 | Other changes that do not modify src or test files' + } + ], + useEmoji: false, + emojiAlign: 'center', + useAI: false, + aiNumber: 1, + themeColorCode: '', + scopes: [], + allowCustomScopes: true, + allowEmptyScopes: true, + customScopesAlign: 'bottom', + customScopesAlias: 'custom', + emptyScopesAlias: 'empty', + upperCaseSubject: false, + markBreakingChangeMode: false, + allowBreakingChanges: ['feat', 'fix'], + breaklineNumber: 100, + breaklineChar: '|', + skipQuestions: [], + issuePrefixes: [ + // 如果使用 gitee 作为开发管理 + { value: 'link', name: 'link: 链接 ISSUES 进行中' }, + { value: 'closed', name: 'closed: 标记 ISSUES 已完成' } + ], + customIssuePrefixAlign: 'top', + emptyIssuePrefixAlias: 'skip', + customIssuePrefixAlias: 'custom', + allowCustomIssuePrefix: true, + allowEmptyIssuePrefix: true, + confirmColorize: true, + scopeOverrides: undefined, + defaultBody: '', + defaultIssues: '', + defaultScope: '', + defaultSubject: '' + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..fd2bf70 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..2312dc5 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/.lintstagedrc b/.lintstagedrc new file mode 100644 index 0000000..b39a3d8 --- /dev/null +++ b/.lintstagedrc @@ -0,0 +1,21 @@ +{ + "lint-staged": { + "*.{ts,tsx}": [ + "prettier --write", + "eslint --fix", + "tsc --noEmit --pretty false --skipLibCheck", + "git add" + ], + "*.{json,js,jsx}": [ + "prettier --write", + "eslint --fix", + "git add" + ], + "*.vue": [ + "prettier --write", + "eslint --fix", + "vue-tsc --noEmit --skipLibCheck", + "git add" + ] + } +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..477ae12 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +/dist/* +.local +/node_modules/** + +**/*.svg +**/*.sh + +/public/* +stats.html diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..b7eb686 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,4 @@ +/dist/* +/public/* +public/* +stats.html diff --git a/.stylelintrc.cjs b/.stylelintrc.cjs new file mode 100644 index 0000000..4095486 --- /dev/null +++ b/.stylelintrc.cjs @@ -0,0 +1,40 @@ +// @see: https://stylelint.io + +module.exports = { + root: true, + // 继承某些已有的规则 + extends: [ + "stylelint-config-standard", // 配置 stylelint 拓展插件 + "stylelint-config-html/vue", // 配置 vue 中 template 样式格式化 + "stylelint-config-standard-scss", // 配置 stylelint scss 插件 + "stylelint-config-recommended-vue/scss", // 配置 vue 中 scss 样式格式化 + "stylelint-config-recess-order" // 配置 stylelint css 属性书写顺序插件, + ], + overrides: [ + // 扫描 .vue/html 文件中的 diff --git a/src/assets/vue.svg b/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000..b58e52b --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..2425c0f --- /dev/null +++ b/src/main.ts @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..f691315 --- /dev/null +++ b/src/style.css @@ -0,0 +1,79 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..7fb078c --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..db0becc --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..bbcf80c --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue()], +})