共计 2089 个字符,预计需要花费 6 分钟才能阅读完成。
v2.8.x
使用的目的
- 官网支持 SEO
- 加载速度快(考虑服务端渲染)
- 技术栈扩展
静态部署
考虑到只是官网,更新较少,并且较少数据交互
选择了静态部署 在本地生成好了之后才上传到线上
具体开发步骤
基础项目搭建
-
yarn create kz-ow
的方式构建项目 - 选择了 element-ui
- 使用默认的 nuxt 服务器
- 使用 less, 因为 sass 还要额外安装 node-sass 等
- 基本上使用默认配置
nuxt.config.js 配置
head
配置自定义的 head 包含title
, meta
, link
,script
其中通过process.env.NODE_ENV === 'production'
判断是否加载相对域名下的资源
// 例如
const prefix = process.env.SITE_EVN === 'dev' ? '//dev.' : '//'
const assetsPublicPath = 'xxxxx'
// 判断当前资源的 path
const publicPath =
process.env.NODE_ENV === 'production'
? prefix + assetsPublicPath || '':''
const staticPath = publicPath ? publicPath : '/'
link: [{ rel: 'icon', type: 'image/x-icon', href: `/favicon.ico`},
{
rel: 'stylesheet',
type: 'text/css',
href: `${staticPath}css/adapter.css`
},
{
rel: 'stylesheet',
type: 'text/css',
href: `${staticPath}css/animate3.7.css`
}
]
css
设置自定义的css
其中 element-ui
的css
就是在这里引入
css: [
....
'element-ui/lib/theme-chalk/index.css'
]
generate
因为我们主要是使用在官网,直接静态部署即可
但是由于我们是动态路由
而且存在中英文切换多语言版本的时候体现在路由上,
所以写了一个路由生成的函数 按照 ['zh', 'en', 'GB']
来生成路由
modules
通过引入 axios
与 style-resource
增强 nuxt 能力
modules: [
'@nuxtjs/axios',
'@nuxtjs/style-resources'
],
plugins
通过 plugins 提前导入 element-ui
i18n
device-inject
axios
等
plugins: [
'~/plugins/element-ui',
'~/plugins/i18n.js',
'~/plugins/device-inject.js',
'~/plugins/axios'
]
目录
components // 组件库
│ ├── common // 公共组件
│ ├── mobile // 移动端组件
│ ├── pc // pc 端组件
├── config // 一些 nuxt.config 配置使用到的工具函数
│ ├── assetConfig.js
│ ├── common.js
│ ├── generate.js
│ ├── paths.js
│ └── route.js
├── layouts // 使用官方推荐默认 layouts
│ ├── default.vue
│ └── error.vue
├── lib // 新增一些 mixin 和工具函数
│ ├── mixins
│ └── utils
├── locales // 语言包
│ ├── GB.json
│ ├── en.json
│ └── zh.json
├── middleware
│ └── i18n.js // 语言包切换过程中的中间件,主要监听切换路由变换做处理
├── nuxt.config.js // nuxt 基本配置
├── package.json
├── pages // 动态路由
│ ├── _lang
├── plugins // 渲染之前提前加入的插件
│ ├── axios.js
│ ├── cache-error.js
│ ├── device-inject.js
│ ├── element-ui.js
│ └── i18n.js
├── server // nuxt 静态服务器配置
│ ├── IP.js
│ └── index.js
├── server.json
├── static // 静态资源
│ ├── css
│ ├── favicon.ico
│ ├── images
│ └── js
├── store // state 状态管理
│ └── index.js
遇到的坑
支持三种语言切换
- 切换语言的时候给路由设置相对应的语言前缀
- 通过劫持路由变化动态更新语言包 i18n 的语言值
支持移动端和 pc 端的展示,并且能随时切换语言和展示端
- 切换语言设置动态路由
- 在 pages 中提前设置好 pc 端和移动端所对应的组件
发包至线上偶尔会出现页面打开变成 404
[nuxt] Error while initializing app Error : loading chunk 2 failed
- 更新 nuxt 为最新版本(根本原因可能性最高)
- 刷新 cdn 缓存
正文完