引言

主要的坑在于

  1. 服务端的部署 Nginx的配置
  2. 不同终端的适配 rem的引入

    HTTP请求的域名问题

在Nuxt中,前后端共用Axios module

配置文件在nuxt.config.js 的Axios module configuration

baseURL是服务端用的Base URL
browserBaseURL是前端用的Base URL

baseURL: ‘https://tiny-active.xx.com‘, browserBaseURL: ‘https://tiny-active.xx.com

API_URL_BROWSER 可以复写 browserBaseURL
API_URL 可以复写 baseURL

因为在构建镜像的时候就需要写入环境变量,通过k8s写入环境变量的方式并不可取,尤其是前端多个请求域名的情况下

所以我们只能区分BUILD_ENV

在Dockerfile中要这样写 将环境变量写入

  1. "build:test1": "cross-env BUILD_ENV=test nuxt build",
  2. "build:test2": "cross-env BUILD_ENV=test2 nuxt build",
  3. "build:production": "cross-env BUILD_ENV=production nuxt build",

在nuxt.config.js中这样通过webpack写入环境变量

  1. env: {
  2. baseUrl: process.env.BASE_URL || 'http://api.test.shouqianba.com/v4'
  3. },

在前端请求的时候直接写绝对路径

script引入

通过vue-meta

__dangerouslyDisableSanitizers: [‘script’]

image.png

link引入

通过vue-meta

  1. link: [
  2. { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
  3. { rel: 'stylesheet', type: 'text/css', href: '/reset.css' }
  4. ],

如何添加 vue plugin

image.png

autoprefixer

默认支持,配置一下.browserlistrc即可

px转rem

在nuxt.config.js build选项中
image.png

中间件

在配置文件中修改

  1. // nuxt.config.js
  2. router: {
  3. // 在每页渲染前运行 middleware/user-agent.js 中间件的逻辑
  4. middleware: 'user-agent'
  5. },
  6. //middleware/user-agent.js
  7. import { isSqb } from '@/utils/device'
  8. export default function(context) {
  9. // 给上下文对象增加 userAgent 属性(增加的属性可在 `asyncData` `fetch` 方法中获取
  10. const userAgent = process.server
  11. ? context.req.headers['user-agent']
  12. : navigator.userAgent
  13. context.isSqb = isSqb(userAgent)
  14. }

上下文对象的参数可以在asyncData方法中取得
image.png

部署

image.png

package.json要这样设置

  1. "scripts": {
  2. "build": "npm run lint && nuxt build && npm start",
  3. "start": "nuxt start"
  4. }

使用pm2做进程守护

pm2 start npm —name “nuxt-ssr-demo” — run bui