【问题标题】:How to "package" other resources with deno如何用 deno “打包”其他资源
【发布时间】: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 进程的当前工作目录将用于解析说明符。 (与当前模块无关!)

它还要求路径必须是有效模块,而不是任意文本。

【问题讨论】:

标签: deno


【解决方案1】:

正如@Zwiers 所指出的,deno 1.6 现在支持使用file 协议进行获取,所以现在这无关紧要了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 2022-12-04
    • 2011-03-18
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多