Tengo un proyecto Vue.js simple creado después de ejecutar yarn build . La carpeta dist contiene archivos como los siguientes;
Quiero agrupar todos los archivos (HTML, js, CSS) en un solo archivo js que se pueda incrustar en una publicación de blog fantasma.
Aquí hay un ejemplo de cómo se hizo esto para una publicación de blog fantasma.
https://blog.openbloc.com/incluyendo-una-aplicación-js-en-una-publicación-fantasma/
Mi pregunta es ¿cómo agrupar mis archivos de proyecto Vue.js en un solo archivo que se puede implementar en una publicación de blog fantasma?
¿Es webpack la herramienta adecuada para usar? Estoy abierto a otras alternativas.
Estoy usando @vue/cli 5.0.1, yarn v1.22.17
El vue cli tiene un comando para esto: https://cli.vuejs.org/guide/build-targets.html#library
Debe pasar este comando --target lib a la compilación vue-cli-service build . Esto significa que solo desea un archivo final.
Además, puede pasar otros atributos, como:
--inline-vue , que incluirá el Vue en su paquete, lo que se recomienda, según su caso de uso;--name , el nombre de su archivo de paquete;src/Vue.js por defecto, pero puede ser main.js , por ejemplo. Tienes que probar en función de cómo creaste tu aplicación;Entonces, puedes probar una de estas combinaciones:
vue-cli-service build --target lib vue-cli-service build --target lib --inline-vue vue-cli-service build --target lib --inline-vue --name myApp vue-cli-service build --target lib --inline-vue --name myApp src/main.js Para configurar Vue CLI para generar un solo archivo .js :
css.extract=false .configureWebpack.optimization.splitChunks=false . // vue.config.js const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ ⋮ css: { extract: false, 1️⃣ }, configureWebpack: { optimization: { splitChunks: false, 2️⃣ }, }, }) Luego, la compilación produce un directorio dist que contiene estos archivos:
dist/js/app.bd71ae48.js # all app code, including template, scripts, and styles dist/js/app.bd71ae48.js.map # source map for development (optional) dist/favicon.ico # favicon shown in browser (optional) dist/index.html # initial index (optional)
En el bloque HTML, agregue un div con una ID que coincida con el punto de montaje en src/main.js desde la fuente original de su aplicación (la ID predeterminada es "app" ).
<div id="app">Vue app loading...</div> Agregue un <script> que extraiga el archivo app.js creado previamente. Por ejemplo, si ha alojado la secuencia de comandos en GitHub, podría usar un enlace CDN como este:
<script src="https://cdn.jsdelivr.net/gh/tony19-sandbox/vue-cli-single-js-file@master/dist/js/app.bd71ae48.js"></script> Noté que el ícono y el encabezado de Vue de la aplicación están alineados incorrectamente (probablemente debido a los estilos Ghost heredados), así que compénselo agregando un <style> al bloque HTML que los vuelve a centrar.
<style> /* compensate for Ghost styles overriding the app's alignment */ #app { display: flex; flex-direction: column; align-items: center; } </style>El resultado se ve así:
