[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Leonardo Diniz Souza
Criador Leonardo Diniz Souza 24/01/2020

Qual a maneira correta de trabalhar com javascript modular no laravel? No caso javascript puro(vanilla), pois nesse formato não posso importar usando a tag script, aparece uma mensagem no console dizendo q o uso do import é apenas no js modular.

Manager Carlos Ferreira 24/01/2020

Olá amigo!

No Laravel mix você pode definir diversos entry points e trabalhar com N arquivos JS

Exemplo, crie um arquivo .js em resources/js/meu-arquivo.js

E no arquivo do Laravel Mix defina esse novo entry point:
mix.js('resources/js/app.js', 'public/js')
    .js('resources/js/meu-arquivo.js', 'public/js/nome-customizado.js');

Agora em qualquer parte do seu projeto (pode usar o recurso de stacks: https://www.youtube.com/watch?v=iNJ1cP9keyo) inclua o novo arquivo js:
<script src="{{ url('public/js/nome-customizado.js') }}"></script>

Carlos Ferreira
Criador Leonardo Diniz Souza 24/01/2020

Fiz o processo mas ainda retorna o erro de sintaxe:

SyntaxError: import declarations may only appear at top level of a module

conteudo do arquivo:

import Likes from './models/Likes';

const curtir = new Likes();
 
 

gulpfile.js:
 
 
var elixir = require('laravel-elixir');

elixir(function (mix) {
mix.sass('app.scss')
.scripts('app.js', 'public/js')
.scripts('likesController.js', 'public/js/likesController.js');
});

 

Leonardo Diniz Souza
Manager Carlos Ferreira 24/01/2020

Qual a versão do Laravel você está usando?
Ainda utiliza o elixir, provavelmente é <= 5.3

Isso daqui gerou o seu arquivo customizado likesController?
.scripts('likesController.js', 'public/js/likesController.js')

Já tem muito tempo que não o elixir, porque ele foi descontinuado.
Mas, experimente passar um array no primeiro parâmetro do scripts
.scripts(['pathDoArquivoAqui.js'], 'public/js/likesController.js');

Carlos Ferreira
Criador Leonardo Diniz Souza 24/01/2020

O arquivo foi gerado. A versao do laravel é a 5.1. Ele reclama do uso do import no js ao executar a página, assim o javascript não é executado.Seria talvez o caso da transpilacao? Desde q atenda os requisitos, eu consigo atualizar a versão do laravel mantendo o q ja tenho? Seria recomendado?

 

Leonardo Diniz Souza
Manager Carlos Ferreira 24/01/2020

Me dê mais detalhes desse erro (upload imagem: https://imgur.com/upload), está nesse import aqui?
import Likes from './models/Likes';

Ou, o erro está quando o elixir vai importar o arquivo definido em scripts()?

Carlos Ferreira
Criador Leonardo Diniz Souza 24/01/2020

o script está gerando os arquivos normalmente. O arquivo app.js está como veio padrão, não mexi nele. No console ele dá a mensagem declarações de importação podem ser feitas apenas no nivel superior de um módulo


Segue as imagens:

https://imgur.com/a/OrX7tFR

 

Leonardo Diniz Souza
Manager Carlos Ferreira 24/01/2020

No arquivo likesController.js você experimentou não fazer esse import, só para analisar se ainda sim gera o erro?
Deixe no arquivo likesController.js apenas:
console.log('likesController')

------------

Experimente não usar a sintaxe de importação do ES6, mas sim do common js:
const Likes = require('./models/Likes')

------------

Seu código está OK, isso me parece ser uma limitação do elixir.

Carlos Ferreira
Criador Leonardo Diniz Souza 24/01/2020

De fato há algo estranho, usando o require ele dá a seguinte mensagem:

ReferenceError: require is not definedlikesController.js:1:14

    <anonymous> http://localhost:8000/js/likesController.js:1
 
Resolvi criar o script todo no mesmo arquivo, por hora vai atender.


Obrigado.
Leonardo Diniz Souza
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!