Deno 1.30 업데이트 내용
Deno 1.30가 아래와 같이 새로운 기능과 변경 사항이 포함되어 나왔습니다.
Deno가 이미 설치되어 있는 경우 1.30으로 업그레이드하여 사용할 수 있습니다.
deno upgrade
Deno를 설치하지 않았을 경우 설치 후 사용할 수 있습니다.
# MacOS and Linux curl -fsSL https://deno.land/x/install/install.sh | sh # Windows iwr https://deno.land/x/install/install.ps1 -useb | iex
여기에서 더 많은 설치 옵션을 확인할 수 있습니다.
내장 Node.js 모듈 지원
Deno에서 npm 패키지는 이미 Deno의 Node.js 호환성 계층을 통해 fs, path, process 등과 같은 내장 Node.js 모듈에 액세스할 수 있었습니다.
이번 릴리스에서 내장 모듈들은 node:
지정자 통해 Deno 코드로 노출됩니다.
import { readFileSync } from "node:fs"; console.log(readFileSync("deno.json", { encoding: "utf8" }));
import map 없이 지정자(예: imprt { readFileSync } from "fs";
)를 통한 가져오기는 지원되지 않습니다. 이 작업을 수행하려고 할 때 구조 분해 할당자가 import map에서 찾을 수 없는 Node.js 내장 모듈과 일치하면 Deno가 node:
로 import를 했는지 오류 메시지를 출력합니다. 또한 LSP는 node:
지정자로 업데이트할 수 있는 빠른 해결책을 제공합니다.
Take note that importing via a bare specifier (ex. import { readFileSync } from "fs";
) without an import map is not supported. If you attempt to do so and the bare specifier matches a Node.js built-in module not found in an import map, Deno will provide a helpful error message asking if you meant to import with the node:
prefix. Additionally the LSP provides a quick fix to update to a node:
specifier.
If you are using code both with Deno and Node.js, the node:
scheme will work in both runtimes and it's recommended to update to them for your Node.js code anyway.
**deno.json
**에 import map 지원
이 내용은 구성 파일에 대한 주요 기능을 제공합니다. 이제 deno.json
파일에서 import map을 직접 사용할 수 있습니다. 이전 버전에서는 import map 파일에 대한 경로와 함께 importMap
키를 지정하여 import map 파일을 찾을 위치를 Deno에 알릴 수 있었습니다. 많은 사용자가 유용하다고 생각했지만 이 방식은 두 개의 config 파일이 존재하게 되었습니다. config 파일 간소화를 위해 이제 하나의 config 파일에서 imports
와 scopes
키를 지정할 수 있으며, Deno는 이것들을 자동으로 import map으로 처리합니다.
예시:
{ "imports": { "std/": "https://deno.land/std@0.174.0/" } }
이러면 std
를 다음 스크립트처럼 작동시킬 수 있습니다.
import { assertEquals } from "std/testing/assert.ts"; assertEquals(1, 2);
Node/npm, LSP fixes
This release includes over 25 bug fixes related to the npm functionality and Node-API. Additionally, the LSP continues to be improved with over 10 bug fixes. See Releases for a full list.
Deno
API 변경
Changes to stable APIs:
-
Deno.permissions
APIs get synchronous counter-parts:Deno.permissions.querySync({ name: "read", path: "./log.txt" }); Deno.permissions.revokeSync({ name: "read", path: "./log.txt" }); Deno.permissions.requestSync({ name: "read", path: "./log.txt" });
Thanks to Asher Gomez for implementing this feature.
-
Deno.writeFile()
andDeno.writeTextFile()
now accept aReadableStream
for the second parameter.const stream = new ReadableStream({ pull(controller) { controller.enqueue(new Uint8Array([1])); controller.enqueue(new Uint8Array([2])); controller.close(); }, }); await Deno.writeFile("/tmp/test.txt", stream); assertEquals( Deno.readFileSync(filename), new Uint8Array([1, 2]) );
-
Deno.env.has(name)
API가 새롭게 추가되었습니다.Deno.env.set("TEST_VAR", "A"); assert(Deno.env.has("TEST_VAR")); Deno.env.delete("TEST_VAR"); assert(!Deno.env.has("TEST_VAR"));
-
Deno.Seeker
API gets support forbigint
offsets.You can now use the
bigint
type as an argument to theSeeker
interface:const file = await Deno.open("./log.txt"); const cursor = await file.seek(150n, Deno.SeekMode.Start);
-
Test steps can be functions:
Previously, using the test steps API required the first argument of the test step to be a name or test definition:
Deno.test("my test", async (t) => { const success = await t.step("step1", async () => { await t.step(function inner1() {}); await t.step(function inner1() {}); }); if (!success) throw new Error("Expected the step to return true."); });
Starting with this release, the first argument can also be a named function:
Deno.test("my test", async (t) => { const success = await t.step(async function step1() { await t.step(function inner1() {}); await t.step(function inner1() {}); }); if (!success) throw new Error("Expected the step to return true."); });
API stabilizations:
Deno.Listener.ref()
and Deno.Listener.unref()
are now stable. The --unstable
flag is no longer required to use these APIs.
Changes to unstable APIs:
-
In
new Deno.Command({}).spawn()
, the default value for thestdin
option was changed to"inherit"
- meaning that if you don't configure this option specifically, standard input will be inherited from the parent process. -
Deno.dlopen
adds support for passing structs by value:const Rect = ["f64", "f64", "f64", "f64"]; const dylib = Deno.dlopen("./dylib.so", { make_rect: { parameters: ["f64", "f64", "f64", "f64"], result: { struct: Rect }, }, }); const rect_sync = dylib.symbols.make_rect(10, 20, 100, 200); assertInstanceOf(rect_sync, Uint8Array); assertEquals(rect_sync.length, 4 * 8); assertEquals( Array.from(new Float64Array(rect_sync.buffer)), [10, 20, 100, 200] );
Thank you to @DjDeveloperr and Aapo Alasuutari for implementing this feature.
New unstable APIs:
This release adds 3 new APIs:
Deno.osUptime()
(requires-allow-sys=osUptime
permission)Deno.Conn.ref()
Deno.Conn.unref()
These APIs require the --unstable
flag, but we plan to stabilize them in the next release.
Thank you to Kamil Ogórek for implementing this feature.
Deno.core
삭제
Deno.core
는 삭제되었습니다. Deno.core
는 안정성을 보장하지 않는 개인 API였습니다. 이 업데이트는 사용자들에게 큰 피해를 미치지 않을 것입니다.
deno fmt
에서 세미콜론 구성을 지원
deno fmt
에 대해 오랫동안 지속적으로 요청된 기능은 세미콜론 없이 형식을 지정할 수 있는 기능이었습니다.
이제 --options-no-semicolons
플래그를 사용하거나 Deno 구성 파일의 fmt 구성에서 "semiColons": false
를 추가하여 이 작업을 수행할 수 있습니다.
{ "fmt": { "options": { "semiColons": false } } }