加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Vue服务器端渲染nuxt.js初探

发布时间:2019-01-31 18:11:39 所属栏目:优化 来源:佚名
导读:开头还是来一段废话: 年关将近,给大家拜个早年,愿大家年会都能抽大奖,来年行大运。 废话不多说,直接进正文。 项目环境: 前端vue项目, 需要将新增的几个路由页面做seo处理。 在调研 插件 prerender-spa-plugin后,发现无法满足 vuex 以及 plugins 等

params.statusCode 可用于指定服务端返回的请求状态码。

  1. asyncData ({ params, error }) {  
  2. return axios.get(`https://my-api/posts/${params.id}`)  
  3. .then((res) => {  
  4. return { title: res.data.title }  
  5. })  
  6. .catch((e) => {  
  7. error({ statusCode: 404, message: 'Post not found' })  
  8. })  
  9. }  

第三方插件的使用

例如:element-ui

需要在 plugins/ 中 添加 element-ui.js

  1. import Vue from 'vue'  
  2. import Element from 'element-ui/lib/element-ui.common'  
  3. import locale from 'element-ui/lib/locale/lang/en'  
  4. export default () => {  
  5. Vue.use(Element, { locale })  
  6. }  

在 uuxt.config.js 中

  1. plugins: [  
  2. "~/plugins/element-ui",  
  3. // {src : '~/plugins/ga.js' , ssr : false} 是否做ssr处理, false时为在客户端才加载  
  4. ],  

这样全局就可以使用了

注意:

在使用第三方插件时需要注意 插件内部很多地方都会用到window对象,在服务端会报错,所以需要将ssr设置为false

在生产环境中, 有一些插件,在多个页面中引用,这样会造成多次加载打包的现象

所以: 在 build配置项中增加配置

  1. build: {  
  2. vendor:['axios', 'qs'], // 防止多次打包  
  3. }  

page 函数钩子生命周期 以及window 对象

经常会在 第三方组件或者调用的时候 遇到window对象报错问题。

  1. asyncData() {  
  2. console.log(window) // 服务端报错  
  3. console.log(this) // undefined  
  4. },  
  5. fetch() {  
  6. console.log(window) // 服务端报错  
  7. },  
  8. created () {  
  9. console.log(window) // undefined  
  10. },  
  11. mounted () {  
  12. console.log(window) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}  
  13. }  

Vue服务器端渲染nuxt.js初探

css js 文件打包文件夹处理

在 uuxt.config.js 中,只需配置生产环境中。

  1. build: {  
  2. extractCSS: { allChunks: true }, // css 独立打包 link 的形式加载  
  3. publicPath: '/sample/assets/', //sample/essays 打包的默认路径为 ‘_nuxt’ 或者可以指定cdn 域名  
  4. filenames:{ // css 和 js img 打包时指定文件夹  
  5. app: ({ isDev }) => isDev ? '[name].js' : '[chunkhash].js',  
  6. chunk: ({ isDev }) => isDev ? '[name].js' : '[chunkhash].js',  
  7. css: ({ isDev }) => isDev ? '[name].js' : '[contenthash].css',  
  8. img: ({ isDev }) => isDev ? '[path][name].[ext]' : '[hash:7].[ext]'  
  9. }  
  10. },  

输出 css link 路径: /sample/essays/[contenthash].css

注意: 静态资源文件路径名 不能和页面路由名称相同 publicPath 默认配置 '/' 无效

部署

先 npm run build 打包 client文件和 server 文件。

然后 npm runb start 启动服务器。

pm2 管理:

  1. pm2 start npm --name "my-nuxt" -- run start 

部署时 需要注意 如果是 从其他地方重定向 到 nuxt 环境中的页面是, 需要额外配置一个 css / js 重定向路由,并且需要注意 header头部信息,防止出现 css 文件返回头部信息为 Content-Type text/plain。

目前项目中只运用到这么多,后续项目迁移时遇到更多的问题会做补充,如果大家遇到过其他的坑点可以在下面评论中总结出来以及解决方案。

【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读