# Intalação
Anteriormente vimos as formas de se usar o vue sendo mais produtivo usando o Node.js e o NPM/Yarn, mas não vamos importa-la manualmente.
Vamos usar uma ferramenta disponibilizada pelo nosso querido Évan.
Esta ferramenta faz todo o trabalho sujo nos restando apenas baixar e iniciar projetos já pré configurados com:
- esqueletos de códigos predefinidos
- minificadores
- testadores
- live-reload
- outros
Nos dando agilidade na construção e configuração de um projeto.
O nome desta ferramenta é Vue Cli (opens new window) (Vue cielai, Vue C L I, Vue Clai, ...).
Como podemos observar ele é um gerenciador de templates.
# Nodejs
Primeiro de tudo vamos precisa instalar o Node.js.
Vamos entrar no site do Nodejs (opens new window) e na sessão download escolher a que se adeque ao seu sistema operacional.
Os passos que vou seguir são os para Linux.
Com o terminal aberto digite:
$ sudo apt install nodejs
Apos finalizar, para saber se foi instalado digite:
$ nodejs --version
// ou
$ nodejs -v
2
3
4
5
# NPM
Por padrão ele já vem com o Node.js quando instalado nas versões mais recentes.
Se preferir usar ele ao inves de usar o Yarn, verique se está instalado.
$ npm --version
// ou
$ npm -v
2
3
4
5
Caso não esteja instalado, com o terminal aberto digite:
$ sudo apt install npm
Após finalizar, para saber se foi instalado utilize os passos descritos anteriormente.
# Yarn
Para instalar o Yarn, primeiro vamos precisar configurar o repositório.
Com o terminal aberto digite:
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
2
3
Em seguida precisamos atualizar os pacotes, digite:
$ sudo apt-get update
Para instalar digite:
$ sudo apt install yarn
Após finalizar, para saber se foi instalado digite:
$ yarn --version
// ou
$ yarn -v
2
3
4
5
# CLI
A versão que utilizo é a 3 da CLI.
A CLI precisa ser instalada globalmente.
Para instalar a CLI com o terminal aberto digite:
// NPM
npm install -g @vue/cli
// Yarn
$ yarn global add @vue/cli
2
3
4
5
Apos finalizar, para saber se foi instalado digite:
$ vue --version
// ou
$ vue -v
2
3
4
5
# Iniciando um projeto com CLI
Para iniciar um projeto com a CLI 3 com o terminal aberto digite:
$ vue create NomeDoProjeto
Escolha utilizando a tecla Espaço as opções que mais lhe agrade e aperte a tecla Enter quando for finalizar.
O projeto começará a ser criado e finalizando siga as instruções fornecida.
Observação: É permitido criar um projeto por meio de uma interface utilizando o comando $ vue ui
# Estrutura projeto
Durante a minha caminhada com Vue.js pude obter diversar formas de estruturar os projetos permitindo uma melhor manutenibilidade e legibilidade do código e arquivos.
Vale ressaltar que esta estrutura é um padrão que eu utilizo e não um padrão obrigatório.
Os projetos que desenvolvo sempre utilizam Vue, Vue Router, Vuex, Teste Unitário e E2E Nightwatch.
nome_projeto/
├── public/
│ ├── img/
│ │ └── icons/
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-512x512.png
│ │ ├── apple-touch-icon.png
│ │ ├── apple-touch-icon-60x60.png
│ │ ├── apple-touch-icon-76x76.png
│ │ ├── apple-touch-icon-120x120.png
│ │ ├── apple-touch-icon-152x152.png
│ │ ├── apple-touch-icon-180x180.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── msapplication-icon-144x144.png
│ │ ├── mstile-150x150.png
│ │ └── safari-pinned-tab.svg
│ ├── _redirects
│ ├── browserconfig.xml
│ ├── crossdomain.xml
│ ├── favicon.ico
│ ├── humans.txt
│ ├── index.html
│ ├── manifest.json
│ ├── robots.txt
│ └── sitemap.xml
├── src/
│ ├── assets/
│ │ └── img.png
│ ├── components/
│ │ ├── fragments/
│ │ │ ├── FileFragmentOneCpFgm.vue
│ │ │ └── FileFragmentTwoCpFgm.vue
│ │ └── layout
│ │ └── FileLayoutOneCpLyt.vue
│ │ └── FileLayoutTwoCpLyt.vue
│ ├── directives/
│ │ └── index.js
│ ├── locales/
│ │ └── en.json
│ │ └── pt-BR.json
│ ├── mixins/
│ │ └── index.js
│ ├── plugins/
│ │ ├── file-plugin-one.js
│ │ └── file-plugin-two.js
│ ├── scss/
│ │ ├── abstracts/
│ │ │ ├── _functions.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _variables.scss
│ │ │ └── glob.scss
│ │ ├── base/
│ │ │ ├── _general.scss
│ │ │ ├── _reset.scss
│ │ │ ├── _typography.scss
│ │ │ └── glob.scss
│ │ ├── components/
│ │ │ ├── _buttons.scss
│ │ │ └── glob.scss
│ │ ├── layout/
│ │ │ ├── _footer.scss
│ │ │ ├── _forms.scss
│ │ │ ├── _grid.scss
│ │ │ ├── _header.scss
│ │ │ ├── _navigation.scss
│ │ │ ├── _sidebar.scss
│ │ │ └── glob.scss
│ │ ├── pages/
│ │ │ ├── _about.scss
│ │ │ ├── _contact.scss
│ │ │ ├── _home.scss
│ │ │ └── glob.scss
│ │ ├── themes/
│ │ │ ├── _admin.scss
│ │ │ ├── _theme.scss
│ │ │ └── glob.scss
│ │ ├── vendors/
│ │ │ ├── _bootstrap.scss
│ │ │ ├── _jquery-ui.scss
│ │ │ └── glob.scss
│ │ └── main.scss
│ ├── searches/
│ │ └── index.js
│ ├── store/
│ │ ├── modules/
│ │ │ ├── moduleone/
│ │ │ │ ├── actions.js
│ │ │ │ ├── getters.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutations.js
│ │ │ │ └── state.js
│ │ │ └── moduletwo/
│ │ │ ├── actions.js
│ │ │ ├── getters.js
│ │ │ ├── index.js
│ │ │ ├── mutations.js
│ │ │ └── state.js
│ │ ├── actions.js
│ │ ├── getters.js
│ │ ├── index.js
│ │ ├── mutations.js
│ │ └── state.js
│ ├── views/
│ │ ├── erros/
│ │ │ └── Error404.vue
│ │ ├── moduleOne/
│ │ │ ├── FileOnePageVw.vue
│ │ │ └── FileTwoPageVw.vue
│ │ ├── moduleTwo/
│ │ │ ├── FileOnePageVw.vue
│ │ │ └── FileTwoPageVw.vue
│ │ ├── FileOnePageVw.vue
│ │ └── FileTwoPageVw.vue
│ ├── App.vue
│ ├── i18n.js
│ ├── main.js
│ ├── router.js
│ ├── registerServiceWorker.js
│ └── service-worker.js
├── tests/
│ ├── e2e/
│ │ ├── custom-assertions/
│ │ ├── reports/
│ │ └── specs/
│ │ └── fileComponentName.js
│ └── unit/
│ └── fileComponentName.spec.js
├── .env.development
├── .env.production
├── .editorconfig
├── .browserslistrc
├── .gitignore
├── server.js
├── vue.config.js
├── package.json
└── README.md
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
Explicação:
README.md
Arquivo de descrição do projetopackage.json
Arquivo de configuração do projeto.gitignore
Arquivo de configuração do Git.editorconfig
Arquivo de configuração da IDE (Veja mais aqui (opens new window)).env.development
Arquivo para alocar as variaveis de ambiente local.env.production
Arquivo para alocar as variaveis de ambiente de produção (usado no build).browserslistrc
Arquivo onde especificamos quais navegadores suportamos diminuindo os arquivos de configuração no diretório do projetoserver.js
Arquivo de configuração de um servidor básico para servir o projeto em produção e não obter erro 404 já que ele não é um SSRvue.config.js
Arquivo de configuração do vue, dificilmente se altera este arquivotests
Localização dos arquivos de testestests > e2e
Arquivos de configuração dos testes Nightwatchtests > e2e > custom-assertions
Localização dos scripts de teste visual do Nightwatchtests > e2e > reports
Localização dos relatórios gerados pelos testestests > e2e > specs
Localização dos scripts de teste unitários do Nightwatch
tests > unit
Arquivos de configuração dos testes unitários
public
Localização dos arquivos públicos (Favicons, Index.html, Img's, CSS's, Javascript's, Jquery, ...)img
Localização das imagens publicas sem processamento (diferente das localizados no assets)icons
Localização dos icones usados pelos navegadores ao salvar uma página na area de trabalho, favicons e afins. Os descritos mais acima são os mais usados no geral (Meu ponto de vista)
_redirects
Arquivo usado para servir o projeto no Netlify (opens new window), esta plataforma não utiliza o server.js e sim este arquivobrowserconfig.xml
Arquivo de configuração do browsercrossdomain.xml
Arquivo de configuração de cross domainfavicon.ico
Favicon padrão no formato .icohumans.txt
Arquivo de agradecimentos, descritivo da aplicação e da equipe do prejetoindex.html
Arquivo raiz da aplicaçãomanifest.json
Arquivo de configuração do PWArobots.txt
Arquivo de configuração para os botssitemap.xml
Arquivo de configuração do sitemap
src
Arquivos do projetoassets
Localização dos arquivos ativos, ao serem processados terão a mesma URL desde que o conteúdo seja o mesmo, aproveitando também o cache do navegador (Favicons, Img's, CSS's, Javascript's, Jquery, ...)components
Localização dos componentes, eu costumo separar no mínimo fragments e _layoutfragments
Localização dos fragmentos da página (Botão, Tabela, Input, ...)layout
Localização dos layout's das páginas (Menu, Rodapé, Menu Lateral, ...)
diretives
Localização das diretivas personalizadaslocales
Localização dos arquivos de traduçãomixins
Localização dos mixinsplugins
Localização dos plugins de terceiros ou não (Bootstrap, Apollo, Vue Router, Vuex, ...). Vue Router e Vuex eu não costumo configurar neste diretório, mas segue como exemplo para saber o que poder ser configurado aqui.scss
Localização de todos os arquivos sasssearches
Localização das consultas as API'sstore
Localização de toda a loja da aplicação, se existir modulos no projeto as suas lojas ficam separadas em diretórios identificados pelo nome do modulo a que se refere e separados da loja principal do projeto que fica solto neste diretório.actions.js
Arquivo de configuração das açõesgetters.js
Arquivo de configuração dos gettersindex.js
Arquivo utilizado para vincular todos os arquivos deste diretório e os arquivos index das lojas dos modulosmutations.js
Arquivo de configuração das mutaçõesstate.js
Arquivo de configuração dos states
views
Localização dos arquivos que representam as páginas do projetoi18n.js
Arquivo de configuração do plugin i18nApp.vue
Componente principal da aplicaçãomain.js
Arquivo de inicialização da aplicaçãorouter.js
Arquivo de configuração das rotasregisterServiceWorker.js
Arquivo de registro dos trabalhadores do PWAservice-worker.js
Arquivo de configuração das dos trabalhadores do PWA