Glob import returns Parcel 中的空模块

Glob import returns empty module in Parcel

我使用 Parcel 是为了它的速度,但我有一个小问题。 Glob 解析器只是忽略文件夹内容。

我需要从包含 PDF 和 HTML 文件的文件夹 /documents 导入所有内容。所以我尝试了:

import * Docs from "url:/documents/*.{html,pdf}"

但它不起作用,在 source map 中,有一个文件 /documents/*.js:

module.exports = {}

.parcelrc

{
    "extends": "@parcel/config-default",
    "resolvers": [
        "@parcel/resolver-glob", 
        "..."
    ]
}

我认为您需要将 /documents 更改为 ./documents,并添加一个“as”关键字,因此完整导入为:

import * as Docs from "url:./documents/*.{html,pdf}"

在内部,@parcel/resolver-glob 使用 isGlob 来测试字符串是否是有效的 glob,如果不是则静默退出。如果它能给你一些关于错误的反馈,这可能是一个更好的错误体验¯_(ツ)_/¯

这里是an example project where glob imports are working correctly

包裹退回 {} 的真正问题是 Scope Hoisting。我想动态访问:

import * as Docs from "url:./documents/*.{html,pdf}";

const embeds = Object.values(Docs).map(src => (
    <iframe src={src} className="document" />
));

所以解决方案是通过 --no-scope-hoist

关闭范围提升