cari
Rumahhujung hadapan webView.jsBagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Artikel ini akan memperkenalkan kepada anda cara Vue menggunakan prerender-spa-plugin untuk pra-memaparkan halaman web saya harap ia akan membantu anda.

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

Prapemarahan

Biasanya, projek Vue ialah projek satu halaman, iaitu projek yang diberikan hanya mempunyai satu index.html. [Cadangan berkaitan: tutorial video vue.js]

Kekurangan ini adalah jelas:

  • Untuk menggunakan Nginx, anda perlu melakukan try_files $uri $uri/ /index.html pengalihan dalaman, Hanya kemudian anda boleh mengakses halaman melalui penghalaan.
  • SEO tidak mesra dan kesan pengindeksan enjin carian tidak bagus.

Dan prapemarahan adalah untuk menjadikan single asal index.html ke dalam berbilang direktori, dan setiap direktori mempunyai index.html. Ini menghapuskan keperluan untuk laluan akses ubah hala dalaman dan lebih kondusif untuk kemasukan enjin carian.

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

prapaparan-spa-plugin

prapemarahan ini menggunakan prapaparan-spa-plugin untuk prapemarahan.

Prinsip utamanya ialah untuk memulakan penyemak imbas, ambil HTML selepas pemaparan selesai, dan kemudian buat direktori dan simpannya sebagai index.html.

Nota:

  • Tapak web rasmi pada masa ini hanya mempunyai Demo Vue2.x, yang sebenarnya menyokong Vue3 (demonstrasi ini juga menggunakan Vue3)
  • Walaupun yang terbaru The versi dikeluarkan adalah pada 2018 (versi baharu sepatutnya dikeluarkan baru-baru ini), tetapi ia telah dikekalkan dan boleh digunakan.

Pemasangan

Pertama, kami menggunakan npm untuk memasang:

npm i prerender-spa-plugin

Nota , kerana prerender-spa-plugin akan memasang Chromium, jadi pemasangan akan mengambil masa yang lama.

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

Sudah tentu, kebergantungan ini hanya digunakan semasa pembungkusan. Oleh itu, kaedah pemasangan yang lebih baik hendaklah:

npm i prerender-spa-plugin -D

Rujukan Projek

Sekarang, mari kita ke rujukan projek Kaedah penggunaannya sangat mudah, dan ia mudah untuk disertakan dua tempat:

  • App.vue
  • vue.config.js

App.vue

Pertama sekali, kami menambah peristiwa pencetus dalam App.vue:

mounted() {
  document.dispatchEvent(new Event('render-event'))
}

Menambah pencetus ini akan mencetuskannya secara automatik semasa pembungkusan berikutnya dan pemaparan lengkap.

vue.config.js

Menurut prerender-spa-plugin dokumentasi projek:

const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')

module.exports = {
  plugins: [
    ...
    new PrerenderSPAPlugin({
      // Required - The path to the webpack-outputted app to prerender.
      staticDir: path.join(__dirname, 'dist'),
      // Required - Routes to render.
      routes: [ '/', '/about', '/some/deep/nested/route' ],
    })
  ]
}

Juga diperlukan untuk beberapa penggunaan lanjutan Perkenalkan PuppeteerRenderer untuk penyesuaian. Jadi, konfigurasi vue.config.js saya sendiri:

module.exports = {
    ……
    chainWebpack: config => {
        if (process.env.NODE_ENV == "development") {
        ……
        }
        if (process.env.NODE_ENV == "production") {
            config.plugin("PrerenderSPAPlugin").use('prerender-spa-plugin', [
                {
                    staticDir: path.join(__dirname, 'dist'),
                    routes: [
                        '/', '/processIMG', '/statisticsChars', '/generatePWD', '/calculateTheDate',
                        '/randomNumber', '/textBase64', '/curl', '/mcstatus',
                        '/gh', '/about', '/mdv'
                    ],
                    renderer: new PuppeteerRenderer({
                        headless: false,
                        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
                        // 对应App.vue 
                        renderAfterDocumentEvent: 'render-event',
                    }),
                }])
            ])
        }
    }

Saya menggunakan fungsi rantai. Kelebihannya ialah ia memudahkan saya membuat pertimbangan berfungsi seperti if-else. Antaranya, atribut renderer:

  • headless: Ini ialah atribut headless Chrome, yang biasa digunakan untuk Nyahpepijat. Untuk maklumat lanjut, sila rujuk: Google Chrome
  • executablePath: Ubah hala alamat penyemak imbas saya menggunakan penyemak imbas Chrome yang disertakan dengan komputer saya untuk ubah hala di sini. (Pilihan, anda tidak boleh menambahnya secara langsung, Chromium akan dipanggil secara lalai)
  • renderAfterDocumentEvent: Ia perlu sepadan dengan nama acara document.dispatchEvent(new Event('render-event')) dalam App.vue.

Dan tatasusunan routes mengandungi alamat penghalaan yang perlu pra-diberikan.

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

Sudah tentu, untuk lebih banyak parameter pilihan, anda juga boleh merujuk kepada dokumentasi rasmi:

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

staticDir Perlu menunjuk ke folder output yang disusun.

Selepas membungkus projek

, kami boleh membungkus projek:

npm run build

Kesan selepas pembungkusan:

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

Lihat halaman pra-paparan:

Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin

Oleh kerana saya mempunyai komponen menggunakan Vue-meta, fail pra-paparan juga mempunyai atribut meta.

如果你也想用Vue-meta组件配合prerender-spa-plugin,可以参考文章:

https://juejin.cn/post/7056972997894094861

需要注意,如果出现什么错误,可以尝试:

# 删除项目node_modules
rm -rf node_modules
# 重新安装
npm install

这样的文件,就可以进行部署了。

部署效果

我们使用Nginx进行部署,上次到Nginx Web文件夹内,修改config文件,就不需要:

location / {
  try_files $uri $uri/ /index.html;
}

来实现内部重定向了。因为有真实的目录,可以去掉。

但是,数据代理,最好使用Nginx来实现。比如,开发环境,数据代理:

config.devServer.proxy({
        '/dataApiJava': {
            target: JavaBaseURL,
            pathRewrite: {'^/dataApiJava': ""},
            ws: true,
            changeOrigin: true
        },
        '/dataApiPython': {
            target: PythonBaseURL,
            pathRewrite: {'^/dataApiPython': ""},
            ws: true,
            changeOrigin: true
        },
        '/ghs': {
            target: GithubSpeedURL,
            pathRewrite: {'^/ghs': ""},
            ws: true,
            changeOrigin: true
        }
    }
)

对应的Nginx配置,可以这样写:

location /dataApiPython/{
      proxy_pass http://127.0.0.1:8099/;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header REMOTE-HOST $remote_addr;
      add_header X-Cache $upstream_cache_status;
}
location /dataApiJava/ {
      proxy_ssl_server_name on;
      proxy_pass https://…….cn/;
}
location /ghs/ {
      proxy_ssl_server_name on;
      proxy_pass https://……/gh/;
}

给大家展示三种配置,按需设置哦。

END

到此,我们的前端预渲染就完成了。这样SEO好。但是对比SSR,还是优点欠缺。好处就是部署和配置方便,坏处就是构建麻烦,如果你页面有几十个路由需要预渲染,那么prerender-spa-plugin渲染起来就没SSR方便了。

改天有机会和大家分享分享SSR吧,真不错,又挖一个坑。

另外,是不是有小伙伴好奇,我截图里出现的CompressionPlugin属性?其实是gz压缩啦。有机会和大家分享,使用compression-webpack-plugin来优化项目。

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Bagaimana untuk pra-memaparkan halaman web dalam Vue? Analisis ringkas tentang penggunaan prerender-spa-plugin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:掘金社区. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Vue常见面试题汇总(附答案解析)Vue常见面试题汇总(附答案解析)Apr 08, 2021 pm 07:54 PM

本篇文章给大家分享一些Vue面试题(附答案解析)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

vue中props可以传递函数吗vue中props可以传递函数吗Jun 16, 2022 am 10:39 AM

vue中props可以传递函数;vue中可以将字符串、数组、数字和对象作为props传递,props主要用于组件的传值,目的为了接收外面传过来的数据,语法为“export default {methods: {myFunction() {// ...}}};”。

手把手带你利用vue3.x绘制流程图手把手带你利用vue3.x绘制流程图Jun 08, 2022 am 11:57 AM

利用vue3.x怎么绘制流程图?下面本篇文章给大家分享基于 vue3.x 的流程图绘制方法,希望对大家有所帮助!

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

通过9个Vue3 组件库,看看聊前端的流行趋势!通过9个Vue3 组件库,看看聊前端的流行趋势!May 07, 2022 am 11:31 AM

本篇文章给大家分享9个开源的 Vue3 组件库,通过它们聊聊发现的前端的流行趋势,希望对大家有所帮助!

react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini