vue 服务端渲染 nuxt.js

Nuxt.js是Vue进行SSR的一个优选开源项目,可免去繁琐的Webpack、nodejs后台服务配置等操作,方便的搭建一个支持SSR的VUE项目,据说尤大神曾去拜访过其作者,且多次在微博提及该项目。

Nuxt.js官方提供包括中文在内的五种语言文档,安装使用也十分亲民,提供了以下四种vue-cli初始化模板:

starter: Basic Nuxt.js project template


express: Nuxt.js + Express


koa: Nuxt.js + Koa


adonuxt: Nuxt.js + AdonisJS

喜欢自己动手灵活控制的童鞋也可以直接创建package.json,然后安装nuxt

npm i nuxt --S

最后在根目录创建pages的即可自动生成路由

由于Nuxt.js官方文档目前已经覆盖了大部分常用需求,这里不多拷贝,下面说一下使用中遇到的一些官方介绍不充分的地方。

1、代理

本地开发经常api跨域,常用node提供api代理服务来绕过该问题,Nuxt.js默认模板自然也提供了该能力,在官方找github找到modules目录,下面就有提供基于axios的代理模块配置,具体参考https://github.com/nuxt-community/modules/tree/master/modules/proxy

目前该模块只支持默认模板,不过express、koa等将Nuxt.js以中间件形式渲染视图的情况下,我们依然可以手动注册Nuxt.js中间件或者以纯express、koa应用形式配置proxy中间件。

2、第三方库引用

官方不屏蔽你正常的import,但有提供插件模式且推荐使用插件模式,比如我想把element-ui和nuxt.js结合做后台管理系统,有些欠缺,经过第三方博客等了解尝试,得出如下配置

第一步,plugins目录下创建element-ui.js(或你自己喜欢的名字,只需后续配置时对应插件名为文件名即可),写入:

import Vue from 'vue'

import Element from 'element-ui'

Vue.use(Element)

第二部,根目录找到或者创建nuxt.config.js配置文件,按照官方指引,配置plugins如下:

plugins: [{src: '~plugins/element-ui', ssr: true}]

ssr配置为true表示服务端渲染,因为Nuxt.js做到了前后端同构且首屏服务端渲染,后续客户端渲染,1.1.0之前element-ui不支持服务端渲染,需要配置ssr:false,且插件内指定只适用于客户端构建,只目前最新版已完美支持,无需关注此项

全局需要的样式也需要在nuxt.config.js配置

css: ['element-ui/lib/theme-default/index.css']

如果希望element-ui这样的第三方库打包进vendor文件,需要在build下的vendor项配置

vendor: ['element-ui']

第三部,按需加载

注释掉前面的配置,使用babel插件,在build下配置babel,安装插件babel-plugin-component

npm i babel-plugin-component -D

配置插件如下

babel: {

  plugins: [['component', [

    {

      'libraryName': 'element-ui',

      'styleLibraryName': 'theme-default'

    },

    'transform-async-to-generator',

    'transform-runtime'

  ]]],

  comments: false

}

使用时按照常规,我们根据需要导出个别组件并注册到Vue,然后正常使用即可。其他的如vux、mint-ui都可以如此配置使用,可以大大降低打包文件大小。

下面是我demo配置文件实例,贴出来以便参考

module.exports = {

  /*

  ** Headers of the page

  */

  head: {

    title: '博客',

    meta: [

      {charset: 'utf-8'},

      {name: 'viewport', content: 'width=device-width, initial-scale=1'},

      {hid: 'description', name: 'description', content: '博客'}

    ],

    link: [

      {rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'}

    ]

  },

  /*

  ** Customize the progress-bar color

  */

  loading: false,

  /*

  ** Build configuration

  */

  css: ['element-ui/lib/theme-default/index.css'],

  plugins: [{src: '~plugins/element-ui', ssr: true}],

  modules: [

    // npm install @nuxtjs/proxy -D

    ['@nuxtjs/proxy']

  ],

  proxy: {

    '/api': {

      pathRewrite: {'^/api': '/api'},

      target: 'http://127.0.0.1:8080'

    }

  },

  build: {

    publicPath: '/resources/',

    filenames: {

      vendor: 'vendor.[hash].js',

      app: 'static.[chunkhash].js'

    },

    vendor: ['element-ui'],

    babel: {

      plugins: [['component', [

        {

          'libraryName': 'element-ui',

          'styleLibraryName': 'theme-default'

        },

        'transform-async-to-generator',

        'transform-runtime'

      ]]],

      comments: false

    },

    /*

    ** Run ESLINT on save

    */

    extend (config, ctx) {

      if (ctx.isClient) {

        config.module.rules.push({

          enforce: 'pre',

          test: /\.(js|vue)$/,

          loader: 'eslint-loader',

          exclude: /(node_modules)/

        })

      }

    }

  }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 22,987评论 8 125
  • 01.加了简叔的微信 简叔是极简生活的代表人,刷手机时看到他的微信,申请成功。今后朋友圈多了一个榜样,让自己的生活...
    羽佳成长故事阅读 195评论 0 0
  • 今天把杨帆的国际私法走了一遍。 把柏浪涛的刑法攻略中关于罪数和刑罚走了一遍。
    嘻嘻妹子阅读 208评论 0 1
  • 核心提示:耶鲁计算机科学教授David Gelernter 提出过「世界流」(Worldstream)的概念。以通...
    Oralzl阅读 454评论 0 1