Bird
Raised Fist0
Denoframework~10 mins

Deno shims for Node.js APIs - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the Node.js 'path' module shim in Deno.

Deno
import path from "[1]";
Drag options to blanks, or click blank then click option'
Ahttps://deno.land/std/fs/mod.ts
Bhttps://deno.land/std/http/server.ts
Chttps://deno.land/std/node/path.ts
Dhttps://deno.land/std/node/fs.ts
Attempts:
3 left
💡 Hint
Common Mistakes
Importing from the wrong standard library URL.
Confusing 'fs' and 'path' modules.
2fill in blank
medium

Complete the code to use the Node.js 'Buffer' shim from Deno.

Deno
import { [1] } from "https://deno.land/std/node/buffer.ts";
const buf = [1].from('hello');
Drag options to blanks, or click blank then click option'
ABuffer
Bbuffer
CBuf
DBufferShim
Attempts:
3 left
💡 Hint
Common Mistakes
Using lowercase 'buffer' instead of 'Buffer'.
Inventing a different class name.
3fill in blank
hard

Fix the error in importing the 'events' module shim from Deno.

Deno
import { [1] } from "https://deno.land/std/node/events.ts";
const emitter = new [1]();
Drag options to blanks, or click blank then click option'
AEmitter
BeventEmitter
CEvents
DEventEmitter
Attempts:
3 left
💡 Hint
Common Mistakes
Using lowercase or incorrect class names.
Confusing with other event-related names.
4fill in blank
hard

Fill both blanks to create a readable stream from a string using Deno's Node.js 'stream' shim.

Deno
import { [1] } from "https://deno.land/std/node/stream.ts";
const readable = [1].[2]('Hello Deno');
Drag options to blanks, or click blank then click option'
AReadable
Bfrom
CStream
Dcreate
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'Stream' instead of 'Readable'.
Using 'create' instead of 'from'.
5fill in blank
hard

Fill all three blanks to import and use the 'timers' shim to set a timeout in Deno.

Deno
import { [1], [2] } from "https://deno.land/std/node/timers.ts";
const id = [1](() => console.log('Timeout!'), 1000);
[2](id);
Drag options to blanks, or click blank then click option'
AsetTimeout
BclearTimeout
CsetInterval
DclearInterval
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing interval and timeout functions.
Using clearInterval to clear a timeout.

Practice

(1/5)
1. What is the main purpose of Deno shims for Node.js APIs?
easy
A. To convert Deno code into Node.js code automatically
B. To allow using Node.js modules and APIs in Deno environment
C. To replace Deno's runtime with Node.js runtime
D. To compile TypeScript code into JavaScript

Solution

  1. Step 1: Understand what shims do

    Deno shims provide compatibility layers that mimic Node.js APIs inside Deno.
  2. Step 2: Identify the purpose of these shims

    The main goal is to let developers use Node.js modules and APIs in Deno without rewriting code.
  3. Final Answer:

    To allow using Node.js modules and APIs in Deno environment -> Option B
  4. Quick Check:

    Deno shims = Node.js API compatibility [OK]
Hint: Shims let Deno run Node.js code easily [OK]
Common Mistakes:
  • Thinking shims convert code automatically
  • Confusing runtime replacement with API compatibility
  • Assuming shims compile TypeScript
2. Which is the correct way to import the Node.js 'path' module shim in Deno?
easy
A. import path from 'https://deno.land/std/node/path.ts';
B. import { path } from 'https://deno.land/std/node/path.ts';
C. import * as path from 'https://deno.land/std/node/path.ts';
D. import path from 'node:path';

Solution

  1. Step 1: Check Deno shim import style

    Deno shims for Node.js modules are imported as namespaces using * as syntax.
  2. Step 2: Match the correct import statement

    Only import * as path from 'https://deno.land/std/node/path.ts'; correctly imports the shim as a namespace.
  3. Final Answer:

    import * as path from 'https://deno.land/std/node/path.ts'; -> Option C
  4. Quick Check:

    Namespace import = import * as [OK]
Hint: Use 'import * as' for Node.js shims in Deno [OK]
Common Mistakes:
  • Using default import syntax which is invalid here
  • Trying named import when module exports namespace
  • Using 'node:path' which is Node.js native, not Deno shim
3. What will be the output of this Deno code using Node.js 'path' shim?
import * as path from 'https://deno.land/std/node/path.ts';
console.log(path.basename('/foo/bar/baz.txt'));
medium
A. 'baz.txt'
B. '/foo/bar/baz.txt'
C. 'baz'
D. SyntaxError

Solution

  1. Step 1: Understand path.basename behavior

    The basename function returns the last part of a path, including extension.
  2. Step 2: Apply to given path string

    For '/foo/bar/baz.txt', the basename is 'baz.txt'.
  3. Final Answer:

    'baz.txt' -> Option A
  4. Quick Check:

    path.basename('/foo/bar/baz.txt') = 'baz.txt' [OK]
Hint: basename returns last filename with extension [OK]
Common Mistakes:
  • Expecting the full path as output
  • Confusing basename with dirname
  • Syntax errors from wrong import (not here)
4. Identify the error in this Deno code using Node.js 'fs' shim:
import { readFileSync } from 'https://deno.land/std/node/fs.ts';
const data = readFileSync('./file.txt', 'utf8');
console.log(data);
medium
A. readFileSync does not accept encoding as second argument in Deno shim
B. The import path is incorrect, should be 'https://deno.land/std/node/fs.ts'
C. readFileSync is asynchronous and cannot be used like this
D. No error, code works as expected

Solution

  1. Step 1: Verify the import

    Named import { readFileSync } from Deno's std/node/fs.ts is valid as functions are named exports.
  2. Step 2: Check readFileSync arguments

    The function accepts encoding as a string ('utf8') as second argument, matching Node.js API.
  3. Final Answer:

    No error, code works as expected -> Option D
  4. Quick Check:

    readFileSync(path, 'utf8') valid [OK]
Hint: Named imports and string encoding work in Deno fs shim [OK]
Common Mistakes:
  • Believing encoding must always be an options object
  • Confusing with Deno's native synchronous APIs
  • Overlooking that fs shim closely mimics Node.js
5. You want to use the Node.js 'events' module shim in Deno to create an event emitter. Which code snippet correctly creates an emitter and listens for a 'ping' event?
hard
A. import * as events from 'https://deno.land/std/node/events.ts'; const emitter = new events.EventEmitter(); emitter.addListener('ping', () => console.log('pong')); emitter.emit('ping');
B. import events from 'https://deno.land/std/node/events.ts'; const emitter = new events.EventEmitter(); emitter.on('ping', () => console.log('pong')); emitter.emit('ping');
C. import EventEmitter from 'https://deno.land/std/node/events.ts'; const emitter = new EventEmitter(); emitter.on('ping', () => console.log('pong')); emitter.emit('ping');
D. import { EventEmitter } from 'node:events'; const emitter = new EventEmitter(); emitter.on('ping', () => console.log('pong')); emitter.emit('ping');

Solution

  1. Step 1: Check correct import style for 'events' shim

    The 'events' module shim exports as a namespace, so import * as events is correct.
  2. Step 2: Verify usage of EventEmitter and event methods

    Creating emitter with new events.EventEmitter() and using addListener or on works; here addListener is used correctly.
  3. Step 3: Confirm emit triggers listener

    Calling emitter.emit('ping') triggers the listener printing 'pong'.
  4. Final Answer:

    import * as events from 'https://deno.land/std/node/events.ts'; const emitter = new events.EventEmitter(); emitter.addListener('ping', () => console.log('pong')); emitter.emit('ping'); -> Option A
  5. Quick Check:

    Namespace import + EventEmitter + addListener = correct [OK]
Hint: Use namespace import and new events.EventEmitter() [OK]
Common Mistakes:
  • Using default import which is invalid
  • Importing from 'node:events' which is Node.js native
  • Confusing on() and addListener() usage with wrong import
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard