Skip to content

๐Ÿ”ฅ๐ŸŽ‰Build enterprise Vue3 +TypeScript+Pinia+ Ant-Desgin development environment based on Vite

License

Notifications You must be signed in to change notification settings

Liklei/vue3-Antd-Business

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

20 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ไผไธš็บง้กน็›ฎๆญๅปบ

ย ย ย ย ย ย ย ย  ย ย ย ย 

Introduction

Use vite to customize the build your Vue3&TypeScript company project
ๅˆๅง‹ๅŒ–้กน็›ฎๅŸบไบŽ่„šๆ‰‹ๆžถๅทฅๅ…ท Viteๆญๅปบ,ๆŠ€ๆœฏๆก†ๆžถVue3ๅนถไฝฟ็”จTypeScript่ฏญ่จ€ๅผ€ๅ‘,ๅ…ถไป–ไฝฟ็”จๆ ธๅฟƒๆŠ€ๆœฏๅฆ‚: Vue-Router๏ฟฝ + vite-plugin-pages Pinia.

Basic Build Lib

Made with Node.js ย  Made with Yarn ย  Made with Vite ย  Made with TypeScript ย  Made with Vue ย 

Using Tools

Less ย  Windicss ย  Jest ย 

Install & Use

yarn

Compiles and hot-reloads for development

yarn run dev

Compiles and minifies for production

yarn run build (for production)
yarn run build:test (for pre)

Run unit test

yarn run test:unit

Lints and fixes files

yarn run lint:eslint
yarn run lint:stylelint

Remove cache/lib and ReIntsall

yarn run reinstall

Standard

ๆ–‡ไปถๆˆ–ๆ–‡ไปถๅคนๅ‘ฝๅ

ๆ–ฐๅปบๆ–‡ไปถๆˆ–็›ฎๅฝ•ๅ‘ฝๅ็ปŸไธ€้‡‡ๅ–้ฉผๅณฐๅ‘ฝๅ๏ผŒไพ‹ๅฆ‚ editorPlus.

ๆ ทๅผ

1ใ€ๆ ทๅผๅ‘ฝๅ็ปŸไธ€้‡‡ๅ–ไธญๅˆ’็บฟๆ–นๅผ๏ผŒไพ‹ๅฆ‚ class-*-. 2ใ€ๅŸบ็ก€ๆ ทๅผๅทฒ้…็ฝฎๅˆฐๅ…จๅฑ€,ๅฆ‚ๆžœๆœ‰ๆ–ฐๆทปๅŠ ็š„ๅ†…ๅฎนๅฏไปฅๆŒ‰ๆจกๅ—ๆทปๅŠ ๆ–‡ไปถๅคนๆˆ–่กฅๅ……ๅˆฐๆ–‡ไปถไธญ,ๅฝ“ๅ‰ๅฏน ant, transition,้€š็”จๅ˜้‡ๆทปๅŠ .

Iconfont ๅ›พๆ ‡

้กน็›ฎไธญๅฐฝ้‡ไฝฟ็”จๅญ—ไฝ“ๅ›พๆ ‡,ๅ›พๆ ‡ไธŠไผ ๅˆฐ ้˜ฟ้‡Œๅทดๅทด iconfont,ไธŠไผ ๆˆๅŠŸๅŽๅˆทๆ–ฐๅนถๆ›ฟๆข index.html ไธญ้“พๆŽฅ.

store

้กน็›ฎไธญ้ป˜่ฎคๅทฒ็ป้ƒจ็ฝฒ Pinia,ๆ–ฐๆจกๅ—ๅˆ›ๅปบๆ—ถ้œ€่ฆๅˆ›ๅปบๆ–‡ไปถๅคนๅ’Œๅญๆ–‡ไปถ***.ts,ไฝฟ็”จๆ—ถไป…้œ€้ซ˜ๅฆ‚่ฏฅๆจกๅ—ๅณๅฏ. ๅปบ่ฎฎๅœจ้กน็›ฎไธญๅฏไปฅๅฐ่ฏ•reactive ref ๆ›ฟไปฃ Pinia.

router

้กน็›ฎๅŸบไบŽFile Base URLๅ› ๆญคๆ— ้œ€ๆ‰‹ๅŠจๆ–ฐๅปบ่ทฏ็”ฑ๏ผŒไฝ†ๅฟ…้กป่ฆๆณจๆ„ๅœจpages็›ฎๅฝ•ไธ‹ๆ–ฐๅปบๆ–‡ไปถๅญๆ–‡ไปถๅช่ƒฝๆ˜ฏindex.vue

ๅŸ‹็‚นไธŽๆŽฅๅฃๆ—ฅๅฟ—

ๆš‚ไธๆŽฅๅ…ฅ,ไฝœไธบ fix ็‰ˆๆœฌๆŽฅๅ…ฅ,ๆŽฅๅ…ฅๅŽ่กฅๅ……ๆ–‡ๆกฃ

Project Tree

้กน็›ฎ็ป“ๆž„


e-card-business
โ”œโ”€ .editorconfig
โ”œโ”€ .env   โ€”็Žฏๅขƒ้…็ฝฎๆ–‡ไปถ 
โ”œโ”€ .env.development
โ”œโ”€ .env.production
โ”œโ”€ .env.test
โ”œโ”€ .eslintignore
โ”œโ”€ .eslintrc.js
โ”œโ”€ .husky  โ€” git hook
โ”‚  โ”œโ”€ _
โ”‚  โ”‚  โ””โ”€ husky.sh
โ”‚  โ”œโ”€ commit-msg
โ”‚  โ”œโ”€ common.sh
โ”‚  โ””โ”€ pre-commit
โ”œโ”€ .prettierignore
โ”œโ”€ .prettierrc
โ”œโ”€ .stylelintignore
โ”œโ”€ README.md
โ”œโ”€ build  โ€” ๆ‰“ๅŒ…้…็ฝฎๆ–‡ไปถ 
โ”‚  โ”œโ”€ config
โ”‚  โ”‚  โ””โ”€ themeConfig.ts
โ”‚  โ”œโ”€ constant.ts
โ”‚  โ”œโ”€ generate
โ”‚  โ”‚  โ””โ”€ generateModifyVars.ts
โ”‚  โ”œโ”€ getConfigFileName.ts
โ”‚  โ”œโ”€ index.ts
โ”‚  โ””โ”€ script
โ”‚     โ”œโ”€ buildChunk.ts
โ”‚     โ”œโ”€ buildConf.ts
โ”‚     โ””โ”€ buildServer.ts
โ”œโ”€ commitlint.config.js
โ”œโ”€ index.html
โ”œโ”€ jest.config.js
โ”œโ”€ mock โ€”ๆŽฅๅฃmock้…็ฝฎๆ–‡ไปถ 
โ”‚  โ”œโ”€ _createProductionServer.ts
โ”‚  โ””โ”€ index.ts
โ”œโ”€ package.json
โ”œโ”€ postcss.config.js
โ”œโ”€ public
โ”‚  โ”œโ”€ favicon.ico
โ”‚  โ””โ”€ resource
โ”‚     โ””โ”€ img
โ”‚        โ””โ”€ logo.png
โ”œโ”€ src
โ”‚  โ”œโ”€ App.vue
โ”‚  โ”œโ”€ assets     โ€” ้™ๆ€่ต„ๆบ 
โ”‚  โ”‚  โ”œโ”€ fonts
โ”‚  โ”‚  โ”œโ”€ images
โ”‚  โ”‚  โ”‚  โ””โ”€ logo.png
โ”‚  โ”‚  โ””โ”€ svg
โ”‚  โ”œโ”€ components    โ€” ๅ…ฌๅ…ฑ็ป„ไปถ  
โ”‚  โ”‚  โ””โ”€ camcard
โ”‚  โ”‚     โ””โ”€ index.vue
โ”‚  โ”œโ”€ constants     โ€” ๅธธ้‡ๅŠๆžšไธพ็ฑปๅž‹ 
โ”‚  โ”‚  โ”œโ”€ enum.ts
โ”‚  โ”‚  โ””โ”€ index.ts
โ”‚  โ”œโ”€ env.d.ts
โ”‚  โ”œโ”€ hooks          โ€”hook้’ฉๅญๅ‡ฝๆ•ฐ 
โ”‚  โ”‚  โ””โ”€ useMessage.tsx
โ”‚  โ”œโ”€ i18n           โ€”ๅคš่ฏญ่จ€
โ”‚  โ”‚  โ”œโ”€ en-US.json
โ”‚  โ”‚  โ””โ”€ zh-CN.json
โ”‚  โ”œโ”€ layouts
โ”‚  โ”‚  โ””โ”€ default.vue
โ”‚  โ”œโ”€ main.ts
โ”‚  โ”œโ”€ pages         โ€”้กต้ข๏ผŒFIle Base Router
โ”‚  โ”‚  โ”œโ”€ editor
โ”‚  โ”‚  โ”‚  โ”œโ”€ index.less
โ”‚  โ”‚  โ”‚  โ””โ”€ index.vue
โ”‚  โ”‚  โ”œโ”€ index.vue
โ”‚  โ”‚  โ”œโ”€ login
โ”‚  โ”‚  โ”‚  โ”œโ”€ index.less
โ”‚  โ”‚  โ”‚  โ””โ”€ index.vue
โ”‚  โ”‚  โ””โ”€ pay
โ”‚  โ”‚     โ””โ”€ index.vue
โ”‚  โ”œโ”€ router       โ€”ๅŸบ็ก€่ทฏ็”ฑ้…็ฝฎ
โ”‚  โ”‚  โ””โ”€ index.ts
โ”‚  โ”œโ”€ services
โ”‚  โ”‚  โ”œโ”€ auth.ts
โ”‚  โ”‚  โ””โ”€ index.ts
โ”‚  โ”œโ”€ store        โ€”็Šถๆ€็ฎก็†
โ”‚  โ”‚  โ”œโ”€ index.ts
โ”‚  โ”‚  โ””โ”€ modules
โ”‚  โ”‚     โ”œโ”€ auth
โ”‚  โ”‚     โ”‚  โ””โ”€ index.ts
โ”‚  โ”‚     โ””โ”€ login
โ”‚  โ”œโ”€ styles    โ€”ๅธธ็”จๆ ทๅผ้…็ฝฎ
โ”‚  โ””โ”€ utils     โ€”ๅทฅๅ…ท้…็ฝฎ
โ”‚     โ”œโ”€ axios  โ€”axiosๅฐ่ฃ…
โ”‚     โ”œโ”€ dom    โ€”domๆ“ไฝœ
โ”‚     โ”œโ”€ env.ts
โ”‚     โ”œโ”€ file   โ€”ๆ–‡ไปถ็ณป็ปŸๆ“ไฝœ
โ”‚     โ”œโ”€ flog   โ€”ๅŸ‹็‚นๅŠๆ—ฅๅฟ—ๆ“ไฝœ
โ”‚     โ”œโ”€ is.ts  โ€”ๅธธ็”จๅˆคๆ–ญ็ฑปๅž‹ๅทฅๅ…ท
โ”‚     โ””โ”€ log.ts โ€”consoleๅฐ่ฃ…
โ”œโ”€ stylelint.config.js
โ”œโ”€ test      โ€”ๅ•ๅ…ƒๆต‹่ฏ•
โ”œโ”€ tsconfig.json
โ”œโ”€ tsconfig.node.json
โ”œโ”€ types       โ€”ๅ…จๅฑ€็ฑปๅž‹ๅฃฐๆ˜Ž
โ”œโ”€ vite.config.ts
โ”œโ”€ windi.config.ts     โ€” windicss้…็ฝฎ
โ””โ”€ yarn.lock

Support Feature

  • ๆ”ฏๆŒPinia็Šถๆ€็ฎก็†;
  • ๆ”ฏๆŒvue3 API๏ผŒImage่‡ชๅŠจๅฏผๅ…ฅ๏ผŒไนŸๅฏไปฅๆ‰‹ๅŠจ้…็ฝฎๅ…จๅฑ€ๆˆ–้ƒจๅˆ†ๆ–‡ไปถๅคน็š„็ป„ไปถ่‡ชๅฎšไน‰ๅฏผๅ…ฅ๏ผ›
**ไฝฟ็”จๅ‰ๆ๏ผš** ๅฎ‰่ฃ…`vue-global-api`ๅนถ้…็ฝฎ`.eslintrc.js `->`extends:[โ€˜vue-global-apiโ€™]`

const test = ref(10)
onMounted(() => {
  console.log('mounted===')
})
**็ป„ไปถ่‡ชๅฎšไน‰ๅฏผๅ…ฅ๏ผš**
Components({
   ...,
   resolvers: [
     name => {
         // where `name` is always CapitalCase
         if (name.startsWith('App')) {
             return { importName: 'default', path: `./components/$                {kebabCase(name)}/index.vue` }
         }
     }
   ]
})

......
  • ๅŸบไบŽVue-Router,ไฝฟ็”จvite-plugin-pagesๅฎž็ŽฐFile Base Router๏ผ›
  • ๆ”ฏๆŒTSX่ฏญๆณ•;
  • ๆ”ฏๆŒaxios, ไบŒๆฌกๅฐ่ฃ…ๅฎŒๆˆ;
  • ๆ”ฏๆŒjestๅ•ๅ…ƒๆต‹่ฏ•๏ผ›
  • ๆ”ฏๆŒMockๆ•ฐๆฎ;
  • ๆ”ฏๆŒi18n ๅ›ฝ้™…ๅŒ–,ๅ…จๅฑ€้…็ฝฎๅฎŒๆˆ;
  • ๆ”ฏๆŒdayjs,ๆ—ฅๆœŸๆ ผๅผๅŒ–;
  • ๆ”ฏๆŒlodash,ๅ…จๅฑ€ๆณจๅ…ฅ้˜ฒๆŠ–ไธŽ่Š‚ๆต;
  • ๆ”ฏๆŒLess;
  • ๆ”ฏๆŒwindicss๏ผŒไผ˜ๅŠฟๆ˜ฏๅคงๅคšๆ•ฐๆƒ…ๅ†ตๆ— ้œ€้ขๅค–็ผ–ๅ†™cssๆ–‡ไปถ;
  • ๆ”ฏๆŒant-desgin-vue,ๆ ทๅผ่‡ชๅŠจๅฏผๅ…ฅ๏ผŒUI ็ป„ไปถๅทฒๆŒ‰้œ€ๅŠ ่ฝฝ, ็‰นๆฎŠ็š„ๅฆ‚message ็ญ‰้ž็ป„ไปถๅŒ–ๆจกๅ—ๆ ทๅผไป้œ€ๆ‰‹ๅŠจๆณจๅ…ฅ;
  • ๆ”ฏๆŒstyleLint,eslint,prettier๏ผŒ่ฏญๆณ•ๆฃ€ๆŸฅ;
  • ๆ”ฏๆŒๅ‘ฝไปค่กŒๅทฅๅ…ทcross_env(่ฎพ็ฝฎ่„šๆœฌๅ˜้‡),rimraf, dotenv(ๅฐ†็Žฏๅขƒๅ˜้‡ๅŠ ่ฝฝๅˆฐ process.env),้…ๅˆvite .env.**ๅฏนไธๅŒ็ŽฏๅขƒไฝœๅŒบๅˆ†;
  • ๆ”ฏๆŒ Git Hook(husky),่„šๆœฌๆ”ฏๆŒ lint-stage ๆฃ€ๆŸฅ;
  • ๆ”ฏๆŒesno,ๅŸบไบŽ esbuild ็š„ TS/ESNext node ่ฟ่กŒๆ—ถ;

GIT ่ง„่Œƒ

Pull Request

้กน็›ฎๅฏน git ๆต็จ‹ๅšๅผบๅˆถ่ง„่Œƒ

  1. checkout ๅˆ†ๆ”ฏ: git checkout -b feature/xxxx
  2. commit ๆไบค: git commit -m 'feature: add xxxxx'

Reference

  • master ็”Ÿไบง็Žฏๅขƒๅˆ†ๆ”ฏ
  • pre ้ข„ๅ‘็Žฏๅขƒๅˆ†ๆ”ฏ
  • daily ๅ…ฌๅ…ฑๆ—ฅๅธธๅผ€ๅ‘ๅˆ†ๆ”ฏ(daily/1.0.0)
  • bugfix ไฟฎๅค bug
  • feature ๆ–ฐๅขžๅŠŸ่ƒฝ

Use Suggestion

  • JSX ๆจกๅ—ๅฏผๅ‡บๆ”ฏๆŒ,่ฏญๆณ•ไฝฟ็”จๅปบ่ฎฎๅ‚่€ƒBabel Plugin JSX
import { defineComponent } from 'vue'

// named exports w/ variable declaration: ok
export const Foo = defineComponent({})

// named exports referencing variable declaration: ok
const Bar = defineComponent({ render() { return <div>Test</div> }})
export { Bar }

// default export call: ok
export default defineComponent({ render() { return <div>Test</div> }})

// default export referencing variable declaration: ok
const Baz = defineComponent({ render() { return <div>Test</div> }})
export default Baz
  • ๆ–ฐๅปบๆˆ–ๆทปๅŠ ๆ–‡ไปถๅŽ,้€š่ฟ‡project-treeๆ›ดๆ–ฐ้กน็›ฎ็ป“ๆž„ๆ ‘

Other

  • vscodeๆŽจ่ๅฎ‰่ฃ… Vue Language Features (Volar)ๅ’Œ EditorConfig for VS Code
  • vscodeๆŽจ่ๅฎ‰่ฃ… project-tree
  • vscodeๆŽจ่ๅฎ‰่ฃ…WindiCSS

ไธป่ฆๆŠ€ๆœฏๅบ“ๆ–‡ๆกฃ

็›ธๅ…ณๆ–‡ๆกฃๅ‚่€ƒ

Next Todo

  • npm package publish
  • ๅŠ ๅ…ฅๆ—ฅๅฟ—็ณป็ปŸ