美文网首页
eggjs+vue+nginx配置

eggjs+vue+nginx配置

作者: 随风飞2019 | 来源:发表于2020-07-20 17:57 被阅读0次

    1.第一种方式,nginx处理静态文件,遇到api接口做反向代理

    //vue开发中,vue.config.js配置如下
    proxy: {
                '/api': {
                    target: 'http://127.0.0.1:7001',
                    ws: true,
                    changeOrigin: true,
                    pathRewrite: {
                        "^/api": ""
                    }
                },
            },
    
    //vue正常打包到dist目录,放到nginx上,配置如下
    gzip on;
    gzip_static on;   // 开启静态资源压缩,需要webpack配置打包压缩插件,见底部compression-webpack-plugin配置
    server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   html;
                index  index.html index.htm;
                try_files $uri $uri/ /index.html;    // 启用history模式
                add_header Cache-Control "no-cache";   // 协商缓存,304,优先使用ETag协商模式
              }
    
          location /api/ {
                  proxy_pass   http://127.0.0.1:7001/;
                }
        }
    
    //这里特别注意,api前后有/,7001后面有/
    

    2.第二种方式,EggJS给Vue单页面提供静态服务

    1.  config/plugin.js开启静态插件
      exports.static={
      enable: true,
    }
    2. config/config.default.js中配置静态文件存放的文件夹
    config.assets = {
        publicPath: '/public/',
      }
    3. 配置路由,访问 /时,去请求index控制器的get方法
    router.get('/', controller.index.get);
    4. 配置controller,读取index.html文件, 以html形式返回给请求方
    const fs = require('fs')
    const path = require('path')
    async get() {
        let { ctx } = this;
        ctx.response.type = 'html'
        ctx.body = fs.readFileSync(path.resolve(__dirname, '../public/index.html'))
      }
    
    5. 前端修改打包输出配置
    publicPath: '../public',
    outputDir: 'dist',
    
    如上操作,把打包后的dist目录内容,复制到egg/app/public目录下,即可正常打开静态文件。
    
    如果需要正常可以访问接口:
    1.需要把跨域部分devServer注释,
    2.封装axios时的baseURL注释掉,
    即可正常访问接口
    
    如上,完成eggjs部署。
    
    compression-webpack-plugin插件的使用
    该插件可以压缩vue静态资源,生成gz结尾的文件(多生成一份gz文件)
    如果不压缩,直接使用nginx的gzip on;属于服务器动态压缩,浪费性能
    这里webpack打包压缩,会生成静态资源的gz包,放到服务器上以后,开启nginx的gzip_static on;属于静态压缩,不浪费服务器资源
    我们通常使用这个方案,虽然包稍微大了一点,但服务器请求速度杠杠的
    npm install compression-webpack-plugin --save-dev
    高版本可能会有问题,我这里踩坑后制定使用了5.0.1版本
    下面是在vue.config.js里配置webpack
    const CompressionPlugin = require('compression-webpack-plugin')
    const compress = new CompressionPlugin({
        filename: info => {
            return `${info.path}.gz${info.query}`
        },
        algorithm: 'gzip',
        threshold: 10240,   //这里是大于10KB的就压缩
        test: new RegExp(
            '\\.(' + ['js'].join('|') +
            ')$'
        ),
        minRatio: 1, // 只有压缩率小于这个值的资源才会被处理
        deleteOriginalAssets: false // 删除原文件
    })
    
    configureWebpack: {
            name: name,
            resolve: {
                alias: {
                    '@': resolve('src')
                }
            },
            externals: {
                'axios': 'axios',
                'dayjs': 'dayjs',
                'crypto-js': 'CryptoJS',
                'vue': 'Vue',
                'vue-router': 'VueRouter',
                'vuex': 'Vuex',
                'element-ui': 'ELEMENT'
            },
            plugins: [compress]
        },
    

    相关文章

      网友评论

          本文标题:eggjs+vue+nginx配置

          本文链接:https://www.haomeiwen.com/subject/xevykktx.html