目录
相信有很多小伙伴在前端学习中都会有从vue2转向vue3的这么一个阶段,从而有的时候会将vue2的习惯带到vue3,小编就是如此,一个本地public文件夹的动态引入问题,下面小编来简单说明一下。
小编通过webpack的官方文档看到:
也就是说,它可以通过require来引入模块。webpack 会解析require,然后将这些模块按照指定的规则生成对应的资源。说明在vue2使用webpack打包时,我们是可以通过require动态引入资源的。这也是我们在写vue2时为什么使用require的原因
当然除此之外还能使用require引入自定义模块,例如:
- // CommonJS
- const myModule = require('./path/my/module');
-
- // ES Modules
- import myModule from './path/my/module';
这两种方法在vue2项目中是都可行的,只是由于我们平常都用的js,从而import引入成了我们默认的习惯。
require
关键字引入模块的。ESM
方式加载模块,使用require方法事会给我们报错:Uncaught (in promise) ReferenceError: require is not defined
new URL('静态资源路径', import.meta.url).href
html页面 ——
- <img
- :src="getAssetsFile(`@/assets/images/witsz/icon_${item.roomStatus}.png`)" // 动态渲染静态资源图片的路径
- alt=""
- class="img_icon"
- />
js方法——(可以封装成公共的方法)
- /**
- * 引入本地图片
- * @param {*} src
- * @returns
- */
- export const getAssetsFile = (url) => {
- const urlArr = String(url).split('/') // 通过'/'分割成数组
- const prefix = urlArr.slice(-2)[0] // 获取倒数第二个值
- const fileName = urlArr.slice(-1)[0] // 获取最后一个值
- return new URL(`../assets/images/${prefix}/${fileName}`, import.meta.url).href // 使用vite推荐的方法渲染
- }