事情的开始是这样子的...
产品: 咱们要作一个公众号推广活动,跟渠道方合做的,巴拉巴拉...
我: 好的...
项目上线后没几天,产品又找上我说,咱们要新增一个渠道合做方
我一听,心中大为警戒,以我多年的经验来判断,问了一句,除了这个后面还会不会有别的合做方
产品: 不必定,可能还会有,¥%……webpack
so... 仍是要作好那种能够配置的,稍微自动的。web
访问一个地址,怎么去区分不一样渠道商呢?编程
只有一个办法就是url里面添加 channel
字段区分,去匹配相应的渠道内容。session
而后,如今要作的是就把以前,全部的可能会变更的内容,都提取出来... 统一文件格式,名称等...ide
之后就单独改这一个文件就行了。工具
初步看来仍是不错的,可是低估了公司的影响力,渠道商愈来愈多,修改文件,也变得枯燥无味,也占用时间,还会担忧影响到其它页面的内容,都要自测一遍。代码预览以下post
export default { data () { return { channel: '', channelName: { xeskids: '学而思kids', jiazhangbang: '家长帮', hangzhouxes: '杭州学而思', hefeixes: '合肥学而思', huizhouxes: '惠州学而思', shenzhenxhxt: '深圳小猴学堂', zhongshanxes: '中山学而思', zhongshanysx: '中山幼升小', jiazhangbangbc: '家长帮编程', nanningxes: '南宁学而思', shaoxingxes: '绍兴学而思', shenzhenxes: '深圳学而思', tianjinxes: '天津学而思', }, guideText: { xeskids: '学而思kids', jiazhangbang: 'codemonkey', hangzhouxes: 'codemonkey', hefeixes: 'codemonkey', huizhouxes: 'codemonkey', shenzhenxhxt: 'codemonkey', zhongshanxes: 'codemonkey', zhongshanysx: 'codemonkey', jiazhangbangbc: 'codemonkey', nanningxes: 'codemonkey', shaoxingxes: 'codemonkey', shenzhenxes: 'codemonkey', tianjinxes: 'codemonkey', }, guideImages: { xeskids: require('@/assets/image/fission/xeskids/guide.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/guide.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/guide.png'), hefeixes: require('@/assets/image/fission/hefeixes/guide.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/guide.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/guide.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/guide.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/guide.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/guide.png'), nanningxes: require('@/assets/image/fission/nanningxes/guide.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/guide.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/guide.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/guide.png'), }, giveImages: { xeskids: require('@/assets/image/fission/xeskids/give.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/give.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/give.png'), hefeixes: require('@/assets/image/fission/hefeixes/give.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/give.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/give.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/give.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/give.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/give.png'), nanningxes: require('@/assets/image/fission/nanningxes/give.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/give.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/give.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/give.png'), }, topPic: { xeskids: require('@/assets/image/fission/xeskids/toppic.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/toppic.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/toppic.png'), hefeixes: require('@/assets/image/fission/hefeixes/toppic.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/toppic.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/toppic.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/toppic.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/toppic.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/toppic.png'), nanningxes: require('@/assets/image/fission/nanningxes/toppic.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/toppic.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/toppic.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/toppic.png'), }, channelEwm: { xeskids: require('@/assets/image/fission/xeskids/ewm.jpg'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/ewm.jpg'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/ewm.jpg'), hefeixes: require('@/assets/image/fission/hefeixes/ewm.jpg'), huizhouxes: require('@/assets/image/fission/huizhouxes/ewm.jpg'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/ewm.jpg'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/ewm.jpg'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/ewm.jpg'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/ewm.jpg'), nanningxes: require('@/assets/image/fission/nanningxes/ewm.jpg'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/ewm.jpg'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/ewm.jpg'), tianjinxes: require('@/assets/image/fission/tianjinxes/ewm.jpg'), }, gzhImages: { xeskids: require('@/assets/image/fission/xeskids/gzh.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/gzh.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/gzh.png'), hefeixes: require('@/assets/image/fission/hefeixes/gzh.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/gzh.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/gzh.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/gzh.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/gzh.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/gzh.png'), nanningxes: require('@/assets/image/fission/nanningxes/gzh.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/gzh.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/gzh.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/gzh.png'), }, dxlj: { xeskids: require('@/assets/image/fission/xeskids/dxlj.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/dxlj.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/dxlj.png'), hefeixes: require('@/assets/image/fission/hefeixes/dxlj.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/dxlj.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/dxlj.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/dxlj.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/dxlj.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/dxlj.png'), nanningxes: require('@/assets/image/fission/nanningxes/dxlj.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/dxlj.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/dxlj.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/dxlj.png'), }, channelLogo: { xeskids: require('@/assets/image/fission/xeskids/logo.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/logo.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/logo.png'), hefeixes: require('@/assets/image/fission/hefeixes/logo.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/logo.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/logo.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/logo.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/logo.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/logo.png'), nanningxes: require('@/assets/image/fission/nanningxes/logo.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/logo.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/logo.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/logo.png'), }, posterTitle: { xeskids: require('@/assets/image/fission/xeskids/posterTitle.png'), jiazhangbang: require('@/assets/image/fission/jiazhangbang/posterTitle.png'), hangzhouxes: require('@/assets/image/fission/hangzhouxes/posterTitle.png'), hefeixes: require('@/assets/image/fission/hefeixes/posterTitle.png'), huizhouxes: require('@/assets/image/fission/huizhouxes/posterTitle.png'), shenzhenxhxt: require('@/assets/image/fission/shenzhenxhxt/posterTitle.png'), zhongshanxes: require('@/assets/image/fission/zhongshanxes/posterTitle.png'), zhongshanysx: require('@/assets/image/fission/zhongshanysx/posterTitle.png'), jiazhangbangbc: require('@/assets/image/fission/jiazhangbangbc/posterTitle.png'), nanningxes: require('@/assets/image/fission/nanningxes/posterTitle.png'), shaoxingxes: require('@/assets/image/fission/shaoxingxes/posterTitle.png'), shenzhenxes: require('@/assets/image/fission/shenzhenxes/posterTitle.png'), tianjinxes: require('@/assets/image/fission/tianjinxes/posterTitle.png'), }, } }, created() { this.channel = sessionStorage.getItem('channel') }, }
能够看到引入文件里面占用了大部分重复的东西,引入图片不一样的地方就是渠道文件夹名称。优化
一个个新增渠道也是很以为很麻烦的事情,复制粘贴修改,再滚动复制粘贴修改...ui
这种低级效率的事情,实在不想写,怎么办...this
不慌,有webpack这么强大的工具固然要好好利用,经过 require.context
去处理引入文件问题。而后经过keys()遍历文件夹下的文件。
具体功能,能够访问require.context
了解,就很少说啦
这时候代码优化以下:
const modulesFiles = require.context('@/assets/image/fission', true, /\guide.(png|jpg)$/) const modulesFilesKeys = modulesFiles.keys().map(file => { return file.replace(/(^.\/)(\w+)(\/guide.(png|jpg))/, '$2') }) // console.log(modulesFilesKeys) const guideImages = {} const giveImages = {} const topPic = {} const gzhImages = {} const dxlj = {} const channelLogo = {} const posterTitle = {} const channelEwm = {} modulesFilesKeys.forEach(name => { guideImages[name] = require(`@/assets/image/fission/${name}/guide.png`) giveImages[name] = require(`@/assets/image/fission/${name}/give.png`) topPic[name] = require(`@/assets/image/fission/${name}/toppic.png`) gzhImages[name] = require(`@/assets/image/fission/${name}/gzh.png`) dxlj[name] = require(`@/assets/image/fission/${name}/dxlj.png`) channelLogo[name] = require(`@/assets/image/fission/${name}/logo.png`) posterTitle[name] = require(`@/assets/image/fission/${name}/posterTitle.png`) channelEwm[name] = require(`@/assets/image/fission/${name}/ewm.jpg`) }) export default { data () { return { channel: '', channelName: { xeskids: '学而思kids', jiazhangbang: '家长帮', hangzhouxes: '杭州学而思', hefeixes: '合肥学而思', huizhouxes: '惠州学而思', shenzhenxhxt: '深圳小猴学堂', zhongshanxes: '中山学而思', zhongshanysx: '中山幼升小', jiazhangbangbc: '家长帮编程', nanningxes: '南宁学而思', shaoxingxes: '绍兴学而思', shenzhenxes: '深圳学而思', tianjinxes: '天津学而思', nanjingxes: '南京学而思', xiamenjzb: '厦门家长帮', }, guideText: { xeskids: '学而思kids', jiazhangbang: 'codemonkey', hangzhouxes: 'codemonkey', hefeixes: 'codemonkey', huizhouxes: 'codemonkey', shenzhenxhxt: 'codemonkey', zhongshanxes: 'codemonkey', zhongshanysx: 'codemonkey', jiazhangbangbc: 'codemonkey', nanningxes: 'codemonkey', shaoxingxes: 'codemonkey', shenzhenxes: 'codemonkey', tianjinxes: 'codemonkey', nanjingxes: 'codemonkey', xiamenjzb: 'codemonkey', }, guideImages, giveImages, topPic, channelEwm, gzhImages, dxlj, channelLogo, posterTitle, } }, created() { this.channel = sessionStorage.getItem('channel') }, }
可是,如今并无达到个人目的。 渠道商名字 channelName
, 用来复制公众号回复的guideText
,仍须要手动修改。
有没有办法不手动修改这些数据呢?
问题一直都有的,解决问题的办法也老是会有的...(引用某我的常常说的话😂)
引入文件,能够正则匹配文件名,不就能够获取到了嘛。。。
新建一个txt文件,把渠道名称做为文件名。
最终优化代码以下:
const channelName = {} const modulesFiles = require.context('@/assets/image/fission', true, /\/[\s\S]+\.txt$/) // 匹配对应渠道.txt文件 const modulesFilesKeys = modulesFiles.keys().map(file => { let regResult = file.replace(/^.\/(\w+)\/([\s\S]+).txt/, '$1,$2') let fileName = regResult.split(',')[0] // 匹配对应渠道文件夹名字 let txtName = regResult.split(',')[1] // 匹配对应渠道.txt文件名 channelName[fileName] = txtName return fileName }) // console.log(modulesFilesKeys) const guideText = {} const guideImages = {} const giveImages = {} const topPic = {} const gzhImages = {} const dxlj = {} const channelLogo = {} const posterTitle = {} const channelEwm = {} modulesFilesKeys.forEach(name => { // 根据渠道文件夹名字访问该渠道下的资源 guideText[name] = name === 'xeskids' ? '学而思kids' : 'codemonkey' guideImages[name] = require(`@/assets/image/fission/${name}/guide.png`) giveImages[name] = require(`@/assets/image/fission/${name}/give.png`) topPic[name] = require(`@/assets/image/fission/${name}/toppic.png`) gzhImages[name] = require(`@/assets/image/fission/${name}/gzh.png`) dxlj[name] = require(`@/assets/image/fission/${name}/dxlj.png`) channelLogo[name] = require(`@/assets/image/fission/${name}/logo.png`) posterTitle[name] = require(`@/assets/image/fission/${name}/posterTitle.png`) channelEwm[name] = require(`@/assets/image/fission/${name}/ewm.jpg`) }) export default { data () { return { channel: '', channelName, guideText, guideImages, giveImages, topPic, channelEwm, gzhImages, dxlj, channelLogo, posterTitle, } }, created() { this.channel = sessionStorage.getItem('channel') }, }
之后再新增渠道,只须要渠道新建文件夹,以及该渠道下的各个资源,上去文件就能够啦,不再用担忧修改代码的问题了。✌️✌️✌️