FORMA

项目初始化与基础命令

Deno 项目初始化与基础命令

Deno 提供了开箱即用的项目管理工具集,无需额外配置即可初始化项目、运行脚本、执行代码片段等。

一、基础命令速查

命令说明
deno init在当前目录创建一个新的 Deno 项目模板(生成 main.tsmain_test.tsdeno.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 等标志。

二、示例:创建并运行第一个项目

bash
# 新建项目目录
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" 字段,可以定义常用命令:

json
{
  "tasks": {
    "start": "deno run --allow-net main.ts",
    "dev": "deno run --watch --allow-net main.ts"
  }
}

然后通过 deno task startdeno task dev 执行。

四、其他常用命令示例

bash
# 直接运行远程脚本(无需下载)
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 的更多用法

bash
# 初始化一个库项目(生成适合发布为 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 还支持不少常用字段:

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.jsonpaths,为模块地址提供简短别名
fmt / lint配置 deno fmt/deno lint 的行为,替代独立的 .prettierrc/.eslintrc
compilerOptions影响 TypeScript 类型检查的行为,字段与 tsconfig.json 大体兼容

七、deno info 实战

deno info 不仅能看缓存目录,还能分析单个模块的依赖树,排查“为什么体积这么大”“是否引入了重复依赖”等问题:

bash
deno info main.ts

输出会列出模块的本地路径、依赖数量、估算大小,以及每个依赖的来源(本地 / JSR / npm / URL),是审计依赖来源的重要手段。

常见坑

  • deno init 在非空目录里覆盖同名文件:初始化前确认目录内容,或先 deno init 在临时目录、再手动搬迁需要的文件。
  • deno task 中的命令依赖 shell 特性(如 &&、通配符)在不同平台表现不一致:跨平台团队建议保持任务脚本简单,复杂逻辑放进单独的 .ts 脚本再由 task 调用。
  • 忘记给 deno task 里的命令加权限标志:任务本身不会自动“继承”终端里手动加的权限,需要在 tasks 字段里显式声明一次。
  • --watch 与需要长期保持的连接/状态冲突:文件变化会重启整个进程,内存中的状态、WebSocket 连接等都会丢失,仅适合开发阶段。

最佳实践

  1. 新项目统一执行一次 deno init 打底,再按需删除不需要的示例文件,保持 deno.json 存在即可获得工具链的一致行为。
  2. 把日常命令都收进 tasksdevtestfmtlint),团队成员只需记住 deno task <name>,无需背诵一长串标志。
  3. 定期跑一次 deno info main.ts,关注依赖数量与来源是否符合预期,尽早发现意外引入的重量级依赖。
  4. deno.json 纳入版本控制并 Code Review,把它当作项目配置的“单一真源”,而不是每个人本地各自维护参数。

延伸阅读

参考文献

资料说明
deno init初始化项目
deno task自定义任务
deno.json配置
deno info依赖信息

Series

deno

4 / 8