Deno 1.x 到 2.x 迁移指南
本文档包含从 Deno 1.x 迁移到即将发布的 Deno 2.0 的指南。
Deno 2.0 正在积极开发中 - 这些 API 更改和建议将在 2.0 发布之前持续更新。
API 更改和弃用
以下 API 在 Deno 1.x 和 2.x 之间发生了更改或已弃用,并将从 2.x 中移除 - 每个受影响的 API 下面都提供了迁移到较新 API 集的指南。
Deno.Buffer
请改用标准库中的 Buffer
。
+ import { Buffer } from "https://deno.land/std/io/buffer.ts";
- const buffer = new Deno.Buffer();
+ const buffer = new Buffer();
有关详细信息,请参阅 deno#9795。
Deno.Closer
请改用标准库中的 Closer。
+ import type { Closer } from "https://deno.land/std/io/types.ts";
- function foo(closer: Deno.Closer) {
+ function foo(closer: Closer) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.close()
请改用资源上的 .close()
方法。
- Deno.close(file.rid);
+ file.close();
- Deno.close(conn.rid);
+ conn.close();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.Conn.rid
请改用 Deno.Conn
实例方法。
- await Deno.read(conn.rid, buffer);
+ await conn.read(buffer);
- await Deno.write(conn.rid, data);
+ await conn.write(data);
- Deno.close(conn.rid);
+ conn.close();
- await Deno.shutdown(conn.rid);
+ await conn.closeWrite();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.ListenTlsOptions.certChain
请改用 Deno.ConnectTlsOptions.cert
。
const caCert = await Deno.readTextFile("./certs/my_custom_root_CA.pem");
using conn = await Deno.connectTls({
hostname: "192.0.2.1",
port: 80,
caCerts: [caCert],
- certChain: Deno.readTextFileSync("./server.crt"),
+ cert: Deno.readTextFileSync("./server.crt"),
key: Deno.readTextFileSync("./server.key"),
});
有关详细信息,请参阅 deno#22274。
Deno.ConnectTlsOptions.certFile
请改用 Deno.ConnectTlsOptions.cert
。
const caCert = await Deno.readTextFile("./certs/my_custom_root_CA.pem");
using conn = await Deno.connectTls({
hostname: "192.0.2.1",
port: 80,
caCerts: [caCert],
- certFile: "./server.crt",
+ cert: Deno.readTextFileSync("./server.crt"),
key: Deno.readTextFileSync("./server.key"),
});
有关详细信息,请参阅 deno#22274。
Deno.ConnectTlsOptions.privateKey
请改用 Deno.ConnectTlsOptions.key
。
const caCert = await Deno.readTextFile("./certs/my_custom_root_CA.pem");
using conn = await Deno.connectTls({
hostname: "192.0.2.1",
port: 80,
caCerts: [caCert],
cert: Deno.readTextFileSync("./server.crt"),
- keyFile: "./server.key",
+ key: Deno.readTextFileSync("./server.key"),
});
有关详细信息,请参阅 deno#22274。
Deno.copy()
请改用标准库中的 copy()
。
+ import { copy } from "https://deno.land/std/io/copy.ts";
...
- await Deno.copy(reader, writer);
+ await copy(reader, writer);
有关详细信息,请参阅 deno#9795。
Deno.customInspect
请改用 Symbol.for("Deno.customInspect")
。
class Foo {
- [Deno.customInspect]() {
+ [Symbol.for("Deno.customInspect")] {
}
}
有关详细信息,请参阅 deno#9294。
Deno.File
请使用 Deno.FsFile
代替。
- function foo(file: Deno.File) {
+ function foo(file: Deno.FsFile) {
...
}
详情请见 deno#13661。
Deno.flock()
请使用 Deno.FsFile.lock()
代替。
- await Deno.flock(file.rid);
+ await file.lock();
详情请见 deno#22178。
Deno.flockSync()
请使用 Deno.FsFile.lockSync()
代替。
- Deno.flockSync(file.rid);
+ file.lockSync();
详情请见 deno#22178。
Deno.fstatSync()
请使用 Deno.FsFile.statSync()
代替。
- const fileInfo = Deno.fstatSync(file.rid);
+ const fileInfo = file.statSync();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.fstat()
请使用 Deno.FsFile.stat()
代替。
- const fileInfo = await Deno.fstat(file.rid);
+ const fileInfo = await file.stat();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.FsWatcher.rid
请使用 Deno.FsWatcher
实例方法代替。
- Deno.close(watcher.rid);
+ watcher.close();
详情请见 Deno 1.40 博客文章。
Deno.ftruncateSync()
请使用 Deno.FsFile.truncateSync()
代替。
- Deno.ftruncateSync(file.rid, 7);
+ file.truncateSync(7);
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.ftruncate()
请使用 Deno.FsFile.truncate()
代替。
- await Deno.ftruncate(file.rid, 7);
+ await file.truncate(7);
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.funlock()
请使用 Deno.FsFile.unlock()
代替。
- await Deno.funlock(file.rid);
+ await file.unlock();
详情请见 deno#22178。
Deno.funlockSync()
请使用 Deno.FsFile.unlockSync()
代替。
- Deno.funlockSync(file.rid);
+ file.unlockSync();
详情请见 deno#22178。
Deno.futimeSync()
请使用 Deno.FsFile.utimeSync()
代替。
- Deno.futimeSync(file.rid, 1556495550, new Date());
+ file.utimeSync(1556495550, new Date());
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.futime()
请使用 Deno.FsFile.utime()
代替。
- await Deno.futime(file.rid, 1556495550, new Date());
+ await file.utime(1556495550, new Date());
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.isatty()
请使用 Deno.FsFile.isTerminal()
, Deno.stdin.isTerminal()
, Deno.stdout.isTerminal()
或 Deno.stderr.isTerminal()
代替。
- Deno.isatty(file.rid);
+ file.isTerminal();
- Deno.isatty(Deno.stdin.rid);
+ Deno.stdin.isTerminal();
- Deno.isatty(Deno.stdout.rid);
+ Deno.stdout.isTerminal();
- Deno.isatty(Deno.stderr.rid);
+ Deno.stderr.isTerminal();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.iter()
请使用标准库中的 iterateReader()
代替。
+ import { iterateReader } from "https://deno.land/std/io/iterate_reader.ts";
- for await (const chunk of Deno.iter(reader)) {
+ for await (const chunk of iterateReader(reader)) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.iterSync()
请使用标准库中的 iterateReaderSync()
代替。
+ import { iterateReaderSync } from "https://deno.land/std/io/iterate_reader.ts";
- for (const chunk of Deno.iterSync(reader)) {
+ for (const chunk of iterateReaderSync(reader)) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.Listener.rid
请使用 Deno.Listener
实例方法代替。
- Deno.close(listener.rid);
+ listener.close();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.ListenTlsOptions.certFile
请将证书文件内容传递给 Deno.ListenTlsOptions.cert
代替。
using listener = Deno.listenTls({
port: 443,
- certFile: "./server.crt",
+ cert: Deno.readTextFile("./server.crt"),
key: Deno.readTextFileSync("./server.key"),
});
有关详细信息,请参见 deno#12639。
Deno.ListenTlsOptions.keyFile
请将密钥文件内容传递给 Deno.ListenTlsOptions.key
代替。
using listener = Deno.listenTls({
port: 443,
cert: Deno.readTextFile("./server.crt"),
- keyFile: "./server.key",
+ key: Deno.readTextFileSync("./server.key"),
});
有关详细信息,请参见 deno#12639。
Deno.readAllSync()
请使用标准库中的 readAllSync()
代替。
+ import { readAllSync } from "https://deno.land/std/io/read_all.ts";
...
- const data = Deno.readAllSync(reader);
+ const data = readAllSync(reader);
有关详细信息,请参阅 deno#9795。
Deno.readAll()
请使用标准库中的 readAll()
代替。
+ import { readAll } from "https://deno.land/std/io/read_all.ts";
...
- const data = await Deno.readAll(reader);
+ const data = await readAll(reader);
有关详细信息,请参阅 deno#9795。
Deno.Reader
请使用标准库中的 Reader
代替。
+ import type { Reader } from "https://deno.land/std/io/types.ts";
- function foo(closer: Deno.Reader) {
+ function foo(closer: Reader) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.ReaderSync
请改用标准库中的 ReaderSync
。
+ import type { ReaderSync } from "https://deno.land/std/io/types.ts";
- function foo(reader: Deno.ReaderSync) {
+ function foo(reader: ReaderSync) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.readSync()
请改用资源本身的 .readSync()
方法。
- Deno.readSync(conn.rid, buffer);
+ conn.readSync(buffer);
- Deno.readSync(file.rid, buffer);
+ file.readSync(buffer);
有关详细信息,请参阅 deno#9795。
Deno.read()
请改用资源本身的 .read()
方法。
- await Deno.read(conn.rid, buffer);
+ await conn.read(buffer);
- await Deno.read(file.rid, buffer);
+ await file.read(buffer);
有关详细信息,请参阅 deno#9795。
Deno.run()
请改用 new Deno.Command()
。
- const process = Deno.run({ cmd: [ "echo", "hello world" ], stdout: "piped" });
- const [{ success }, stdout] = await Promise.all([
- process.status(),
- process.output(),
- ]);
- process.close();
+ const command = new Deno.Command("echo", {
+ args: ["hello world"]
+ });
+ const { success, stdout } = await command.output();
console.log(success);
console.log(new TextDecoder().decode(stdout));
详情请参见 deno#16516。
Deno.seekSync()
- Deno.seekSync(file.rid, 6, Deno.SeekMode.Start);
+ file.seekSync(6, Deno.SeekMode.Start);
详情请见 Deno 1.40 博客文章。
Deno.seek()
请改用 Deno.FsFile.seek()
。
- await Deno.seek(file.rid, 6, Deno.SeekMode.Start);
+ await file.seek(6, Deno.SeekMode.Start);
详情请见 Deno 1.40 博客文章。
Deno.serveHttp()
请改用 Deno.serve()
。
- const conn = Deno.listen({ port: 80 });
- const httpConn = Deno.serveHttp(await conn.accept());
- const e = await httpConn.nextRequest();
- if (e) {
- e.respondWith(new Response("Hello World"));
- }
+ Deno.serve({ port: 80 }, () => new Response("Hello World"));
详情请参见 Deno 1.35 博客文章。
Deno.Server
请改用 Deno.HttpServer
。
- function foo(server: Deno.Server) {
+ function foo(server: Deno.HttpServer) {
...
}
详情请参见 deno#20840。
Deno.shutdown
- await Deno.shutdown(conn.rid);
+ await conn.closeWrite();
详情请见 Deno 1.40 博客文章。
Deno.stderr.rid
请改用 Deno.stderr
实例方法。
- await Deno.write(Deno.stderr.rid, data);
+ await Deno.stderr.rid(data);
- Deno.close(Deno.stderr.rid);
+ Deno.stderr.close();
- Deno.isatty(Deno.stderr.rid);
+ Deno.stderr.isTerminal();
详情请见 Deno 1.40 博客文章。
Deno.stdin.rid
请使用 Deno.stdin
实例方法。
- await Deno.read(Deno.stdin.rid, buffer);
+ await Deno.stdin.read(buffer);
- Deno.close(Deno.stdin.rid);
+ Deno.stdin.close();
- Deno.isatty(Deno.stdin.rid);
+ Deno.stdin.isTerminal();
详情请见 Deno 1.40 博客文章。
Deno.stdout.rid
请使用 Deno.stdout
实例方法。
- await Deno.read(Deno.stdout.rid, buffer);
+ await Deno.stdout.read(buffer);
- Deno.close(Deno.stdout.rid);
+ Deno.stdout.close();
- Deno.isatty(Deno.stdout.rid);
+ Deno.stdout.isTerminal();
详情请见 Deno 1.40 博客文章。
Deno.TcpConn.rid
请使用 Deno.TcpConn
实例方法。
- await Deno.read(tcpConn.rid, buffer);
+ await tcpConn.read(buffer);
- await Deno.write(tcpConn.rid, data);
+ await tcpConn.write(data);
- Deno.close(tcpConn.rid);
+ tcpConn.close();
- await Deno.shutdown(tcpConn.rid);
+ await tcpConn.closeWrite();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.TlsConn.rid
请使用 Deno.TlsConn
实例方法。
- await Deno.read(tlsConn.rid, buffer);
+ await tlsConn.read(buffer);
- await Deno.write(tlsConn.rid, data);
+ await tlsConn.write(data);
- Deno.close(tlsConn.rid);
+ tlsConn.close();
- await Deno.shutdown(tlsConn.rid);
+ await tlsConn.closeWrite();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.UnixConn.rid
请使用 Deno.UnixConn
实例方法。
- await Deno.read(unixConn.rid, buffer);
+ await unixConn.read(buffer);
- await Deno.write(unixConn.rid, data);
+ await unixConn.write(data);
- Deno.close(unixConn.rid);
+ unixConn.close();
- await Deno.shutdown(unixConn.rid);
+ await unixConn.closeWrite();
有关详细信息,请参阅 Deno 1.40 博客文章。
Deno.writeAllSync()
请使用标准库中的 writeAllSync()
。
+ import { writeAllSync } from "https://deno.land/std/io/write_all.ts";
...
- Deno.writeAllSync(writer, data);
+ writeAllSync(writer, data);
有关详细信息,请参阅 deno#9795。
Deno.writeAll()
请使用标准库中的 writeAll()
。
+ import { writeAll } from "https://deno.land/std/io/write_all.ts";
...
- await Deno.writeAll(writer, data);
+ await writeAll(writer, data);
有关详细信息,请参阅 deno#9795。
Deno.Writer
请使用标准库中的 Writer。
+ import type { Writer } from "https://deno.land/std/io/types.ts";
- function foo(writer: Deno.Writer) {
+ function foo(writer: Writer) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.WriterSync
请使用标准库中的 WriterSync。
+ import type { WriterSync } from "https://deno.land/std/io/types.ts";
- function foo(writer: Deno.WriterSync) {
+ function foo(writer: WriterSync) {
...
}
有关详细信息,请参阅 deno#9795。
Deno.writeSync()
请使用资源本身的 .writeSync()
方法。
- Deno.writeSync(conn.rid, buffer);
+ conn.writeSync(buffer);
- Deno.writeSync(file.rid, buffer);
+ file.writeSync(buffer);
有关详细信息,请参阅 deno#9795。
Deno.write()
在资源本身使用 .write()
方法。
- await Deno.write(conn.rid, buffer);
+ await conn.write(buffer);
- await Deno.write(file.rid, buffer);
+ await file.write(buffer);
有关详细信息,请参阅 deno#9795。
new Deno.FsFile()
请使用 Deno.openSync()
或 Deno.open()
代替。
- const file = new Deno.FsFile(3);
+ const file = await Deno.open("/foo/bar.txt");