最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

使用Nuxt.js改造已有項(xiàng)目的方法

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:10:32
文檔

使用Nuxt.js改造已有項(xiàng)目的方法

使用Nuxt.js改造已有項(xiàng)目的方法:前言 如果我們需要對(duì)現(xiàn)有的vue項(xiàng)目進(jìn)行ssr改造,使用nuxt.js是一個(gè)不錯(cuò)的選擇。這里用作例子的現(xiàn)有項(xiàng)目是一個(gè)高仿餓了么外賣(mài)APP的spa。不過(guò)我沒(méi)有把全部功能開(kāi)發(fā)出來(lái)(全部做出來(lái)就不得了了),只是做出幾個(gè)基本界面意思意思 下面就以這個(gè)d
推薦度:
導(dǎo)讀使用Nuxt.js改造已有項(xiàng)目的方法:前言 如果我們需要對(duì)現(xiàn)有的vue項(xiàng)目進(jìn)行ssr改造,使用nuxt.js是一個(gè)不錯(cuò)的選擇。這里用作例子的現(xiàn)有項(xiàng)目是一個(gè)高仿餓了么外賣(mài)APP的spa。不過(guò)我沒(méi)有把全部功能開(kāi)發(fā)出來(lái)(全部做出來(lái)就不得了了),只是做出幾個(gè)基本界面意思意思 下面就以這個(gè)d

前言

如果我們需要對(duì)現(xiàn)有的vue項(xiàng)目進(jìn)行ssr改造,使用nuxt.js是一個(gè)不錯(cuò)的選擇。這里用作例子的“現(xiàn)有項(xiàng)目”是一個(gè)“高仿”餓了么外賣(mài)APP的spa。不過(guò)我沒(méi)有把全部功能開(kāi)發(fā)出來(lái)(全部做出來(lái)就不得了了),只是做出幾個(gè)基本界面意思意思

 

下面就以這個(gè)demo為小白鼠進(jìn)行ssr改造

準(zhǔn)備

現(xiàn)有目錄

 

很明顯,這是使用vue-cli搭建的項(xiàng)目

其中prod.server.js是build之后的啟動(dòng)文件

dataa.json文件是模擬數(shù)據(jù),在build/dev-server.js中會(huì)用到它

安裝與配置

安裝nuxt

npm install --save-dev nuxt

新建nuxt文件夾

我們需要在根目錄下建立一個(gè)nuxt文件夾,該文件夾的內(nèi)部組織按照nuxt本身的應(yīng)用目錄架構(gòu)進(jìn)行組織(參考)

 

注意,在static目錄下有一個(gè)logo.png,它將作為項(xiàng)目圖標(biāo),在nuxt.config.js中這張圖片的地址直接寫(xiě)成/logo.png。下一節(jié)會(huì)對(duì)nuxt文件夾的組織進(jìn)行詳細(xì)說(shuō)明。

新建并設(shè)置nuxt.config.js

當(dāng)然,我們也需要在根目錄下創(chuàng)建nuxt.config.js文件用于組織Nuxt.js 應(yīng)用的個(gè)性化配置,在這個(gè)項(xiàng)目中,需要進(jìn)行設(shè)置的點(diǎn)有:

  1. 源碼目錄路徑
  2. head中的meta以及l(fā)ink(主要是圖標(biāo))
  3. 全局的css樣式
  4. 項(xiàng)目中需要使用圖片和字體文件,雖然nuxt默認(rèn)對(duì)其進(jìn)行配置,但我們需要重新定義部分內(nèi)容(項(xiàng)目中是擴(kuò)大limit)
  5. 項(xiàng)目中使用了sass,需要對(duì)其進(jìn)行配置

所以,nuxt.config.js的代碼如下

module.exports = {
 // 設(shè)置nuxt源碼目錄路徑
 srcDir: "nuxt/",
 head: {
 title: "sell-nuxt",
 meta: [
 {
 charset: "utf-8"
 },
 {
 name: "viewport",
 content: "width=device-width, initial-scale=1,user-scalable=no,maximum-scale=1.0,minimum-scale=1.0"
 }
 ],
 link: [
 {
 rel: "shortcut icon",
 type: "image/png",
 // 注意圖片的路徑直接指向static下的logo.png
 href: "/logo.png"
 }
 ]
 },
 css: [
 "~assets/reset.css"
 ],
 build: {
 vendor: ['axios'],
 loaders: [
 {
 test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
 loader: 'url-loader',
 options: {
  limit: 10000,
  name: 'img/[name].[hash:7].[ext]'
 }
 },
 {
 test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
 loader: 'url-loader',
 options: {
  limit: 10000,
  name: 'fonts/[name].[hash:7].[ext]'
 }
 },
 {
 test: /\.scss$/,
 loader: "vue-style-loader!css-loader!sass-loader"
 }
 ]
 }
}

配置package.json

package.json是npm的配置文件,現(xiàn)在,我們需要對(duì)script選項(xiàng)進(jìn)行配置

"scripts": {
 "dev": "nuxt",
 "build": "nuxt build",
 "start": "nuxt start",
 "generate": "nuxt generate",
 "lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
 "precommit": "npm run lint"
 }

可以參考nuxt的命令列表

改造后的目錄

 

其中有個(gè)nuxt.api.js,這個(gè)文件是為完成ssr改造后的項(xiàng)目提供api接口的,使用koa,運(yùn)行在3001端口

nuxt文件夾組織

因?yàn)槲覀円呀?jīng)把項(xiàng)目代碼開(kāi)發(fā)出來(lái)了,所以nuxt文件夾里面的大部分代碼可以直接從已有代碼中拷貝

layouts

布局目錄 layouts 用于組織應(yīng)用的布局組件,nuxt可通過(guò)添加 layouts/default.vue 文件來(lái)擴(kuò)展應(yīng)用的默認(rèn)布局,在layouts下新建default.vue

<template>
 <div id="app">
 <v-header v-bind:seller="seller"></v-header>
 <v-tab></v-tab>
 <nuxt/>
 </div>
</template>

<script>
 import axios from 'axios';
 // 引入組件
 import header from "~/components/header/header.vue";
 import tab from "~/components/tab/tab.vue";
 export default {
 data:function(){
 return {
 seller:{}
 }
 },
 created:function(){
 axios.get("http://localhost:3001/seller").then(res=>{
 console.log(res.data);
 this.seller = res.data.data;
 });
 },
 components:{
 "v-header":header,
 "v-tab":tab
 }
 }
</script>

<style lang="scss" rel="text/css">

</style>

<nuxt/> 組件用于顯示頁(yè)面的主體內(nèi)容,即“商品”、“評(píng)論”、“商家”這幾個(gè)部分

pages

nuxt依據(jù) pages 目錄結(jié)構(gòu)自動(dòng)生成 vue-router 模塊的路由配置,這無(wú)疑是非常方便的

 

不難看出goods、patings、seller分別對(duì)應(yīng)“商品”、“評(píng)論”、“商家”

這樣子設(shè)置,則nuxt自動(dòng)生成的路由配置如下

router: {
 routes: [
 {
 name: 'index',
 path: '/',
 component: 'pages/index.vue'
 },
 {
 name: 'goods',
 path: '/goods',
 component: 'pages/goods/index.vue'
 },
 {
 name: 'patings',
 path: '/patings',
 component: 'pages/patings/index.vue'
 },
 {
 name: 'seller',
 path: '/seller',
 component: 'pages/seller/index.vue'
 }
 ]
}

但我們希望默認(rèn)進(jìn)入goods,nuxt官方文檔并沒(méi)有說(shuō)如何設(shè)置默認(rèn)路徑,這就是為什么要在pages下面創(chuàng)建一個(gè)index.vue

<template>

</template>

<script>
 export default {
 created:function(){
 this.$router.push('/goods'); // 頁(yè)面加載時(shí)跳轉(zhuǎn)
 }
 }
</script>

<style lang="scss" rel="text/css">

</style>

對(duì)于那些不需要像在pages下的頁(yè)面組件那樣有 asyncData 方法的特性的組件,我們可以將他們放到components目錄下

assets

資源目錄 assets 用于組織未編譯的靜態(tài)資源如 LESS、SASS 或 JavaScript,這個(gè)目錄是我感覺(jué)在引用路徑時(shí)最坑的一個(gè)。
在官方文檔中,每個(gè)目錄都有別名,這些別名在nuxt.config.js中配置時(shí)是有效的,比如之前配置的css選項(xiàng),但不代表我們?cè)诮M件中使用這些別名會(huì)有效,在組件中我們最好使用相對(duì)路徑,比如在components/header/header.vue中就不能直接寫(xiě)~assets,而得老老實(shí)實(shí)寫(xiě)相對(duì)路徑

<style lang="scss" rel="text/css" src="../../assets/base.scss"></style>
<style type="text/css" src="../../assets/style.css"></style>
<style lang="scss" rel="text/css">
 @import "../../assets/mixin.scss";
 @import "./header.scss";
</style>

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用Nuxt.js改造已有項(xiàng)目的方法

使用Nuxt.js改造已有項(xiàng)目的方法:前言 如果我們需要對(duì)現(xiàn)有的vue項(xiàng)目進(jìn)行ssr改造,使用nuxt.js是一個(gè)不錯(cuò)的選擇。這里用作例子的現(xiàn)有項(xiàng)目是一個(gè)高仿餓了么外賣(mài)APP的spa。不過(guò)我沒(méi)有把全部功能開(kāi)發(fā)出來(lái)(全部做出來(lái)就不得了了),只是做出幾個(gè)基本界面意思意思 下面就以這個(gè)d
推薦度:
標(biāo)簽: js 現(xiàn)有 方式
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top