generate 属性配置

  • 类型: Object

配置 Nuxt.js 应用生成静态站点的具体方式。

当运行 nuxt generate 命令或在编码中调用 nuxt.generate() 时,Nuxt.js 会使用 generate 属性的配置。

dir

  • 类型: ‘Sring’
  • 默认值: 'dist'

nuxt generate 生成的目录名称。

minify

  • 类型: Object
  • 默认值:
  1. minify: {
  2. collapseBooleanAttributes: true,
  3. collapseWhitespace: false,
  4. decodeEntities: true,
  5. minifyCSS: true,
  6. minifyJS: true,
  7. processConditionalComments: true,
  8. removeAttributeQuotes: false,
  9. removeComments: false,
  10. removeEmptyAttributes: true,
  11. removeOptionalTags: true,
  12. removeRedundantAttributes: true,
  13. removeScriptTypeAttributes: false,
  14. removeStyleLinkTypeAttributes: false,
  15. removeTagWhitespace: false,
  16. sortAttributes: true,
  17. sortClassName: false,
  18. trimCustomFragments: true,
  19. useShortDoctype: true
  20. }

Nuxt.js 在生成静态文件时使用 html-minifier 对 html 文件进行压缩,你可以修改上述的默认配置来调整压缩的行为。

routes

  • 类型: Array

在 Nuxt.js 执行 generate 命令时,动态路由 会被忽略。

例如:

  1. -| pages/
  2. ---| index.vue
  3. ---| users/
  4. -----| _id.vue

上面的目录结构,Nuxt.js 只会生成路由 / 对应的静态文件。(译者注:因为 /users/:id 是动态路由)
如果想让 Nuxt.js 为动态路由也生成静态文件,你需要指定动态路由参数的值,并配置到 routes 数组中去。

例如,我们可以在 nuxt.config.js 中为 /users/:id 路由配置如下:

  1. module.exports = {
  2. generate: {
  3. routes: [
  4. '/users/1',
  5. '/users/2',
  6. '/users/3'
  7. ]
  8. }
  9. }

当我们运行 nuxt generate 命令时:

  1. [nuxt] Generating...
  2. [...]
  3. nuxt:render Rendering url / +154ms
  4. nuxt:render Rendering url /users/1 +12ms
  5. nuxt:render Rendering url /users/2 +33ms
  6. nuxt:render Rendering url /users/3 +7ms
  7. nuxt:generate Generate file: /index.html +21ms
  8. nuxt:generate Generate file: /users/1/index.html +31ms
  9. nuxt:generate Generate file: /users/2/index.html +15ms
  10. nuxt:generate Generate file: /users/3/index.html +23ms
  11. nuxt:generate HTML Files generated in 7.6s +6ms
  12. [nuxt] Generate done

棒极了,但是如果路由动态参数的值是动态的而不是固定的,应该怎么做呢?

  1. 使用一个返回 Promise 对象类型 的 函数
  2. 使用一个回调是 callback(err, params)函数

返回一个 Promise 对象的函数

nuxt.config.js

  1. const axios = require('axios')
  2. module.exports = {
  3. generate: {
  4. routes: function () {
  5. return axios.get('https://my-api/users')
  6. .then((res) => {
  7. return res.data.map((user) => {
  8. return '/users/' + user.id
  9. })
  10. })
  11. }
  12. }
  13. }

参数是一个 Node 风格的回调函数

nuxt.config.js

  1. const axios = require('axios')
  2. module.exports = {
  3. generate: {
  4. routes: function (callback) {
  5. axios.get('https://my-api/users')
  6. .then((res) => {
  7. var routes = res.data.map((user) => {
  8. return '/users/' + user.id
  9. })
  10. callback(null, routes)
  11. })
  12. .catch(callback)
  13. }
  14. }
  15. }