欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Nuxt学习(vue项目移植)

时间:2023-07-28

目录

1.简单创建Nuxt项目 

2.vue迁移nuxt

3.nuxt学习

4.配置nuxt在linux中的运行环境 

        4.1node

        4.2nginx

5.部署在linux服务器

6.ssr渲染,利于seo


1.简单创建Nuxt项目 

首先配置全局nuxt脚手架

npm install -g create-nuxt-app

在你想要的目录下创建nuxt项目 

npx create-nuxt-app seo

我选择的如下

这是一个插件,类型于message(element-ui),安装如下

npm install @nuxtjs/toast

然后在config配置

plugins: [ { src: "~/plugins/ElementUI", ssr: true }, { src: '~/plugins/main', ssr: true }, { src: "@plugins/vue-quill-editor", ssr: false }, ],

2.vue迁移nuxt

具体细节不说了,我就是参考如下链接,有效

vue-cli3整体迁移至服务端渲染nuxtjs

vue项目改造nuxt 利于seo - BlancheWang - 博客园

vue-cli3整体迁移至服务端渲染nuxtjs - 古兰精 - 博客园

我选择的是把根目录变成src那个方案

附上我的nuxt.config.js和目录结构参考

export default { server:{ port:3000, host:'0.0.0.0' }, srcDir: 'src/', mode: 'universal', // Global page headers: https://go.nuxtjs.dev/config-head head: { title: '金瑞祥贴金首页-专业贴金箔-贴金箔价格-大理石刻字[不满意不收费]', htmlAttrs: { lang: 'en' }, meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: '「经营范围~地道」:【贴金装潢】|【佛像贴金】|【大理石贴金】|【大理石刻字】|【庙宇装潢】|【酒店贴金】|【金字招牌】|【网站工程】 「十年老厂」 「联系电话」:13951638402"' }, {hid:'keywords',name:'keywords',content:'贴金箔,刻字,佛像贴金,公司门牌,贴金工艺'}, { name: 'format-detection', content: 'telephone=no' } ], link: [ { rel: 'icon', type: 'image/x-icon', href: '~/static/favicon.ico' } ] }, // Global CSS: https://go.nuxtjs.dev/config-css css: [ "element-ui/lib/theme-chalk/index.css", "~/assets/css/global.css", '~/assets/font/iconfont.css', 'quill/dist/quill.snow.css', 'quill/dist/quill.bubble.css', 'quill/dist/quill.core.css' ], // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins plugins: [ { src: "~/plugins/ElementUI", ssr: true }, { src: '~/plugins/main', ssr: true }, { src: "@plugins/vue-quill-editor", ssr: false }, ], // Auto import components: https://go.nuxtjs.dev/config-components components: true, // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules buildModules: [ ], // Modules: https://go.nuxtjs.dev/config-modules modules: [ '@nuxtjs/toast', '@nuxtjs/axios', '@nuxtjs/router' ], toast: { position: 'top-center', duration: 2000 }, axios: { proxy: true, //开启代理 credentials: true, //跨域请求需使用凭证 }, proxy: [ ['/api', { target: 'http://127.0.0.1:9000', // (后端请求地址) changeOrigin: true, pathRewrite: { '^/api': '' } }] ], // Build Configuration: https://go.nuxtjs.dev/config-build build: { }}

对应目录结构如下

3.nuxt学习

推荐链接,觉得不错,不是每个知识点都测过

值得注意一点就是:created里面调用this.$content.xxxx.xxx(定义的类似于常量的)

如果那个main.js文件没有被ssr:true那么,就无法获取this.$content.xxxx.xxx

plugins: [ { src: "~/plugins/ElementUI", ssr: true }, { src: '~/plugins/main', ssr: true }, { src: "@plugins/vue-quill-editor", ssr: false }, ],

nuxt搭建高能SEO商城(一) - 知乎

上面这个值得注意一点就是asyncData用法

https://www.jb51.net/article/166900.htm

上面的知识点不少 

4.配置nuxt在linux中的运行环境 

4.1node

在linux中下载node,跟着步骤不会报错的,路径都可以成功

wget https://npm.taobao.org/mirrors/node/v14.15.4/node-v14.15.4-linux-x64.tar.xz

解压 

xz -d node-v14.15.4-linux-x64.tar.xztar -xvf node-v14.15.4-linux-x64.tar

软链接 

ln -s /usr/local/node-v14.15.4-linux-x64/bin/node /usr/local/bin/nodeln -s /usr/local/node-v14.15.4-linux-x64/bin/npm /usr/local/bin/npm

node -v

pm2安装

ln -sf /usr/local/node-v14.15.4-linux-x64/bin/pm2 /usr/local/bin/pm2

pm2 list

 简单操作

查看当前守护进程 :pm2 list停止所有的应用程序:pm2 stop all停止某个应用程序:pm2 stop id重启所有应用程序:pm2 restart all关闭并删除所有应用:pm2 delete all删除指定应用:pm2 delete id

4.2nginx

nginx安装搭建Nginx服务器_江河地笑的博客-CSDN博客

ftp资源服务器那,可以不配,直接放在文件里也可以

ftp资源服务器 搭建FTP资源服务器_江河地笑的博客-CSDN博客

只需要改点nginx.conf,代码如下

# nuxt startupstream nuxttest{ #分配需要代理的服务 server localhost:3000; #代理本地的nuxt服务}server { listen 80; server_name jinruixiang.top; #你的域名 location / { proxy_pass http://nuxttest; # 代理upstream模块(这里不能直接代理端口否则_nuxt文件目录无法找到) index index.html index.htm; # try_files $uri $uri/ /index.html; #解决页面刷新404问题 } # 这边是我配置的ftp资源服务器,搭建在我博客里 location /files {alias /home/user-file/files; }}# nuxt end

5.部署在linux服务器

首先把前端nuxt项目下的几个文件放到linux中,放在一个文件夹下

 再依次执行

npm install

npm start (属于一关闭服务器就打不开网站了)

用pm2管理(持久):pm2 start npm --name 你项目的名称 -- run start

我后端是用springboot写的打成jar包放在服务器里是9000端口

nohup java  -jar xxx.jar &

然后浏览器输入jinruixiang.top

可以了,这个nuxt我才学了一天多,还有很多不太懂的地方,如果有写错的地方,希望可以斧正!

6.ssr渲染,利于seo

优化seo基础分为两步,第一步是tdk,懂得都懂,就是标题描述关键字,Nuxt好设置呢,可以全局设置也可以局部设置,无需其他操作

全局

export default { server:{ port:3000, host:'0.0.0.0' }, srcDir: 'src/', mode: 'universal', // Global page headers: https://go.nuxtjs.dev/config-head head: { title: '金瑞祥贴金首页-专业贴金箔-贴金箔价格-大理石刻字[不满意不收费]', htmlAttrs: { lang: 'en' }, meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: '「经营范围~地道」:【贴金装潢】|【佛像贴金】|【大理石贴金】|【大理石刻字】|【庙宇装潢】|【酒店贴金】|【金字招牌】|【网站工程】 「十年老厂」 「联系电话」:13951638402"' }, {hid:'keywords',name:'keywords',content:'贴金箔,刻字,佛像贴金,公司门牌,贴金工艺'}, { name: 'format-detection', content: 'telephone=no' } ], link: [ { rel: 'icon', type: 'image/x-icon', href: '~/static/favicon.ico' } ] },}

局部

export default { head: { title: '金瑞祥贴金留言页-贴金价格留言-贴金联系方式-老板评价', meta: [ { hid: 'description', name: 'description', content: '金瑞祥贴金经营数十年,不满意不收费,精通【贴金装潢】|【佛像贴金】|【大理石贴金】|【大理石刻字】|【庙宇装潢】' },{ hid: 'keywords', name: 'keywords', content: '南京佛像贴金,公司门牌,刻字' } ], },}

第二步是ssr服务端渲染,也就是动态页面可以提前渲染

比如我这个留言页面,如果我不进行ssr渲染,我这个div标签里面就没有留言的信息,如果我进行ssr服务端渲染,div里面就填充了从数据库获取过来的数据,如下图所示(Safari浏览器,来源标签里面的文件,div内容是处于倒数几十行) 

如何做到呢?

{{ item.username | mobilePhoneFilter }}

{{ item.content }}

{{ item.createTime }}

//上面这是我如何用这些数据//下面是使用asyncData提前渲染import axios from 'axios'export default { async asyncData() { let queryInfo= { query: "", pageNum: 1, pageSize: 6, } let rs = await axios.get("/api/comment/all", { params:{ ...queryInfo } }); return { comment_list:rs.data.comments, total:rs.data.total }; },}

然后给大家整个更复杂点,比如是文章列表页面,点击文章标题进入详情,这里采用的是路由传参id嘛,既然asyncData无法获取this.route。。。就用asyncData中的context

export default { async asyncData(context) { console.log(context.params.id); let rs = await axios.get("/api/article/articleDetails", { params: { id: context.params.id, }, }); let article = rs.data.article; let nextArticle = {}; let preArticle = {}; if (rs.data.nextArticle !== null) { nextArticle = rs.data.nextArticle; } else { nextArticle.title = "已经是最后一篇了"; } if (rs.data.preArticle !== null) { preArticle = rs.data.preArticle; } else { preArticle.title = "已经是第一篇了"; } return { article: article, nextArticle: nextArticle, preArticle: preArticle, }; },

 对应实现的网站是金瑞祥贴金首页-专业贴金箔-贴金箔价格-大理石刻字[不满意不收费]

希望可以给大家带来帮助,喜欢就点个赞吧

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。