美文网首页
用 Nuxtjs 写个单页面应用

用 Nuxtjs 写个单页面应用

作者: 思考蛙 | 来源:发表于2018-11-19 20:54 被阅读0次

Nuxt.js 是一个基于 Vue.js 的通用应用框架。通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染。
一直以来网页的制作优先考虑的都是传统的技术方案,但有了 Nuxt 后,我们有了不一样的选择,利用 VUE 技术去开发一个网页应用是非常便捷和复用性很强的,并且如果需要非 SSR 版本的应用,只需要 nuxt generate 的命令即可生成我们所需的静态网页。

先看个示例:
示例页面

image.png

这个示例页,采用了免费的 netlify 服务进行部署静态页面,有兴趣可以去了解了下,它可以方便的从 git 服务如 github 上直接构建并部署。

这个示例页面的源码在文章未尾中给出,现在我们来看一下如何去得用 vue nuxtjs 去制作一个这样的页面应用:

1 构建项目

npx create-nuxt-app <项目名>

2 页面建立

由于当前只有一个主页,我们只要在 pages 目录下建立一个 index.vue 即可

├── pages
│   ├── README.md
│   └── index.vue

index.vue 的内容如下

<template>
  <div
    id="app"
    style="position: relative;">

    <c-nav @toggleWechat="toggleWechat"/>

    <main
      id="#customers"
      class="customers customer-page">
      <c-hero/>
      <c-features />
      <code-sample />
      <customer :case-data="cases"/>
      <c-footer /> 
    </main>
  </div>
</template>


<script>
  import CHero from '~/components/CHero.vue'
  import CNav from '~/components/CNav.vue'
  import CFooter from '~/components/CFooter.vue'
  import CFeatures from '~/components/CFeatures.vue'
  import CodeSample from '~/components/CodeSample.vue'
  import Customer from '~/components/Customer.vue'
  import { filter, isEmpty } from 'lodash'

  export default {
    components: {
      CHero,
      CNav,
      CodeSample,
      Customer,
      CFooter,
      CFeatures
      // Logo
    },
    async asyncData({ app }) {
      const response = await fetch('/data/cases.json')
      const json = await response.json();
      return {
        cases: json.cases
      }
    },

    data () {
      return {
        textCases: [],
        rollCases: [],
        isQrShow: false
      }
    },
    methods: {
      toggleWechat () {
        this.isQrShow = !this.isQrShow
      },
      wxEnter: function() {
        this.isQrShow = true
      },
      modalClick: function() {
        this.isQrShow = false
      }
    }
  }
</script>

我们将页面中的功能分解成各个组件,Logo、Nav、Hero、Features、CodeSample、Customer、Footer,各组件中的代码详见文尾的源码库

编写好页面后,我们去配置我们的网页应用的 Meta 以及 header 中的信息

打开 nuxt.config.js 配置如下

const pkg = require('./package')

module.exports = {
  mode: 'spa',

  /*
  ** Headers of the page
  */
  head: {
    title: pkg.name,
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: pkg.description }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },

  /*
  ** Customize the progress-bar color
  */
  loading: { color: '#fff' },

  /*
  ** Global CSS
  */
  css: [
    {src: '~assets/scss/front.scss'},
  ],

  /*
  ** Plugins to load before mounting the App
  */
  plugins: [
    {src: '~/plugins/pixi', ssr: false},
    {src: '~/plugins/mpshow', ssr: false},
    '~/plugins/prism'
  ],

  /*
  ** Nuxt.js modules
  */
  modules: [
    '@nuxtjs/axios'
  ],

  axios: {
    // proxyHeaders: false
    proxyHeaders: false,
    credentials: false
  },

  /*
  ** Build configuration
  */
  build: {
    /*
    ** You can extend webpack config here
    */
    extend(config, ctx) {
      // Run ESLint on save
      if (ctx.isDev && ctx.isClient) {
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
      }
    }
  }
}

在页面中由于我们用到了一些第三方的库和 nuxt 的一个社区模块 axios 去请求一些必要的 json 数据,需要将这些库安装到我们的项目中

yarn add @nuxtjs/axios
yarn add gasp
yarn add lodash
yarn add node-sass
yarn add sass-loader
yarn add pixi.js
yarn add simplex-noise
…

其中 sass 相关的包是处理我们的SCSS 样式文件,而 gasp、pixi.js、simplex-noise 是处理 Customer 组件的无限加载客户案例效果所需要的

一切准备就绪后,我们直接执行下面的命令以 dev 模式查看效果

yarn dev

发布

yarn generate

执行这个命令后,将会生成 dist 目录,将在其中生成类似如下内容

.
├── 200.html
├── README.md
├── _nuxt
├── assets
├── data
├── favicon.ico
├── img
├── index.html
└── tiles.png

将 dist 目录的直接布置至静态服务器即可,如果使用 netlify 的服务,在 Build & deploy 中配置如下:

WechatIMG107.jpg

回到首页,触发部署

WechatIMG68.jpg

-完-

源码库:https://github.com/baisheng/wepy2-homepage
Sketch UI: https://github.com/baisheng/wepy2-design

后记:事实上仅仅用 nuxtjs 去构建一个简单的静态页面是大材小用,但效果和效率还是相当的赞。同属 SSR 技术中,React 的世界中有与 nuxt 对等的 next.js ,而单独为了静态页而出现的框架工具 React 中有 Gatsby, Vue 中有VuePress ,都可以方便去实践网页应用与 H5 应用。

相关文章

网友评论

      本文标题:用 Nuxtjs 写个单页面应用

      本文链接:https://www.haomeiwen.com/subject/mxaafqtx.html