PHP全栈工程师技术专题iOS技术专题uni-app

uni-app 多站点部署针对static 等静态资源访问以及跨

2019-11-09  本文已影响0人  Raybon_lee

冷静一下心情:


30v33r30j1g.jpg
问题: 最近有一批项目是uni-app 开发的,外包团队给的源码部署后出现了图片资源无法访问等现象
            

解决方案:这个涉及到前台和服务器之间的配置, 除了配置,代码上也需要调整,下面给出单站点和多站点访问的设置

1. 单站点访问

{
    "name" : "******",
    "appid" : "****",
    "description" : "",
    "versionName" : "1.0.0",
    "versionCode" : "100",
    "transformPx" : false,
    "debug" : false,
    /* 5+App特有相关 */
    "app-plus" : {
        "usingComponents" : true,
        "nvueCompiler" : "uni-app",
        "splashscreen" : {
            "alwaysShowBeforeRender" : true,
            "waiting" : true,
            "autoclose" : true,
            "delay" : 0
        },
        /* 模块配置 */
        "modules" : {},
        /* 应用发布信息 */
        "distribute" : {
            /* android打包配置 */
            "android" : {
                "permissions" : [
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                ]
            },
            /* ios打包配置 */
            "ios" : {},
            /* SDK配置 */
            "sdkConfigs" : {}
        }
    },
    /* 快应用特有相关 */
    "quickapp" : {},
    /* 小程序特有相关 */
    "mp-weixin" : {
        "appid" : "",
        "setting" : {
            "urlCheck" : false
        },
        "usingComponents" : true
    },
    "mp-alipay" : {
        "usingComponents" : true
    },
    "mp-baidu" : {
        "usingComponents" : true
    },
    "mp-toutiao" : {
        "usingComponents" : true
    },
    "h5" : {
        "title" : "--------",
        "router" : {
            "mode" : "hash",
            "base" : "/" // 注意此处的base 并不是给访问的路由增加前缀的 和下面的publicPath 要区分开
        },
        "publicPath" : "/"   // 此处的单站点直接设置为 `/` 就行
    }
}

"h5" : {
        "title" : "--------",
        "router" : {
            "mode" : "hash",
            "base" : "/" 
        },
        "publicPath" : "/"  // 注意是 yarn build:h5 才会使用这个路径
    }
<view class="detail_title"  @click="pulldown(index)">
        <img src="static/bill_icon_water@2x.png" class="detail_type"/>
                    {{items.ln_policy_title}}
        <img src="static/bill_icon_pulldown_pressed@2x.png" class="detail_jian" :class="{xuan:index == indexa&&detail == true}" />
</view>

2. nginx 多站点 h5 访问时部署


    server {
    listen 80;
    server_name h5.example.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/h5.example.com/;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-73.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/h5.example.com.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location /graphql-file {
        proxy_pass https://www.example.com/graphql-file;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    }
    
   # 代理访问
    location /graphql {
        proxy_pass https://www.example.com/graphql;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    
    location ^~ /pay {
        index index.html index.htm;
        autoindex on;
        alias /www/wwwroot/h5.example.comfrontend/pay/dist/build/h5;
    }
    
    location ^~ /notice {
        index index.html index.htm;
        autoindex on;
        alias /www/wwwroot/h5.example.com/notice/dist/build/h5;
    }

    
    location ^~ /work {
        index index.html index.htm;
        autoindex on;
        alias /www/wwwroot/h5.example.com/work/dist/build/h5;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log /dev/null; 
    }

    location / {
        try_files $uri $uri/ /index.html;
      }
    
    access_log  /www/wwwlogs/access.log;
    error_log  /www/wwwlogs/error.log;

}

3. 前后端分离的针对跨域的设置

location ^~ /api {
        proxy_pass https://api.h5.example.com/api;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    }

4. 总结:

标注 新增加的,是自己测试中发现的一个加载问题

说个问题, uni-app 内部如果加载的静态资源图片大于 8192 字节 时,采用 / 方式加载, 如果是 小于这个数值 采用 @ 符号进行处理,
具体可查看 先关文档 【webpack url-loader】url-loader

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192
            }
          }
        ]
      }
    ]
  }
}

以上是在处理 uni-app 时候的一个兼容问题

上一篇下一篇

猜你喜欢

热点阅读