Como incluir um CDN para VueJS CLI sem NPM ou Webpack?

Sou novo na Vuejs ans Webpack. Criei um projecto com o VueJS CLI e a tentar trabalhar com ele. Preciso de inserir um CDN no meu código.

ao trabalhar com soluções padrão de HTML, CSS & JS, incluiria CDNs como este:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>False Merge</title>

    <!-- CDN -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.css"/>

    <!-- StyleSheets -->
    <link rel="stylesheet" href="public/stylesheets/index.css" />
</head>

<body>


    <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
    <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>

    <script src="public/javascripts/index.js"></script>

</body>

</html>

Como pode ver, você pode adicionar um script CDN com a marca de script HTML, e começar a usá-lo no JS.

Estou a tentar fazer o mesmo com o VueJS num componente. Tenho o modelo e o estilo secções prontas.

infelizmente, não sei como adicionar de uma forma simples um CDN para usar imediatamente na etiqueta de script dentro do componente Vue. Tentei fazer isto, mas não está a resultar.

<template>
  <div class="index">
    <div class="container">
      <table id="table_dataset" class="display">
      </table>
    </div>
  </div>
  
</template>

<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>
<script>
  export default {
    name: 'Index',
    data() {
      return { 
      }
    }
  }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

Existe uma maneira de adicionar um CDN (sem Webpack ou NPM) a um componente VueJS?

Author: Fabricio Chacon, 2018-03-17

2 answers

Infelizmente, não, você não pode adicionar uma marca <script> a um componente específico via template .

No seu caso, tem algumas opções:

1: Utilizar NPM

Instale apropriadamente a dependência usando npm

  • Prós: o uso correto do NPM e Webpack; definição de escopo;
  • Cons: o script deve estar disponível como um pacote NPM.
  • nota: quando disponível, esta é a recomendado aproximem-se.
  • Passos:


2: Adicionar <script> marca a index.html

Localizar e dd a marca <script> para o seu index.html

  • prós: a etiqueta <script> está claramente (e declarativamente) adicionado ao código HTML. O script só será carregado uma vez.
  • Cons: o script será carregado globalmente.
  • passos:
    • basta adicionar o <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script> ao fim do ficheiro index.html, de preferência mesmo antes de </body>.

3: Criar a marca <script> programaticamente

A outra alternativa é criar a marca script programaticamente no componente, quando o componente é exausto.

  • prós: o código fica apenas no componente. O seu programa externo só será carregado quando o componente for carregado.
  • Cons: o script ainda estará disponível globalmente assim que for carregado.
  • Passos / Código:

    <script>
      export default {
        name: 'Index',
        data() {
          return { 
          }
        },
        mounted() {
          if (document.getElementById('my-datatable')) return; // was already loaded
          var scriptTag = document.createElement("script");
          scriptTag.src = "https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js";
          scriptTag.id = "my-datatable";
          document.getElementsByTagName('head')[0].appendChild(scriptTag);
        }
      }
    </script>
    
 6
Author: acdcjunior, 2018-03-19 15:35:46

Outra opção é adicionar o programa dentro do Índice.html com v-if directiva

<script v-if="loadGoogleAPI" async defer src="https://apis.google.com/js/api.js" ... ></script>

Dentro do ficheiro do componente (.vue), Se quiser que o programa seja carregado, defina a opção como true:

<script>
export default {
  ...
  loadGoogleAPI: true,
  data() {
  ...
  }
};
</script>
 0
Author: Caner, 2018-03-21 14:59:55