vite环境下图片动态引入
开发者使用一个模块时,有时需要知道模板本身的一些信息(比如模块的路径)。现在有一个提案,为 import 命令添加了一个元属性
import.meta
,返回当前模块的元信息。
import.meta
开发者使用一个模块时,有时需要知道模板本身的一些信息(比如模块的路径)。现在有一个提案,为 import 命令添加了一个元属性import.meta
,返回当前模块的元信息。
import.meta
只能在模块内部使用,如果在模块外部使用会报错。
这个属性返回一个对象,该对象的各种属性就是当前运行的脚本的元信息。具体包含哪些属性,标准没有规定,由各个运行环境自行决定。一般来说,import.meta
至少会有下面两个属性。
(1)import.meta.url
import.meta.url
返回当前模块的 URL 路径。举例来说,当前模块主文件的路径是https://foo.com/main.js
,import.meta.url
就返回这个路径。如果模块里面还有一个数据文件data.txt
,那么就可以用下面的代码,获取这个数据文件的路径。
new URL('data.txt',import.meta.url)
注意,Node.js 环境中,import.meta.url
返回的总是本地路径,即是file:URL
协议的字符串,比如file:///home/user/foo.js
。
(2)import.meta.scriptElement
import.meta.scriptElement
是浏览器特有的元属性,返回加载模块的那个<script>
元素,相当于document.currentScript
属性。
// HTML 代码为
// <script type="module" src="my-module.js" data-foo="abc"></script>
// my-module.js 内部执行下面的代码
import.meta.scriptElement.dataset.foo
// "abc"
Vite环境下图片动态引入
require('./profilePic/profile_pic_01.png')
// 等价于
new URL('./profilePic/profile_pic_01.png', import.meta.url).href
require在vite中是不可用的
而import()在vite环境下可用,但是在css in js不可用.
new URL()
创建一个新 URL 对象的语法:
url —— 完整的 URL,或者仅路径(如果设置了 base),
base —— 可选的 base URL:如果设置了此参数,且参数 url 只有路径,则会根据这个 base 生成 URL。
显而易见:
../assets/blogPhotos/${name}.jpg是相对路径,而import.meta.url 是base url (根链接)。
可以将这个path打印出来:
image.png
其中有一个属性是href
,正好是函数的返回值!
import.meta
import.meta
对象包含关于当前模块的信息。
它的内容取决于其所在的环境。在浏览器环境中,它包含当前脚本的 URL,或者如果它是在 HTML 中的话,则包含当前页面的 URL。
因此可以把 import.meta 打印出来:
image.png
可以看到,它有一个属性就是url。