先说一下踩坑的背景,最近公司新开了个小程序的坑。考虑到后续业务发展还有能够使用vue3 Components Api 来写小程序,然后入了Taro的坑。然后就要面对小程序工程化管理的一个小难题:静态资源的工程化管理。
图片与静态资源的引用方式
Taro官方推荐的写法
// 引用文件
import namedPng from '../../images/path/named.png'
// 使用
<View>
    <Image src={namedPng} />
</View>
但是很明显这是React写JSX引用图片的写法。你写vue总不能这样写。
那么可以理解官方推荐用的vue写法是下面这种
<template>
  <view class="index">
    <view class="index--title">Template Demo</view>
    <!-- <Template/> -->
    <image :src = testImage />
  </view>
</template>
<script>
import { eventCenter, getCurrentInstance, request } from '@tarojs/taro'
import testImage from '../../../assets/test-icon.png';
export default {
  name: 'Template',
  components: {
  },
  setup() {// Components Api 写法
    return {
      testImage,
    }
  },
}
</script>
如何在开发架构内写图片相对路径
写过小程序的同学都明白一个道理,小程序图片资源只支持绝对路径和base64。所以在本地开发原生小程序初期都要弄一堆base64的样式文件撑着。那么用了框架之后可以使用alias这个利器。
在Taro 的框架下可以利用 Taro 的 alias 或者 webpack的 resolve.alias 配置
// Taro config/index.js
const path = require('path');
module.exports = {
  {
    alias: {
      '@image': path.resolve(__dirname, '../src/assets')
    }
  }
};
// Webpack (用webpack写法写在Taro配置里)
module.exports = {
  mini: {
    webpackChain (chain, webpack) {
      chain.merge({
        resolve: {
          alias: {
            '@': path.resolve(__dirname ,'../src/assets')
          }
        },
      })
    }
  },
};
经过alias配置之后就可以在开发小程序过程中使用相对定位的静态资源路径
<template>
  <view class="index">
    <view class="index--title">Template Demo</view>
    <!-- <Template/> -->
    <image src="@image/test-icon.png"/>
    <image :src = testImage />
  </view>
</template>
接下来要做静态资源管理了
有了上述在开发环境对静态资源的定位后,我们需把本地的静态资源打包到cos进行管理。
这里就需要到做到三件事
- 静态资源地址映射成cos地址;
- 构建出的静态资源上传到cos;
- 打包发布文件避免把静态资源一起发布;
静态资源地址映射成cos地址
那么在Taro的配置文件里可以使用output.publicPath来实现,具体写法如下
module.exports = {
  mini: {
    output: {
        publicPath: 'https://static-xxxxxx.cos.ap-xxxx.myqcloud.com/',
    }
  },
}
构建出的静态资源上传到cos
然后我们来配置一个静态资源管理工具wecos
首先全局安装npm i wecos -g
之后配置好wecos.config.js 文件
{
  "appDir": "./dist/assets",
  "cos": {
    "secret_id": "xxxxxxx",
    "secret_key": "xxxxx",
    "bucket": "static-xxxxx",
    "region": "ap-xxxxx",
    "folder": "/czz/assets"
  },
  "watch": false,
  "backupDir": "./wecos_backup",
  "uploadFileSuffix": [".jpg",".png",".gif",".webp",".svg"],
  "uploadFileBlackList": [
  ]
}
然后命令行执行wecos 当然你也可以和构建命令结合起来用,比如npm run build && wecos
打包发布文件避免把静态资源一起发布
最后打包配置参考,微信小程序打包配置规则通过配置project.config.json 中的 packOptions 配置。实现打包忽略需要忽略的文件夹、文件等。
// project.config.josn
{
  "miniprogramRoot": "./dist",
  "projectname": "mini-program",
  "description": "demo小程序",
  "appid": "xxxx",
  "setting": {
    "urlCheck": true,
    "es6": false,
    "postcss": false,
    "minified": false
  },
  "compileType": "miniprogram",
  "packOptions": {
    "ignore": [{
      "type": "folder",
      "value": "assets"
    }]
  }
}
经过这个配置,可以让指定的文件夹不再打包到小程序包里。那我怎么知道配置之后它有没有生效?
首先这个配置,对上传和预览都生效。我们通过预览打包的编译提示可以确定我们的静态资源没有打包上。

这样一来,我们实现了小程序项目图片资源管理的所有工作。
最后
不使用Taro但是也是基于webpack做小程序工程管理的同学也可以参考本文的方案。 如果我的文章对您有帮助可以点赞一下~。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
 
                     
     
        
       
        
       
        
       
        
       
    
发表评论
还没有评论,快来抢沙发吧!