W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
配置 Nuxt.js 應(yīng)用生成靜態(tài)站點(diǎn)的具體方式。
當(dāng)運(yùn)行 nuxt generate 命令或在編碼中調(diào)用 nuxt.generate() 時(shí),Nuxt.js 會(huì)使用 generate 屬性的配置。
nuxt generate 生成的目錄名稱。
配置是否允許 vue-devtools 調(diào)試。
如果您已經(jīng)通過 nuxt.config.js 或其他方式激活,則無論標(biāo)志為 true 或者 false,devtools都會(huì)啟用。
在將生成的站點(diǎn)部署到靜態(tài)主機(jī)時(shí),可以使用此文件。它將回退到模式:mode:'spa'。
兩個(gè)渲染周期之間的間隔,以避免使用來自Web應(yīng)用程序的API調(diào)用互相干擾。
在 Nuxt.js 執(zhí)行 generate 命令時(shí),動(dòng)態(tài)路由 會(huì)被忽略。
例如:
-| pages/
---| index.vue
---| users/
-----| _id.vue
上面的目錄結(jié)構(gòu),Nuxt.js 只會(huì)生成路由 / 對(duì)應(yīng)的靜態(tài)文件。(譯者注:因?yàn)?nbsp;/users/:id 是動(dòng)態(tài)路由) 如果想讓 Nuxt.js 為動(dòng)態(tài)路由也生成靜態(tài)文件,你需要指定動(dòng)態(tài)路由參數(shù)的值,并配置到 routes 數(shù)組中去。
例如,我們可以在 nuxt.config.js 中為 /users/:id 路由配置如下:
module.exports = {
generate: {
routes: [
'/users/1',
'/users/2',
'/users/3'
]
}
}
當(dāng)我們運(yùn)行 nuxt generate 命令時(shí):
[nuxt] Generating...
[...]
nuxt:render Rendering url / +154ms
nuxt:render Rendering url /users/1 +12ms
nuxt:render Rendering url /users/2 +33ms
nuxt:render Rendering url /users/3 +7ms
nuxt:generate Generate file: /index.html +21ms
nuxt:generate Generate file: /users/1/index.html +31ms
nuxt:generate Generate file: /users/2/index.html +15ms
nuxt:generate Generate file: /users/3/index.html +23ms
nuxt:generate HTML Files generated in 7.6s +6ms
[nuxt] Generate done
棒極了,但是如果路由動(dòng)態(tài)參數(shù)的值是動(dòng)態(tài)的而不是固定的,應(yīng)該怎么做呢?
nuxt.config.js
const axios = require('axios')
module.exports = {
generate: {
routes () {
return axios.get('https://my-api/users')
.then((res) => {
return res.data.map((user) => {
return '/users/' + user.id
})
})
}
}
}
nuxt.config.js
const axios = require('axios')
module.exports = {
generate: {
routes (callback) {
axios.get('https://my-api/users')
.then((res) => {
const routes = res.data.map((user) => {
return '/users/' + user.id
})
callback(null, routes)
})
.catch(callback)
}
}
}
在上面的示例中,我們使用來自服務(wù)器的user.id來生成路由,但拋棄其余的數(shù)據(jù)。通常,我們需要從/users/_id.vue中再次獲取它。雖然我們可以這樣做,但我們可能需要將generate.interval設(shè)置為100,以免通過調(diào)用來執(zhí)行。因?yàn)檫@會(huì)增加生成腳本的運(yùn)行時(shí)間,所以最好將整個(gè)用戶對(duì)象傳遞給_id.vue中的context。我們通過將上面的代碼修改為:
nuxt.config.js
import axios from 'axios'
export default {
generate: {
routes () {
return axios.get('https://my-api/users')
.then((res) => {
return res.data.map((user) => {
return {
route: '/users/' + user.id,
payload: user
}
})
})
}
}
}
現(xiàn)在我們可以從/users/_id.vue訪問的payload,如下所示:
async asyncData ({ params, error, payload }) {
if (payload) return { user: payload }
else return { user: await backend.fetchUser(params.id) }
}
默認(rèn)情況下,運(yùn)行nuxt generate將為每個(gè)路由創(chuàng)建一個(gè)目錄并生成index.html文件。
例如:
-| dist/
---| index.html
---| about/
-----| index.html
---| products/
-----| item/
-------| index.html
設(shè)置為false時(shí),將根據(jù)路由路徑生成HTML文件:
-| dist/
---| index.html
---| about.html
---| products/
-----| item.html
注意:使用Netlify或使用HTML回退的任何靜態(tài)托管服務(wù)器,此選項(xiàng)可能很有用。
路由的生成是并發(fā)的,generate.concurrency指定在一個(gè)線程中運(yùn)行的路由數(shù)量。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: