项目初始化与基础命令
Deno 项目初始化与基础命令
Deno 提供了开箱即用的项目管理工具集,无需额外配置即可初始化项目、运行脚本、执行代码片段等。
一、基础命令速查
| 命令 | 说明 |
|---|---|
deno init | 在当前目录创建一个新的 Deno 项目模板(生成 main.ts、main_test.ts、deno.json) |
deno run <file> | 执行 TypeScript 或 JavaScript 文件(支持 URL 直接运行) |
deno eval "<code>" | 执行一段代码字符串(例如 deno eval "console.log('Hello')") |
deno repl | 启动交互式 REPL 环境,可以逐行输入 JavaScript/TypeScript 代码 |
deno task <script> | 运行 deno.json 文件中 "tasks" 字段定义的自定义任务(类似 npm run) |
deno info | 显示 Deno 的本地信息,包括缓存目录、远程模块缓存位置等 |
注意:
deno run时如果脚本需要访问网络、文件系统、环境变量等权限,需要显式添加--allow-net、--allow-read、--allow-env等标志。
二、示例:创建并运行第一个项目
# 新建项目目录
mkdir my-deno-app
cd my-deno-app
# 初始化项目(生成默认文件)
deno init
# 查看生成的文件
ls
# 输出:deno.json main.ts main_test.ts
# 运行主程序
deno run main.ts
# 输出:Hello World! (默认内容)
# 如果需要网络请求,加上权限,例如:
# deno run --allow-net main.ts
三、自定义任务(deno task)
在 deno.json 中添加 "tasks" 字段,可以定义常用命令:
{
"tasks": {
"start": "deno run --allow-net main.ts",
"dev": "deno run --watch --allow-net main.ts"
}
}
然后通过 deno task start 或 deno task dev 执行。
四、其他常用命令示例
# 直接运行远程脚本(无需下载)
deno run https://deno.land/std@0.208.0/examples/welcome.ts
# 执行一段代码
deno eval "console.log('Hi from Deno')"
# 进入 REPL 交互环境
deno repl
> 1 + 2
> const msg = "Hello"
> console.log(msg)
# 查看缓存信息
deno info
掌握这些命令,即可开始使用 Deno 进行开发。更多权限和选项可通过 deno run --help 查看。
五、deno init 的更多用法
# 初始化一个库项目(生成适合发布为 JSR 包的结构)
deno init --lib my-lib
# 在当前已有目录里初始化(不新建子目录)
deno init .
# 基于 npm 模板脚手架创建(复用 create-* 系列工具,例如 Vite)
deno run -A npm:create-vite@latest my-app
deno init 默认生成的是最小可运行示例;如果你需要 Web 框架、前端工程模板,通常会借助 npm:create-* 系列脚手架,Deno 只是替代了运行/包管理这一层。
六、deno.json 常用字段一览
除 tasks 外,deno.json 还支持不少常用字段:
{
"tasks": {
"dev": "deno run --watch --allow-net main.ts",
"test": "deno test --allow-net"
},
"imports": {
"@std/assert": "jsr:@std/assert@1"
},
"fmt": { "lineWidth": 100, "indentWidth": 2 },
"lint": { "exclude": ["dist/"] },
"compilerOptions": { "strict": true }
}
| 字段 | 作用 |
|---|---|
imports | 类似 tsconfig.json 的 paths,为模块地址提供简短别名 |
fmt / lint | 配置 deno fmt/deno lint 的行为,替代独立的 .prettierrc/.eslintrc |
compilerOptions | 影响 TypeScript 类型检查的行为,字段与 tsconfig.json 大体兼容 |
七、deno info 实战
deno info 不仅能看缓存目录,还能分析单个模块的依赖树,排查“为什么体积这么大”“是否引入了重复依赖”等问题:
deno info main.ts
输出会列出模块的本地路径、依赖数量、估算大小,以及每个依赖的来源(本地 / JSR / npm / URL),是审计依赖来源的重要手段。
常见坑
deno init在非空目录里覆盖同名文件:初始化前确认目录内容,或先deno init在临时目录、再手动搬迁需要的文件。deno task中的命令依赖 shell 特性(如&&、通配符)在不同平台表现不一致:跨平台团队建议保持任务脚本简单,复杂逻辑放进单独的.ts脚本再由 task 调用。- 忘记给
deno task里的命令加权限标志:任务本身不会自动“继承”终端里手动加的权限,需要在tasks字段里显式声明一次。 --watch与需要长期保持的连接/状态冲突:文件变化会重启整个进程,内存中的状态、WebSocket 连接等都会丢失,仅适合开发阶段。
最佳实践
- 新项目统一执行一次
deno init打底,再按需删除不需要的示例文件,保持deno.json存在即可获得工具链的一致行为。 - 把日常命令都收进
tasks(dev、test、fmt、lint),团队成员只需记住deno task <name>,无需背诵一长串标志。 - 定期跑一次
deno info main.ts,关注依赖数量与来源是否符合预期,尽早发现意外引入的重量级依赖。 deno.json纳入版本控制并 Code Review,把它当作项目配置的“单一真源”,而不是每个人本地各自维护参数。
延伸阅读
参考文献
相关文章
Deno 基础
Deno 是基于 V8 与 Rust 的 JavaScript/TypeScript 运行时,由 Node.js 原作者 Ryan Dahl 发起。官方文档:docs.deno.com。与 Node、Bun 的对比见 运行时对比。
内置工具链
Deno 提供了开箱即用的工具链,无需安装任何第三方依赖即可完成代码格式化、检查、测试、覆盖率、文档生成和基准测试等任务。
包管理与依赖
Deno 以 deno.json 管理项目(imports、tasks 等),依赖通过 URL、jsr:、npm: 解析并缓存到本地(默认 DENO_DIR),通常不需要像 Node 那样维护庞大的 node_modules 树。在需…
其他配置
Deno 默认禁止访问环境变量,以遵循最小权限原则。必须通过 --allow-env 标志显式开启。
权限模型
Deno 默认在安全的沙盒环境中执行任何代码——无论是你的主程序还是第三方依赖,都没有文件、网络、环境变量或子进程的访问权限。只有通过 命令行标志显式授予 的权限才能被使用。
安装与环境
Deno 提供了多种安装方式,覆盖主流操作系统。安装后需确保环境 PATH 正确,并可配置一些环境变量以控制行为。