引言
Deno 是一个基于 V8 引擎的安全 TypeScript 运行时,它可以让开发者在浏览器之外运行 JavaScript 和 TypeScript 代码。Deno 的模块系统与 Node.js 不同,它使用 URL 来导入模块,可以从任何地方导入模块,包括本地的文件系统。
然而,有时候在 Deno 中引入本地模块时会遇到无法找到模块的问题,这可能会让人感到迷惑和困惑。本文将介绍解决这个问题的方法。
问题分析
在 Deno 中引入本地模块时,我们可以使用相对路径来引用模块,例如:
import { foo } from './foo.ts';
这种方式可以正常工作,但是如果在一个嵌套的文件夹中引用模块时,就会出现找不到模块的错误,例如:
. ├── src │ ├── foo.ts │ └── bar │ └── bar.ts └── app.ts
在 bar.ts
文件中引用 foo.ts
文件时:
import { foo } from '../foo.ts';
这时候运行 deno run app.ts
命令时会出现以下错误:
error: Uncaught NotFound: Cannot resolve module "../foo.ts" from "/path/to/project/src/bar/bar.ts" at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11) at Object.sendAsync ($deno$/ops/dispatch_json.ts:98:10) at Object.resolve ($deno$/ops/fs/resolve.ts:38:10) at Object.resolveModule ($deno$/runtime.ts:213:17) at async file:///path/to/project/src/bar/bar.ts:1:1
这个错误信息告诉我们,Deno 在解析模块路径时无法找到 ../foo.ts
文件。
解决方法
为了解决这个问题,我们可以使用 --allow-read
标志来允许 Deno 访问本地文件系统:
deno run --allow-read app.ts
这个标志告诉 Deno 允许读取文件系统,这样就可以找到模块了。
另外,我们还可以使用 URL 来引用本地模块,例如:
import { foo } from 'file:///path/to/project/src/foo.ts';
这种方式可以避免路径问题,但是需要注意的是,使用 URL 引用本地模块时,需要使用 --allow-net
标志来允许 Deno 访问网络:
deno run --allow-net app.ts
示例代码
下面是一个示例代码,演示如何在 Deno 中引用本地模块:
-- -------------------- ---- ------- -- ---------- ------ ----- --- - ------- -------- -- -------------- ------ - --- - ---- ------------ ----------------- -- ------ ------ - --- - ---- -------------------展开代码
运行 deno run --allow-read app.ts
命令,输出:
Hello, world!
总结
在 Deno 中引用本地模块时,有时候会遇到找不到模块的错误。我们可以使用 --allow-read
标志来允许 Deno 访问本地文件系统,或者使用 URL 来引用本地模块。这些方法可以帮助我们解决这个问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66111ed3d10417a2221cfbbb