当前位置:   article > 正文

Taro引用微信小程序人脸核身问题总结_faceid-interactive-vedeo-mpsdk

faceid-interactive-vedeo-mpsdk

基础信息

Taro版本 3.0.15

人脸核身SDK:faceid-interactive-video-mpsdk (这个SDK名字可能和腾讯开发文档上的有区别,出现的问题都差不多)

开发预览主包超限

由于小程序主包限制2M,而微信小程序人脸审核SDK就占用500K。如果直接引用人脸核身小程序SDK,加上Taro编译后的胶水代码。在开发的时候就会出现超出2M的情况。

解决方案

  1. 将人脸核身SDK放入分包目录
  2. 修改SDK内部路径代码,由于人脸核身SDK 默认是放在主包目录,内部路径引用也是直接根目录。所以需要根据自己的分包情况修改里面路径引用
    修改faceid-interactive-video-mpsdk内部文件路径引用方法
    1、使用vs code全局搜索替换 举个例子

    搜索替换

    2、自己写个node程序统一处理,有利于后期sdk升级。

上面解决sdk 文件存放问题。但是这样处理还是不够的。因为Taro会把一些公用文件编译打包至comm.js。这个就需要把这个SDK踢出Taro编译。

  1. 修改 config文件夹下面 配置文件 增加copy配置
    1. module.exports = {
    2. outputRoot: `./dev/${process.env.TARO_ENV}`,
    3. defineConstants: {},
    4. copy: {
    5. patterns:
    6. process.env.TARO_ENV === 'weapp'
    7. ? [
    8. {
    9. from: 'src/pages_sub/faceid-interactive-video-mpsdk/',
    10. to: 'dev/weapp/pages_sub/faceid-interactive-video-mpsdk/',
    11. },
    12. ]
    13. : [],
    14. },
    15. mini: {},
    16. h5: {},
    17. };

     

  2. 修改app.config.js,不要将sdk里面的page配置进app.config.js pages 里面,否者Taro还是会编译文件。可使用webpack 插件配合处理app.config.js
    1. export default {
    2. outPushPage: {
    3. subPackages: [
    4. {
    5. root: 'pages_sub',
    6. pages:
    7. process.env.TARO_ENV === 'weapp'
    8. ? [
    9. 'faceid-interactive-video-mpsdk/room/room',
    10. 'faceid-interactive-video-mpsdk/index/index',
    11. ]
    12. : [],
    13. },
    14. ],
    15. },
    16. pages:
    17. process.env.TARO_ENV === 'weapp'
    18. ? []
    19. : [],
    20. subPackages: [
    21. {
    22. root: 'pages_anys',
    23. pages:[]
    24. },
    25. {
    26. root: 'pages_sub',
    27. pages:[]
    28. },
    29. ],
    30. networkTimeout: {
    31. request: 60000,
    32. downloadFile: 100000,
    33. },
    34. debug: false,
    35. };

    config/index.js  增加 webpackChain 配置项

    1. import path from 'path';
    2. const changeAppJson = require('../webpackPlugin/changeAppJson');
    3. function resolvePath(str) {
    4. return path.resolve(__dirname, '..', str);
    5. }
    6. const config = {
    7. projectName: '诺诺网小程序',
    8. date: '2020-10-22',
    9. designWidth: 750,
    10. deviceRatio: {
    11. 640: 2.34 / 2,
    12. 750: 1,
    13. 828: 1.81 / 2,
    14. },
    15. sourceRoot: 'src',
    16. outputRoot: `./dist/${process.env.TARO_ENV}`,
    17. defineConstants: {},
    18. // copy:{
    19. // },
    20. framework: 'react',
    21. mini: {
    22. miniCssExtractPluginOption: {
    23. ignoreOrder: true,
    24. },
    25. csso: {
    26. enable: true,
    27. config: {
    28. // 配置项同 https://github.com/css/csso#minifysource-options
    29. },
    30. },
    31. postcss: {
    32. autoprefixer: {
    33. enable: true,
    34. },
    35. pxtransform: {
    36. enable: true,
    37. config: {
    38. // pxtransform 配置项,参考尺寸章节
    39. selectorBlackList: ['body'],
    40. },
    41. },
    42. url: {
    43. enable: true,
    44. config: {
    45. limit: 1024, // 设定转换尺寸上限
    46. },
    47. },
    48. cssModules: {
    49. enable: true, // 默认为 false,如需使用 css modules 功能,则设为 true
    50. config: {
    51. namingPattern: 'module', // 转换模式,取值为 global/module
    52. generateScopedName: '[name]__[local]___[hash:base64:5]',
    53. },
    54. },
    55. },
    56. compile: {
    57. exclude: [resolvePath('src/pages_anys/utils/crypto-js')],
    58. },
    59. commonChunks (commonChunks) {
    60. // commonChunks 的取值即为默认的公共文件名数组
    61. return commonChunks
    62. },
    63. webpackChain(chain, webpack) {
    64. chain.plugin('changeAppJson').use(changeAppJson);
    65. },
    66. },
    67. h5: {
    68. },
    69. };
    70. module.exports = function (merge) {
    71. if (process.env.TEST_ENV === 'test_domain') {
    72. return merge({}, config, require('./prod_test'));
    73. }
    74. if (process.env.NODE_ENV === 'development') {
    75. return merge({}, config, require('./dev'));
    76. }
    77. return merge({}, config, require('./prod'));
    78. };

    changeAppJson.js 参考:webpack 插件开发

    1. /**
    2. * @desc 将第三方sdk的page手动写入 app.json 不使用Taro打包
    3. *
    4. */
    5. const deepClone = require('./utils');
    6. function ChangeAppJSonPlugin() {}
    7. ChangeAppJSonPlugin.prototype.apply = function (compiler) {
    8. compiler.plugin('emit', function (compilation, callback) {
    9. var filelist = '';
    10. for (var filename in compilation.assets) {
    11. if (filename === 'app.json') {
    12. // 获取app.json 内容
    13. try {
    14. const source = JSON.parse(compilation.assets[filename].source());
    15. const outPushPage = source['outPushPage'];
    16. const newPage = deepClone(outPushPage, source);
    17. delete newPage.outPushPage;
    18. filelist = JSON.stringify(newPage);
    19. } catch (err) {
    20. console.log(err);
    21. callback();
    22. }
    23. }
    24. }
    25. // 将这个列表作为一个新的文件资源,插入到 webpack 构建中:
    26. compilation.assets['app.json'] = {
    27. source: function () {
    28. return filelist;
    29. },
    30. size: function () {
    31. return filelist.length;
    32. },
    33. };
    34. callback();
    35. });
    36. };
    37. module.exports = ChangeAppJSonPlugin;

    到这基本解决 引用SDK编译超限问题。上面只是提供一种解决思路。应该还有其他解决方法,可自行探索。快乐源于探索


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/298019
推荐阅读
相关标签
  

闽ICP备14008679号