Embora o Vue 3 ainda não tenha sido lançado oficialmente e a produção seja principalmente a versão 2 - quero falar sobre digitação e como ainda não é perfeito no Vue. E hoje vamos tentar criar um aplicativo ideal com digitação datilografada, focando no estilo do código, promovendo o guia de estilo vue e outras coisas geralmente insignificantes que foram inventadas por pessoas inteligentes.
Observação
Deve-se ter em mente que o autor está escrevendo sua primeira postagem e gostaria de receber feedback nos comentários
Por que "perfeito"?
-, , (eslint) , conventional commits, . , , , ( )? , - .
Vue?
2 typescript (store), , store , . , , ? vue-property-decorator vuex-smart-module .
, vue cli .
vue create habratest
- vue2, features, Vue Router History Mode, Vue Class Components, . , .
" " .
, node_modules
eslint
. extends - eslint - Vue style guide - - recommended.
extends: [ 'plugin:vue/recommended', '@vue/typescript/recommended' ],
, eslint style guide , , - .
eslint
"semi": [2, "never"],
"quotes": [2, "single", { "avoidEscape": true }]
"" Vuex
npm install vuex-smart-module
vue-property-decorator, class-style components;
.
src/main.ts store . this.$store
, .
store modules habrModule, : index.ts, actions.ts, getters.ts, mutations.ts, state.ts.
, - . ()
(!) , - , appSettings
src/store/modules/habrModule/state.ts:
export default class HabrState {
value = 'hello';
}
src/store/modules/habrModule/getters.ts:
import { Getters } from 'vuex-smart-module'
import HabrState from './state'
export default class HabrGetters extends Getters<HabrState> {
/**
* greeting, Vuex
* @param name
* @example module.getters.greeting("Habr!")
*/
greeting(name: string): string {
return this.state.value + ', ' + name
}
/**
* greeting, Vuex
* @example module.getters.greetingDefault
*/
get greetingDefault(): string {
return this.getters.greeting('Habr!')
}
}
src/store/modules/habrModule/index.ts:
import { Module } from 'vuex-smart-module'
import getters from './getters'
import state from './state'
const habr = new Module({
state: state,
getters: getters,
})
export default habr
, . store
src/store/index.ts
import Vue from 'vue'
import Vuex from 'vuex'
import { Module, createStore } from 'vuex-smart-module'
import habr from './modules/habrModule'
Vue.use(Vuex)
const root = new Module({
modules: {
habr,
},
})
const store = createStore(root)
export default store
export const habrModule = habr.context(store)
- . .
<template>
<div class="home">
<img
alt="Vue logo"
src="../assets/logo.png"
>
<HelloComponent msg="Welcome to Your Vue.js + TypeScript App" />
{{ computedTest }}
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import { habrModule } from '@/store'
@Component({
name: 'HomeView',
components: {
HelloComponent: () => import('@/components/HelloComponent.vue'),
},
})
export default class HomeView extends Vue {
get computedTest() {
return habrModule.getters.greetingDefault
}
}
</script>
! ...
src/views HomeView.vue AboutView.vue, src/components HelloComponent.vue.
name
.
src/router/index.ts HomeView.vue - , vue style guide.
.
npm run lint
.
.
, Vue, , :
Component-naming - Vue , eslint.
, - c The,
TheNavigationComponent.vue
- , .
views/components: - View, - Component ( The), - (Navigation.vue - ALERT!), html ( ).
:
<MyComponent />
vs<my-component />
Vue , CamelCase ( - ide).
- , .
- , (
Components: () => import(path)
), webpack 90% , 10% - , . , .
( , ).
( ).
api - store, Vue .
eslint , style guide ! :)
Espero que tenham gostado, a qualidade do código e o estilo do guia são interessantes, além de gerar discussões produtivas nas equipes, discutir essas coisas, vai trazer satisfação e às vezes elevar a autoestima. Mas não negativo!
Github do aplicativo resultante: github
Além disso, tudo isso funcionará com pequenas modificações para rodar no Vue 3, eu fiz isso, mas como não estou completamente certo sobre isso e descobri - um artigo sobre o Vue 2 que está saindo.
PS
Eu ficaria feliz em receber comentários detalhados.
Você estaria interessado em ler algo assim para aplicativos de teste Vue "perfeitos"?