Bird
Raised Fist0
Denoframework

Deno shims for Node.js APIs - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What are Deno shims for Node.js APIs?
Deno shims for Node.js APIs are pieces of code that let Deno run programs written for Node.js by mimicking Node.js features inside Deno.
Click to reveal answer
beginner
Why does Deno use shims for Node.js APIs?
Deno uses shims to help developers run Node.js code without changing it much, making it easier to switch or share code between Deno and Node.js.
Click to reveal answer
intermediate
Which Node.js core modules are commonly shimmed in Deno?
Modules like 'fs' (file system), 'path', 'process', and 'buffer' are often shimmed so Deno can support Node.js code that uses them.
Click to reveal answer
intermediate
How do Deno shims affect performance compared to native Node.js?
Shims add a small layer of translation, so some operations might be slightly slower than native Node.js, but Deno aims to keep this overhead minimal.
Click to reveal answer
beginner
How can you enable Node.js compatibility in a Deno project?
You enable Node.js compatibility by importing the 'std/node' shims to access Node.js APIs.
Click to reveal answer
What is the main purpose of Deno shims for Node.js APIs?
ATo replace Deno's runtime with Node.js
BTo allow Deno to run Node.js code with minimal changes
CTo convert JavaScript to TypeScript automatically
DTo improve Deno's security features
Which module provides Node.js shims in Deno?
Adeno/node
Bnode-compat
Cenable-node
Dstd/node
Which of these is NOT typically shimmed by Deno for Node.js compatibility?
Adocument
Bhttp
Cpath
Dfs
What is a possible downside of using shims in Deno?
AThey can cause slight performance overhead
BThey make code run faster than native Node.js
CThey remove security features
DThey prevent using TypeScript
How do you import Node.js shims in a Deno project?
Aimport from 'deno/node'
Bimport from 'node_modules'
Cimport from 'std/node' module
Dimport from 'npm/node-shims'
Explain what Deno shims for Node.js APIs are and why they are useful.
Think about how Deno can run Node.js code without rewriting it.
You got /3 concepts.
    Describe how to enable and use Node.js compatibility in a Deno project.
    Focus on the import statements.
    You got /2 concepts.

      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