Taro使用过程中遇到的问题

2,549 阅读2分钟
微信小程序的分包
  • 基本类似原生微信小程序的分包,原生修改的是app.js;这里调整的是app.config.js
  • 增加subPackage字段,例:
export default {
  pages: ['pages/Login/Login'],
  subPackages: [
    {
      root: 'pages/v1/',
      pages: [
        'broadcastIndex/broadcastIndex',
        'terminalIndex/terminalIndex',
        'broadcastIndex/terminalList/terminalList',
        'medias/medias',
        'settings/settings'
      ]
    },
    {
      root: 'pages/v2/',
      pages: [
        'broadcastIndex/broadcastIndex',
        'terminalIndex/terminalIndex',
        'settings/settings',
        'medias/medias',
        'live/live'
      ]
    }
  ],
  window: {
    backgroundTextStyle: 'light',
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: 'WeChat',
    navigationStyle: 'custom'
  }
};
原生小程序与Taro的兼容
  1. 原生页面可以直接引入
  2. 若原生页面存在引入原生组件的情况下:
  • 如果是主包的page,会自动引入原生组件,但部分编译会出问题,例如对于图片是否转译为base64这块会有差距,可能出现,有的图片明明没有转译但是,打包后的文件却把图片给忽略了。这里的解决方案其实有两种:第一种解决方案:调整config目录下的index.js中微信小程序的mini.postcss.url.limit,把这个值调小,让他不转译成base64。第二种在下边介绍

  • 分包的page打包时不会自动引入原生组件,导致丢失。故需要自行引入。这里我的解决方案是使用copy字段,打包时,将原生组件拷贝至目标目录,供原生页面使用。其实上边的图片丢失的问题也可以用这种方法解决。

    该方案(copy)参考了taro引用vant的思路。

注意:若引入了【miniprogram-computed】等原生微信小程序的插件,注意他们的依赖也需要copy,可能还需要修改引入路径的问题。

例:

const path = require('path'); // eslint-disable-line
const config = {
  projectName: 'miniCBC',
  date: '2021-10-9',
  designWidth: 750,
  deviceRatio: {
    640: 2.34 / 2,
    750: 1,
    828: 1.81 / 2
  },
  sourceRoot: 'src',
  outputRoot: `dist/${process.env.TARO_ENV}`,
  plugins: [],
  defineConstants: {},
  alias: {
    '@/utils': path.resolve(__dirname, '..', 'src/utils'),
    '@/components': path.resolve(__dirname, '..', 'src/components'),
    '@/img': path.resolve(__dirname, '..', 'src/assets/image'),
    '@/api': path.resolve(__dirname, '..', 'src/request/api'),
    '@/page': path.resolve(__dirname, '..', 'src/page')
  },
  copy: {
    patterns: [
      {
        from: 'src/components/vant',
        to: 'dist/weapp/components/vant'
      },
      {
        from: 'src/components/ori_formList',
        to: 'dist/weapp/components/ori_formList'
      },
      {
        from: 'src/components/ori_nodata',
        to: 'dist/weapp/components/ori_nodata'
      },
      {
        from: 'src/components/ori_topper',
        to: 'dist/weapp/components/ori_topper'
      },
      {
        from: 'src/components/miniprogram-computed',
        to: 'dist/weapp/components/miniprogram-computed'
      },
      {
        from: 'src/components/rfdc',
        to: 'dist/weapp/components/rfdc'
      },
      {
        from: 'src/components/fast-deep-equal',
        to: 'dist/weapp/components/fast-deep-equal'
      },
      {
        from: 'src/assets/image/fileType-bg',
        to: 'dist/weapp/assets/image/fileType-bg'
      },
      {
        from: 'src/utils/utils.wxs',
        to: 'dist/weapp/utils/utils.wxs'
      }
    ],
    options: {}
  },
  framework: 'react',
  mini: {
    postcss: {
      pxtransform: {
        enable: true,
        config: {
          selectorBlackList: [/van-/]
        }
      },
      url: {
        enable: true,
        config: {
          limit: 256 // 设定转换尺寸上限
        }
      },
      cssModules: {
        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
        config: {
          namingPattern: 'module', // 转换模式,取值为 global/module
          generateScopedName: '[name]__[local]___[hash:base64:5]'
        }
      }
    },
    enableExtract: true,
    miniCssExtractPluginOption: {
      //忽略css文件引入顺序
      ignoreOrder: true
    }
  },
  h5: {
    publicPath: './',
    staticDirectory: 'static',
    esnextModules: ['taro-ui'],
    postcss: {
      autoprefixer: {
        enable: true,
        config: {}
      },
      cssModules: {
        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
        config: {
          namingPattern: 'module', // 转换模式,取值为 global/module
          generateScopedName: '[name]__[local]___[hash:base64:5]'
        }
      }
    }
  }
};


module.exports = function (merge) {
  if (process.env.NODE_ENV === 'development') {
    return merge({}, config, require('./dev'));
  }
  return merge({}, config, require('./prod'));
};
打包后文件大小处理