3.6 Deno 位置API
2021-05-07 本文已影响0人
9e8aeff1c70c
Deno从web上全局支持location
。请继续阅读。
位置标记
网页的URL可以表示位置,但是deno进程中没有网页。作为一个替代方案,我们允许用户在cli命令后面加上--location
参数来模拟文档位置。它可以是http
或https
URL。
// deno run --location https://example.com/path main.ts
console.log(location.href);
// "https://example.com/path"
您必须通过--location <href>
此程序才能工作。如果您不这样做,则对location
全局变量的任何访问都将引发错误。
// deno run main.ts
console.log(location.href);
// error: Uncaught ReferenceError: Access to "location", run again with --location <href>.
设置location
或其任何字段通常会导致在浏览器中导航。这在Deno中不适用,因此将在这种情况下抛出。
// deno run --location https://example.com/path main.ts
location.pathname = "./foo";
// error: Uncaught NotSupportedError: Cannot set "location.pathname".
扩展使用
在网络上,资源解析(不包括模块)通常使用值 location.href
作为任何相对URL所基于的根。这会影响Deno采用的某些Web API。
提取API
// deno run --location https://api.github.com/ --allow-net main.ts
const response = await fetch("./orgs/denoland");
// Fetches "https://api.github.com/orgs/denoland".
fetch()
如果--location
没有传递该标志,则上面的调用将抛出,因为没有网络类似的位置可以将其作为基础。
worker模块
// deno run --location https://example.com/index.html --allow-net main.ts
const worker = new Worker("./workers/hello.ts", { type: "module" });
// Fetches worker module at "https://example.com/workers/hello.ts".
仅在必要时使用
对于上述用例,最好是完整传递URL,而不要依赖--location
。URL
如果需要,您可以使用构造函数手动建立相对URL 。
该--location
标志适用于那些出于某些特定目的要模拟文档位置并且意识到仅在应用程序级别有效的人员。但是,您也可以使用它来消除轻而易举地访问location
全局的依赖项中的错误。