通常我们搭建ssr应用需要自己选择多个组件集成到一起

webpack babel loaders router server-render 各种入口配置等

如果是基于vue+vuex+vue-router组件构建的ssr应用,可以使用nuxt.js

nuxt简化了ssr应用的搭建与开发,并且提供了一整套解决方案,提供了大量的预设

nuxt.js高度集成了常用的组件

包括热更新,vue-meta,css-loader,url-loader,vue-template-loader,vue-router
并且提供了许多预设,包括自动路由,自动chunckhash,定义了资源存放方式,vuex store模块化方式,404页面,加载进度条等等

nuxt.js集成了非常多组件,难得的是在自动化的同时,也保持了自定义配置,可以在根目录下添加nuxt.config.js来配置各种组件

nuxt.js 社区也是非常好,代码提交也很频繁

在个人体验中,整个使用过程中很少有理解错误的地方,也不会出现集成方面的错误,官方有一个nuxt/nuxtjs.org项目,参考这个项目就很容易的开发出ssr应用

初始化应用很简单,只需要几行代码就能创建好一个简单的应用

npm init
npm i nuxt

打开package.json,在scripts中加入

scripts:[
  "start" : "nuxt"
]

添加pages/index.vue,并写入:

<template>
  <div>
    <h1>Welcome!</h1>
  </div>
</template>

<script>
export default {
  head: {
    title: "Home page"
  }
};
</script>

运行

npm start

然后就可以在浏览器看到页面了,在开发过程中不需要关闭预览服务器,添加修改文件nuxt都会自动热更新到界面上

添加站点图标
站点图标是一个全局的link,可以在nuxt.config.js中配置

module.exports = {
  head: {
    link: [{
      ref: "icon",
      type: "image/png",
      href: "/favicon.png"
    }]
  }
}

将favicon.png文件存放到static目录下,static目录存放一些不需要编译打包的文件,可以直接通过 /文件名称 访问

修改打包文件名 nuxt.config.js:

module.exports = {
  build: {
    filename: {
      vendor: "vendor.[hash].js",
      app: "app.[chunckhash].js"
    }
  }
}

这里vendor使用的是hash文件戳,第三方module变更时会自动更新
app使用的是chunckhash,通过入口文件分析,得到所依赖文件的hash来生成文件戳,修改代码时就会变更

打包项目
在package.json scripts中添加

{build: "nuxt build -a"}

运行

npm run build

文件会生成到.nuxt/dist路径下
-a 参数会生成本次构建的依赖分析,通过http://127.0.0.1:8888/ 可以看到各个依赖js的大小

资源文件处理

资源文件统一存放到assets目录下
nuxt使用了url-loader,在文件小于设定大小时,将会dataurl化,大于这个值,将会复制到dist目录
文件使用hash来定义版本号,方便cdn化

<img src="~assets/image.png">

<img src="/_nuxt/img/image.0c61159.png">

nuxt默认会对 png|jpe?g|gif|svg|woff2?|eot|ttf|otf 文件处理,大于1k的文件将会复制处理

不需要修改的静态文件存放到static下,比如 robots.txtsitemap.xml,该目录下的文件会映射至应用的根路径 /

默认路由

nuxt页面文件存放在pages下,会自动根据文件路径和名称自动生成route

pages/index.vue => /
pages/about.vue => /about

pages/user/index.vue => /user/
pages/user/_id/index.vue =>/user/:id?

前后端分离最佳实现,使用Nuxt.js快速搭建单页SSR应用的更多相关文章

  1. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)

    缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...

  2. 前后端分离开发——模拟数据mock.js

    mock.js 生成模拟数据,拦截ajax请求 <script type="text/javascript" src="http://libs.baidu.com/ ...

  3. GO 前后端分离开源后台管理系统 Gfast v2.0.4 版发布

    更新内容:1.适配插件商城,开发环境从后台直接安装插件功能:2.代码生成细节修复及功能完善(支持生成上传文件.图片及富文本编辑器功能):3.增加swagger接口文档生成:4.更新goframe版本至 ...

  4. java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

    前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...

  5. [原创]基于VueJs的前后端分离框架搭建之完全攻略

    首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了, ...

  6. Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(2)

    1.restful api介绍 1.前后端分离的优缺点 1.为什么要用前后端分离 1.pc.app.pad多端适应 2.SPA(单页面应用)开发模式开始流行 3.前后端分离职责不清 4.开发效率问题, ...

  7. 【转】python+django+vue搭建前后端分离项目

    https://www.cnblogs.com/zhixi/p/9996832.html 以前一直是做基于PHP或JAVA的前后端分离开发,最近跟着python风搭建了一个基于django的前后端分享 ...

  8. python+django+vue搭建前后端分离项目

    以前一直是做基于PHP或JAVA的前后端分离开发,最近跟着python风搭建了一个基于django的前后端分享项目 准备工作:IDE,[JetBrains PyCharm2018][webpack 3 ...

  9. 前后端分离-模拟数据之RAP2快速入门

    是啥? RAP是一个可视化接口管理工具 通过分析接口结构,动态生成模拟数据,校验真实接口正确性, 围绕接口定义,通过一系列自动化工具提升我们的协作效率.我们的口号:提高效率,回家吃晚饭! 可视化编辑, ...

随机推荐

  1. 第六章 副词(Les adverbes )

    副词属于不变词类,无性.数变化(tout除外),它的功能是修饰动词.形容词.副词或句子. ➡副词的构成 ⇨单一副词 bien tard hier mal vite tôt très souvent  ...

  2. iso搭建本地源

    1.挂载iso mount -o loop /root/test.iso /mnt/iso 2.新建repo [local] name=local baseurl=file:///mnt/iso/ e ...

  3. HDU 1106 排序 (排序+处理字符串)

    题意:略. 析:按照题目说的,把字符串分割,然后把字符串转成十进制,存起来,可以用数组,我用的向量, 排序一下就OK了.注意的是,要考虑多个5相邻的时候,刚开始没考虑WA了一次. 代码如下: #inc ...

  4. Redis配置总结

    一:常用配置 1.bind,格式为bind 127.0.0.1:这个是很重要的配置,如果bind 127.0.0.1则外部网络是访问不了的(如果外部网络要访问还要开放端口) 2.port,格式为por ...

  5. qq强制聊天工具

    当你想和别人聊天, 别人有不理你的时候可以用上哦!!!特别是情人吵架的时候, 呵呵 复制下面的代码: @echo off title DIY-QQ强制聊天工具color 0a echo. echo.  ...

  6. Git 同步远程仓库

    在你经常使用的命令当中有一个git branch –a 用来查看所有的分支,包括本地和远程的.但是时间长了你会发现有些分支在远程其实早就被删除了,但是在你本地依然可以看见这些被删除的分支. 同步远程分 ...

  7. (匹配)Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  8. inline函数的作用

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...

  9. wsdl 结构解析

    webservice的跨平台特性要求它必须有某种手段来对服务进行自我描述,使不同的语言能正确理解如何调用该服务.webservice通过WSDL(Web Services Description La ...

  10. Visual Studio 6 (VC6)连接Team Foundation Server (TFS 2018),实现源代码的版本管理

    1. 概述 Visual Studio 6(VB6, VC6, Foxpro-)是微软公司在1998年推出的一款基于Windows平台的软件开发工具,也是微软推出.NET开发框架之前的最后一个IDE工 ...