Aplicaci贸n de mecanografiado ideal de Vue

Si bien Vue 3 a煤n no se lanz贸 oficialmente, y la producci贸n es principalmente la versi贸n 2, quiero hablar sobre la mecanograf铆a y c贸mo a煤n no es perfecta en Vue. Y hoy intentaremos crear una aplicaci贸n ideal con mecanograf铆a, centr谩ndonos en el estilo del c贸digo, promocionando la gu铆a de estilo vue y otras cosas generalmente insignificantes que fueron inventadas por personas inteligentes.





Observaci贸n

Debe tenerse en cuenta que el autor est谩 escribiendo su primera publicaci贸n y le gustar铆a recibir comentarios en los comentarios.





驴Por qu茅 "perfecto"?

-, , (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, . , .





Configuraci贸n de creaci贸n de proyectos de Vue CLI
Vue CLI

" " .





, node_modules

, . - vue-bootstrap quasar . .





eslint

. extends - eslint - Vue style guide - - recommended.





  extends: [
    'plugin:vue/recommended',
    '@vue/typescript/recommended'
  ],
      
      



, eslint style guide , , - .





S铆, esto incluso en la plantilla de cli de Vue solucionar谩 un par de errores
, Vue cli
eslint

. . , - v-html, . , .





- rules :





"semi": [2, "never"],
"quotes": [2, "single", { "avoidEscape": true }]
      
      



"" Vuex

npm install vuex-smart-module
      
      



Vuex , . , :





  1. vue-property-decorator, class-style components;





  2. .





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>

      
      







Y los consejos funcionan





! ...





  1. src/views HomeView.vue AboutView.vue, src/components HelloComponent.vue. name



    .





  2. src/router/index.ts HomeView.vue - , vue style guide.





  3. .





  4. npm run lint



    .





  5. .





, Vue, , :





  1. Component-naming - Vue , eslint.





    1. , - c The, TheNavigationComponent.vue



      - , .





    2. views/components: - View, - Component ( The), - (Navigation.vue - ALERT!), html ( ).





    3. : <MyComponent />



      vs <my-component />



      Vue , CamelCase ( - ide).





  2. - , .





  3. - , ( Components: () => import(path)



    ), webpack 90% , 10% - , . , .





  4. ( , ).





  5. ( ).





  6. api - store, Vue .





eslint , style guide ! :)





Espero que les haya gustado, la calidad del c贸digo y el estilo de la gu铆a es interesante, y adem谩s genera discusiones productivas en equipos, discuten este tipo de cosas, traer谩 satisfacci贸n y en ocasiones elevar谩 la autoestima. 隆Pero no negativo!





Github de la aplicaci贸n resultante: github





Adem谩s, todo esto funcionar谩 con modificaciones menores para ejecutar en Vue 3, lo hice, pero como no estoy completamente seguro y lo resolv铆, un art铆culo sobre el Vue 2 saliente.





PD

Estar铆a encantado de recibir comentarios detallados.





驴Le interesar铆a leer algo como esto para probar aplicaciones Vue "perfectas"?








All Articles