今天聊一聊nuxt.js(上)

来源:http://www.cnblogs.com/zhuanzhuanfe/archive/2017/08/11/7347179.html
-Advertisement-
Play Games

背景 近期在做內部系統的重構,從一線業務徹底的重構,經過充分的考慮我們準備把這個項目打造成前臺業務的試驗站,比如ssr和一些其他的前沿技術的探索,積累充分的經驗後待合適的契機應用到C端的項目中。 既然涉及到重構,避免不了老生常談的話題技術選型。當然開始還是走了一些彎路,因為是後臺項目,最重要的當然是 ...


背景

近期在做內部系統的重構,從一線業務徹底的重構,經過充分的考慮我們準備把這個項目打造成前臺業務的試驗站,比如ssr和一些其他的前沿技術的探索,積累充分的經驗後待合適的契機應用到C端的項目中。 既然涉及到重構,避免不了老生常談的話題技術選型。當然開始還是走了一些彎路,因為是後臺項目,最重要的當然是快速迭代,基於此在UI層我們準備使用開源的方案,目前社區比較成熟的兩種UI庫(antdesign、elementUI)我們拿給UI同學對比,UI同學還是比較傾向於antdesign的,所以我們開始嘗試了幾個社區的react ssr方案,可能是使用姿勢不對或者其他原因,發現打出來的bundle都比較大,這個不是我們期望的...

從新出發,我們的根本目的是要把這個後臺項目打造成試驗站,必然要本著C端項目的技術棧著手,C端的技術棧是基於VUE的,所以開始調研vue ssr的方案,UI庫使用elementUI,部分樣式重寫,整體風格像antdesign靠攏...從社區找到了nuxt.js方案,寫了幾個demo頁面測試渲染性能非常符合預期,而且多頁面方案和我們的C端項目是可以無縫接入的,擼起袖子開乾!

nuxt.js


下麵貼出官網的簡介,官網鏈接nuxtjs.org

The 25th of October 2016, the team behind zeit.co, announced Next.js, a framework for server-rendered React applications. Few hours after the announcement, the idea of creating server-rendered Vue.js applications the same way as Next.js was obvious: Nuxt.js was born.

一個健壯的方案,我覺得必備的就是單元測試的覆蓋率,那今天就從nuxt.js單元測試入手 首先貼一個官網給出的運行機制示意圖 

從圖中可以看出比較重要的就是ta的middleware,第一步呢就是ta的配置文件nuxt.config.js,別說話直接看代碼(鏈接)

// Init nuxt.js and create server listening on localhost:4000
test.before('Init Nuxt.js', async t => {
  const Nuxt = require('../')
  const rootDir = resolve(__dirname, 'fixtures/with-config')
  let config = require(resolve(rootDir, 'nuxt.config.js'))
  config.rootDir = rootDir
  config.dev = false
  nuxt = new Nuxt(config)
  await nuxt.build()
  server = new nuxt.Server(nuxt)
  server.listen(port, 'localhost')
})

 

從這段測試case可以看到是載入了一個配置文件,如下(鏈接)

module.exports = {
  srcDir: __dirname,
  router: {
    base: '/test/',
    middleware: 'noop',
    extendRoutes (routes) {
      routes.push({
        name: 'about-bis',
        path: '/about-bis',
        component: '~pages/about.vue'
      })
    }
  },
  transition: 'test',
  offline: true,
  plugins: [
    '~plugins/test.js',
    { src: '~plugins/offline.js', ssr: false },
    { src: '~plugins/only-client.js', ssr: false }
  ],
  loading: '~components/loading',
  env: {
    bool: true,
    num: 23,
    string: 'Nuxt.js'
  },
  build: {
    extractCSS: true,
    publicPath: '/orion/',
    analyze: {
      analyzerMode: 'disabled',
      generateStatsFile: true
    },
    extend (config, options) {
      config.devtool = 'nosources-source-map'
    }
  },
  css: [
    { src: '~/assets/app.css' }
  ],
  render: {
    static: {
      maxAge: '1y'
    }
  }
}

 

因為框架最近有比較大的升級,所以官網文檔還沒有更新到位,有些東西只能從源碼入手,比如配置文件...

從上面代碼可以清楚看到我們可以配置哪些項,怎麼配置,比如引入公共類庫、引入中間件、打包等等

ta是如何載入中間件的呢(鏈接)

class Module {
  constructor (nuxt) {
    this.nuxt = nuxt
    this.options = nuxt.options
    this.modules = []
    this.initing = this.ready()
  }

  async ready () {
    if (this.initing) {
      await this.initing
      return this
    }
    // Install all modules in sequence
    await sequence(this.options.modules, this.addModule.bind(this))
    return this
  }
  ...
}

 

看到sequence這個函數大家應該就懂了吧,序列化配置項裡面的modules...逐個載入,至於載入機制可以看到調用了addModule方法,以及其他的內容,我們下期在做分析,最後我們還看到了經典的return this...

好了因為是初探,本期主要介紹配置項,先介紹到這裡,繼續碼磚了:)

 

如果你喜歡我們的文章,關註我們的公眾號和我們互動吧。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言:這篇博客主要講下這段時間遇到的小問題。比較雜,我自已當作總結了。 真是尷尬,實習之前我是後臺做的比較多,之前花了一個月較系統學了前端html,css,ajax,bootstrap這些,有興趣可以看看我之前寫的前端博客,感覺寫得還可以,對初學者的話。前程明亮-前端系列。學知識嘛,能系統地學習是最 ...
  • 最近一年,在開發實踐過程中遇到了不少問題,大多都能得到解決 部分知其原理,部分只能做到解決問題,而半年前遇到的問題,或多或少都忘得差不多了 是該記錄一下一些問題,防止再遇到就得再查資料了 1. 瀏覽器在開啟有道劃詞插件的時候,使用 AjaxFileUpload 插件上傳文件報錯 開啟插件時,該插件會 ...
  • 可用於製作分頁標簽. 如: 方法一: display: table-cell; 方法二: 定位 示例代碼如下: ...
  • 立即表達式,在javascript中非常常見, 採用立即表達式可以形成一個局部作用域, 常配合閉包實現模塊化編程等其他用途,接下來我們看看,在大多數的框架中,立即表達式都有哪些寫法,以及需要註意的點,另外再介紹下in操作符的用法 1、 通過小括弧把函數聲明變成表達式, 然後再外面加個小括弧 就可以達 ...
  • 剛開始學的時候,對於find()和filter()有點理不清楚,下麵通過案例相信就可以很快的區分清楚 以下是代碼 find彈出的是 filter()彈出的是 下麵我們添加div的class是rain find()彈出結果是 fliter彈出結果是 通過以上案例,我們就清楚的知道,find()是查找某 ...
  • 一、曾經在讀JQ源碼的時候,對深拷貝算是有了一點的理解。我們在項目中是不是經常會遇到這樣的問題呢? 後臺返回一個數組對象(引用類型).次數在頁面渲染中需要對部分數據進行處理 比如:銀行卡62345092534 (這麼長) 但在頁面顯示的時候, 只顯示中國銀行(3118)但是傳給後臺的時候。又要傳62 ...
  • 一、前言 今天要學習的內容:今天主要是稍微總結一下,頁面中如何用字體代替圖片,省事,省時,方便,實用! 小蘇啰嗦:人都是有惰性的。真的。剛開始我們有一個經驗豐富的美工,加上我們關係又非常好,以至於每次我都是等著她把設計圖給我,我才開始碼html。遇到圖片的地方,會切的就自己切了,不會的,就直接讓美工 ...
  • function fun(){} 和 var fun=function(){}的區別 標題有點長···· 廢話少說,其實他們的主要區別就是“函數聲明的提前行為”. 正常情況下兩種方式都會進行正常的編譯,並輸出“hello world!”,下麵把函數調用放在上面再測一下。 前者不會被提升,後者被提升到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...