{"id":3458,"date":"2023-09-05T15:59:10","date_gmt":"2023-09-05T18:59:10","guid":{"rendered":"https:\/\/tiagofick.com.br\/site\/?p=3458"},"modified":"2023-09-05T15:59:13","modified_gmt":"2023-09-05T18:59:13","slug":"vuejs3-laravel9-vite","status":"publish","type":"post","link":"https:\/\/tiagofick.com.br\/site\/vuejs3-laravel9-vite\/","title":{"rendered":"Como instalar o Vue 3 no Laravel 9 com Vite"},"content":{"rendered":"\n<p class=\"has-cyan-bluish-gray-color has-text-color has-small-font-size\">Iniciando o desenvolvimento de uma aplica\u00e7\u00e3o com Laravel v9, VueJs3 e Vite<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p style=\"font-size:18px\"><strong>Conte\u00fado:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Descri\u00e7\u00e3o do ambiente utilizado<\/li>\n\n\n\n<li>Composer<\/li>\n\n\n\n<li>NVM (Node Version Manager)<\/li>\n\n\n\n<li>Node<\/li>\n\n\n\n<li>Laravel 9<\/li>\n\n\n\n<li>VueJS 3<\/li>\n\n\n\n<li>Vite<\/li>\n\n\n\n<li>Exemplo pr\u00e1tico<\/li>\n\n\n\n<li>Refer\u00eancias<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Descri\u00e7\u00e3o do artigo<\/strong><br>Nessa configura\u00e7\u00e3o ser\u00e3o utilizados o framework Laravel 9.x, VueJS 3 em conjunto com Vite para a estrutura\u00e7\u00e3o do front-end. E utilizaremos o Composer e o NPM para gerenciar mais facilmente as depend\u00eancias dessa estrutura.<br>Aqui vamos utilizar um ambiente Windows com WSL2 o que, em tese, deve seguir os mesmos passos, caso o mesmo seja realizado em um ambiente Linux\/Ubuntu.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Composer\/NVM\/Node<\/strong><br>&#8211; Para instalar o Composer, basta efetuar o <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener\" title=\"download aqui\">download aqui<\/a>, e seguir as instru\u00e7\u00f5es do site oficial. A instala\u00e7\u00e3o do mesmo \u00e9 bastante simples.<br><br>&#8211; J\u00e1 o NVM, iremos fazer a instala\u00e7\u00e3o dentro do WSL2. Por seguran\u00e7a, desinstale todas as vers\u00f5es do NODE j\u00e1 instaladas e pelo terminal (j\u00e1 dentro do WSL), basta utilizar o curl ou o wget:<br><br>curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.5\/install.sh | bash<br>ou<br>wget -qO- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.5\/install.sh | bash<br><br>Conforme \u00e9 citado na <a href=\"https:\/\/github.com\/nvm-sh\/nvm#installing-and-updating\" target=\"_blank\" rel=\"noopener\" title=\"documenta\u00e7\u00e3o oficial\">documenta\u00e7\u00e3o oficial<\/a>.<br><br>Feito isso, vamos digitar o comando &#8220;nvm install v18.17.1&#8221;, onde v18.17.1 \u00e9 a vers\u00e3o do node que iremos instalar. Sinta-se a vontade para testar outras vers\u00f5es. Com o NVM \u00e9 poss\u00edvel instalar mais de uma vers\u00e3o e selecionar qual que pretendemos utilizar no momento.<br>Para verificar as vers\u00f5es do node instaladas, utilize o comando &#8220;nvm list&#8221;. E caso queira trocar de vers\u00e3o, basta utilizar &#8220;nvm use vXX.XX.X&#8221;.<br><br>Com esses passos, j\u00e1 temos nossa tr\u00edade Composer\/NVM\/NodeJs prontos para iniciar a constru\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Laravel 9<\/strong><br>A documenta\u00e7\u00e3o do <a href=\"https:\/\/laravel.com\/docs\/9.x\/installation\" target=\"_blank\" rel=\"noopener\" title=\"Laravel \">Laravel <\/a>\u00e9 bastante completa e estarei aqui apenas mencionando os comandos necess\u00e1rios para uma nova instala\u00e7\u00e3o.<br>Lembrando que estamos utilizando o terminal do WSL, execute:<br><br>composer create-project laravel\/laravel:^9.0 nome-pasta-app<br><br>Aguarde a instala\u00e7\u00e3o terminar e caso exiba a pergunta &#8220;Do you want to remove the existing VCS (.git, .svn..) history?&#8221; utilize a op\u00e7\u00e3o &#8220;Y&#8221;, pois estamos criando um projeto pr\u00f3prio com create-project, por isso n\u00e3o h\u00e1 necessidade de termos o hist\u00f3rico do reposit\u00f3rio original.<br><br>Agora j\u00e1 podemos conferir a vers\u00e3o instalada com &#8220;php artisan &#8211;version&#8221; e verificar a mesma rodando com &#8220;php artisan serve&#8221;.<br>O comando &#8211;version deve apresentar algo do tipo &#8220;Laravel Framework 9.52.15&#8221;<br>E o serve deve exibir no terminal o endere\u00e7o:porta para acessar a aplica\u00e7\u00e3o e no navegador ir\u00e1 exibir a tela de boas vindas do Laravel, respectivamente, algo como: <br><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"82\" src=\"https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-serve.png\" alt=\"\" class=\"wp-image-3479\" srcset=\"https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-serve.png 515w, https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-serve-300x48.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"470\" src=\"https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-welcome-1024x470.png\" alt=\"\" class=\"wp-image-3481\" srcset=\"https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-welcome-1024x470.png 1024w, https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-welcome-300x138.png 300w, https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-welcome-768x353.png 768w, https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-welcome-980x450.png 980w, https:\/\/tiagofick.com.br\/site\/wp-content\/uploads\/2023\/09\/laravel-welcome.png 1115w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Instala\u00e7\u00e3o do VueJS 3<\/strong><br>Nosso pr\u00f3ximo passo \u00e9 instalar o VueJS 3 e suas depend\u00eancias.<br>Vamos come\u00e7ar navegando at\u00e9 a pasta do projeto e rodando o comando &#8220;npm install&#8221;, assim estaremos instalando todas as nossas depend\u00eancias de frontend.<br>O segundo passo \u00e9 instalar o Vue e o vue-loader (que \u00e9 utilizado para interagir com webpacks e possibilitar a manipula\u00e7\u00e3o de componentes com outros webpacks). Para isso vamos rodar o comando &#8220;npm install vue@next vue-loader@next&#8221;<br><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Instala\u00e7\u00e3o do Vite<\/strong><br>E por fim, instalaremos o Vite utilizando &#8220;npm i @vitejs\/plugin-vue&#8221;. <br>O Vite nada mais \u00e9 do que um frontend builder. Ele ser\u00e1 o respons\u00e1vel por agrupar o seu c\u00f3digo (css e js) e disponibilizar em localhost:porta um ambiente de desenvolvimento em localhost.<br>Em seguida, vamos configurar o vite.config.js, designando os caminhos\/arquivos para que sejam criados bundles para a sua aplica\u00e7\u00e3o.<br>Abra o arquivo vite.config.js que est\u00e1 na raiz do projeto e substitua o conte\u00fado pelo c\u00f3digo abaixo:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import { defineConfig } from 'vite';\nimport laravel from 'laravel-vite-plugin';\nimport vue from '@vitejs\/plugin-vue'\n\nexport default defineConfig({\n    plugins: &#91;\n        vue(),\n        laravel({\n            input: &#91;'resources\/css\/app.css', 'resources\/js\/app.js'],\n            refresh: true,\n        }),\n    ],\n});<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ap\u00f3s essa altera\u00e7\u00e3o vamos iniciar a nossa aplica\u00e7\u00e3o pelo terminal chegando at\u00e9 a pasta raiz da mesma e rodando o comando &#8220;npm run dev&#8221;. Isso ir\u00e1 inicializar o servidor Vite que ir\u00e1 rodar em background, lendo os seus assets JS e CSS. Na verdade, nada mais \u00e9 do que um watch que ir\u00e1 escutar as altera\u00e7\u00f5es dos seus arquivos <strong><em>resources\/js\/app.js<\/em><\/strong> e <strong><em>resources\/css\/app.css<\/em><\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Exemplo pr\u00e1tico<\/strong><br>Ap\u00f3s toda a parte de configura\u00e7\u00e3o do framework, vamos criar alguns exemplos pr\u00e1ticos:\n<ul class=\"wp-block-list\">\n<li> <strong>Criando um app Vue<\/strong><br>No arquivo &#8220;resources\/js\/app.js&#8221; adicione o seguinte c\u00f3digo:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import {createApp} from 'vue';\nimport App from '.\/App.vue';\n\ncreateApp(App).mount(\"#app\");<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ainda dentro da pasta &#8220;resources\/js\/app.js&#8221;, crie um arquivo chamado &#8220;App.vue&#8221; e dentro dele cole o conte\u00fado a seguir:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n    Hello world!!!\n&lt;\/template&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dentro da pasta &#8220;resources\/views&#8221;, crie um arquivo chamado app.blade.php e dentro dele vamos colar um c\u00f3digo html simples  apenas para rodar o nosso app vue.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"utf-8\"&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n        &lt;title&gt;Laravel&lt;\/title&gt;\n\n        @vite('resources\/css\/app.css')\n    &lt;\/head&gt;\n    &lt;body class=\"antialiased\"&gt;\n        &lt;div id=\"app\"&gt;&lt;\/div&gt;\n        \n        @vite('resources\/js\/app.js')\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Repare que temos uma div com o id=&#8221;app&#8221;, que \u00e9 onde nossa aplica\u00e7\u00e3o ser\u00e1 carregada, pois l\u00e1 no import utilizamos um &#8220;mount&#8221;, justamente passando esse atributo como seletor.<br><br>Depois, dentro do arquivo de rotas &#8220;routes\/web.php&#8221;, vamos adicionar uma rota para o nosso app:<br><\/li>\n<\/ul>\n\n\n\n<p>Route::get(&#8216;\/appvue&#8217;, function () {<\/p>\n\n\n\n<p>&nbsp; &nbsp; return view(&#8216;app&#8217;);<\/p>\n\n\n\n<p>});<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Feito isso, basta rodar o &#8220;php artisan serve&#8221;, acessar nossa rota citada acima e pronto, temos o nosso Laravel devidamente configurado com Vue 3 e o Vite para nos auxiliar com os webpacks.<br><br>Let&#8217;s code!!!!<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Refer\u00eancias<br><a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener\" title=\"Composer\">https:\/\/getcomposer.org\/<\/a><br><a href=\"https:\/\/github.com\/nvm-sh\/nvm#installing-and-updating\" target=\"_blank\" rel=\"noopener\" title=\"NVM - Install and updating node\">https:\/\/github.com\/nvm-sh\/nvm#installing-and-updating<\/a><br><a href=\"https:\/\/laravel.com\/docs\/9.x\/installation\" target=\"_blank\" rel=\"noopener\" title=\"Laravel Docs\">https:\/\/laravel.com\/docs\/9.x\/installation<\/a><br><a href=\"https:\/\/techvblogs.com\/blog\/how-to-install-vue-3-in-laravel-9-with-vite\" target=\"_blank\" rel=\"noopener\" title=\"Install Vue3 and Laravel with vite\">https:\/\/techvblogs.com\/blog\/how-to-install-vue-3-in-laravel-9-with-vite<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Configurando o ambiente de desenvolvimento com Laravel 9, VueJs 3 e Vite<\/p>\n","protected":false},"author":1,"featured_media":3456,"comment_status":"open","ping_status":"closed","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[23,12,24,22],"class_list":["post-3458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ambientes-de-desenvolvimento","tag-javascript","tag-php","tag-vitejs","tag-vuejs"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/posts\/3458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/comments?post=3458"}],"version-history":[{"count":23,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/posts\/3458\/revisions"}],"predecessor-version":[{"id":3499,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/posts\/3458\/revisions\/3499"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/media\/3456"}],"wp:attachment":[{"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/media?parent=3458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/categories?post=3458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tiagofick.com.br\/site\/wp-json\/wp\/v2\/tags?post=3458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}