本篇推荐且默认你使用的是VSCode编辑器。

配置 VSCode #

让你的同事至少在这个项目内可以使用跟你一样的设置。

根目录下添加 .vscode 文件夹,用于配置该项目使用的 VSCode 设置。
image.png

  • 添加[extensions.json](https://code.visualstudio.com/docs/editor/extension-marketplace#_workspace-recommended-extensions),用于推荐 VSCode 插件:
  1. {
  2. "recommendations": [
  3. // Vue3 必备
  4. "johnsoncodehk.volar", // volar - 官方的 Vue3 扩展,需要禁用 Vetur
  5. "johnsoncodehk.vscode-typescript-vue-plugin", // TypeScript Vue Plugin - 用于支持在 TS import *.vue 文件。
  6. "dbaeumer.vscode-eslint", // ESLint 支持
  7. "esbenp.prettier-vscode", // Prettier 格式化
  8. // 其他推荐插件
  9. "voorjaar.windicss-intellisense",
  10. "ecmel.vscode-html-css",
  11. "abusaidm.html-snippets",
  12. "xabikos.JavaScriptSnippets",
  13. "mikestead.dotenv",
  14. "yzhang.markdown-all-in-one",
  15. "formulahendry.auto-rename-tag",
  16. "coenraads.bracket-pair-colorizer-2",
  17. "vscode-icons-team.vscode-icons",
  18. "zhuangtongfa.Material-theme",
  19. "eamodio.gitlens",
  20. "donjayamanne.githistory"
  21. ]
  22. }
  • 添加[settings.json](https://code.visualstudio.com/docs/getstarted/settings),用于配置 VSCode 设置: ```json { // 为指定的语法定义配置文件或使用带有特定规则的配置文件。 “emmet.syntaxProfiles”: { “javascript”: “jsx”, “vue”: “html”, “vue-html”: “html” }, // 使用空格代替tab缩进,2格缩进 “editor.tabSize”: 2, “editor.insertSpaces”: true, // volar配置 “volar.autoCompleteRefs”: true, “volar.formatting.printWidth”: 100, // 各文件格式化配置 “[vue]”: { “editor.defaultFormatter”: “johnsoncodehk.volar” }, “[jsonc]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[javascript]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[html]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[json]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[javascriptreact]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[less]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[scss]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[css]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” }, “[typescript]”: { “editor.defaultFormatter”: “esbenp.prettier-vscode” } }
  1. <a name="yPMMs"></a>
  2. # 配置 tsconfig.json [#](https://staging-cn.vuejs.org/guide/typescript/overview.html#configuring-tsconfigjson)
  3. > 先将 Vite 模板预设的`tsconfig.node.json`删除。
  4. > 对于我们准备搭建的中小型且无需单元测试的项目来说,tsconfig配置无需做太多的项目分割。
  5. <a name="maNY9"></a>
  6. ## 声明文件管理
  7. 在**根目录**下新建一个`typings`文件夹,将预设模板中的`src/env.d.ts`文件放到`typings`文件夹中。<br />未来单独的ts声明,也都放在这个文件夹中进行统一管理。
  8. <a name="ACqpQ"></a>
  9. ## 修改 tsconfig.json
  10. 修改`tsconfig.json`内容,详细说明都在注释中:
  11. ```json
  12. {
  13. // 编译选项配置参考:
  14. // TypeScript 官方英文: https://www.typescriptlang.org/tsconfig#compilerOptions
  15. // TypeScript 官方中文: https://www.tslang.cn/docs/handbook/compiler-options.html
  16. "compilerOptions": {
  17. // 解析路径及路径别名
  18. "baseUrl": ".",
  19. "paths": {
  20. "@/*": ["src/*"]
  21. },
  22. // 影响 Vite 编译选项,都选用最新的
  23. "target": "ESNext",
  24. "module": "ESNext",
  25. "moduleResolution": "Node",
  26. // `"noImplicitThis": true` 是 `strict` 的一部分
  27. // 在这里再次添加,以防止一些用户决定禁用 `strict`
  28. "noImplicitThis": true,
  29. "strict": true,
  30. // Vite 推荐/要求
  31. // See <https://cn.vitejs.dev/guide/features.html#typescript-compiler-options>
  32. // See <https://cn.vitejs.dev/guide/features.html#usedefineforclassfields>
  33. // See <https://cn.vitejs.dev/guide/features.html#json>
  34. "isolatedModules": true,
  35. "useDefineForClassFields": true,
  36. "resolveJsonModule": true,
  37. // Vue 推荐/要求
  38. "jsx": "preserve", // Vue 支持 Jsx 需要
  39. "preserveValueImports": true, // 支持 `<script setup>`
  40. "importsNotUsedAsValues": "error", // 导入类型时,强制使用 `import type` 而不是 `import`
  41. // Recommended
  42. "esModuleInterop": true, // 兼容 esm 与 cjs
  43. "allowJs": true, // 允许 js、ts 混用
  44. "forceConsistentCasingInFileNames": true, // 大小写敏感
  45. "skipLibCheck": true, // See <https://github.com/vuejs/vue-cli/pull/5688>
  46. "experimentalDecorators": true, // 支持 ES 装饰器
  47. // 仅该路径下的 d.ts 会被全局包含
  48. "typeRoots": ["./node_modules/@types/", "./typings"]
  49. },
  50. "include": [
  51. "src/**/*.ts",
  52. "src/**/*.d.ts",
  53. "src/**/*.tsx",
  54. "src/**/*.vue",
  55. "typings/**/*.d.ts",
  56. "vite.config.ts"
  57. ],
  58. "exclude": ["node_modules/*"]
  59. }

配置 Vite #

这里主要讲几个常用的 Vite 配置项,更多配置可点击 # 号查看官方文档。

Vite 的配置文件就在根目录的 vite.config.ts 中。

路径别名配置 - resolve.alias #

首先运行pnpm add -D @types/node命令安装 node 模块的ts类型声明。
避免使用node模块时,提示 找不到模块“path”或其相应的类型声明的报错。

vite.config.ts中使用path模块搭配设置路径别名:

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import { resolve } from 'path'
  4. const pathResolve = (dir: string): string => {
  5. return resolve(__dirname, '.', dir)
  6. }
  7. /**
  8. * vite 配置
  9. * @see https://cn.vitejs.dev/config/
  10. */
  11. export default defineConfig({
  12. base: './',
  13. resolve: {
  14. alias: {
  15. '@': pathResolve('./src'),
  16. '~': pathResolve('./src/assets'),
  17. '#': pathResolve('./src/scripts')
  18. }
  19. },
  20. plugins: [vue()]
  21. })

同时设置tsconfig.jsoncompilerOptions.paths字段,这样 VSCode 编辑器才能识别路径:

  1. {
  2. "compilerOptions": {
  3. // 设置解析非相对模块名称的基本目录
  4. "baseUrl": ".",
  5. // 设置模块名到基于baseUrl的路径映射,可以设置路径别名的语法提示
  6. "paths": {
  7. "@/*": ["src/*"],
  8. "~/*": ["src/assets/*"],
  9. "#/*": ["src/scripts/*"]
  10. },
  11. },
  12. }

CSS 配置 - CSS Module、预处理器 #

预处理器 Less #

由于本文会使用ant-design-vue,因此预处理器选择使用less

Vite对预处理器提供了内置的支持。因此安装预处理器依赖即可,无需额外配置:

  1. # 安装 less 预处理器
  2. pnpm add -D less

若要在 Vite 中使用 Less 全局变量:

  1. src/assets/style 文件夹下创建 common.less 文件

    1. @primary-color: #3554f5; // 全局主色
  2. vite.config.ts 中注入全局变量声明:

  1. export default defineConfig({
  2. css: {
  3. preprocessorOptions: {
  4. less: {
  5. // 全局 less变量 & less mixins
  6. modifyVars: {
  7. hack: `true; @import (reference) "${pathResolve('./src/assets/style/common.less')}";`
  8. },
  9. // ant-design-vue 自动按需引入兼容
  10. javascriptEnabled: true
  11. }
  12. }
  13. },
  14. })
  1. 使用 Less 全局变量:
  1. <style lang="less" module>
  2. .xxx {
  3. color: @primary-color;
  4. }
  5. </style>

CSS Modules #

使用