【发布时间】:2022-02-24 22:10:48
【问题描述】:
在 deno 中,您可以通过引用那些 ES6 模块的相对路径来加载相关模块或其他代码。 Deno 将适当地处理加载它们。对非 es6 模块执行此操作的方法是什么?例如:假设我想在我的 deno 项目中包含一些自定义 css? Deno 不允许做import mycss from "./relative.css";。
Deno 文件操作确实适用于本地文件,但它们是相对于 cwd 而不是当前文件进行评估的,它们不适用于任意 URL。另一方面,fetch 应该是完美的,但目前不支持文件方案和决定isn't being actively considered。结合这些产生了我能想出的唯一解决方案,但我真的不喜欢它:
async function loadLocal(relative: string): Promise<string> {
const url = new URL(relative, import.meta.url);
if (url.protocol === 'file:') {
return await Deno.readTextFile(url.pathname);
} else {
const resp = await fetch(url.href);
return await resp.text();
}
}
这似乎应该大部分都可以工作,但它似乎是一种可怕的方式来破解我期望 deno 中的设计会支持的东西。它还必须在每个文件中重新声明,或者传入调用者 URL,尽管可能有一种方法可以避免这种情况。在不修改路径分隔符的情况下,它在 windows 上不起作用。
更新
Deno.emit 似乎接近我想要的,但由于某种原因,它的行为与标准导入不同:
如果 rootSpecifier 是相对路径,那么 Deno 进程的当前工作目录将用于解析说明符。 (与当前模块无关!)
它还要求路径必须是有效模块,而不是任意文本。
【问题讨论】:
-
这可能无法回答您的问题,但fetching local files is supported now
标签: deno