deno
- denoland/deno
- MIT, Rust
- 基于 V8
- 内置 包管理、tsc、fmt、test、bundle、lint、lsp 等功能
- 通过 url 引用外部模块 - 运行时下载
- 严格的权限管理 - 沙盒功能强
- 功能理念类似于 golang
- stdlib 参照 go 实现
- Deno 全局命名空间
- ~/.deno/bin - deno install 位置
信息
- WebStorm deno fmt WEB-50743
警告
- deno 非常难管理依赖版本 - 因为版本号 pin 在 import 路径上
- 不方便修改和引用
- 很可能引入多个版本
- 不 pin 版本会使用 latest,导致依赖升级后脚本异常 - 默认没有 lock
- import map 不方便依赖模块引入
- deno 不支持 AlpineLinux, CentOS 7
- deno 不支持 gRPC
- grpc-node 也无法兼容 Deno - 因为 Deno HTTP2 缺少 trailing headers grpc-node#1791
// HTTP 服务器
const listener = Deno.listen({ port: 8000 });
console.log('http://localhost:8000/');
for await (const conn of listener) {
serve(conn);
}
async function serve(conn: Deno.Conn) {
for await (const { respondWith } of Deno.serveHttp(conn)) {
respondWith(new Response('Hello world'));
}
}
# bundle 为单个文件 - 输出为 js
deno bundle scripts/main.ts cli.js
deno run cli.js
# compile 为可执行文件 - 打包 deno - 约 70MB
# -A 给所有权限
# --target 生成其他平台 - 第一次执行会下载 deno 到 DENO_DIR
# x86_64-unknown-linux-gnu, x86_64-pc-windows-msvc, x86_64-apple-darwin, aarch64-apple-darwin
deno compile -o cli --allow-write --allow-read scripts/main.ts
./cli