Deno:为 Node.js 内置插件提供 Polyfill

Deno: Provide Polyfills for Node.js Built-Ins

Deno 有办法 shim/polyfill Node.js 模块吗?

也就是说,假设我有一个属于 Node.js 项目的打字稿文件,它看起来像这样

import { performance } from 'perf_hooks';

function hello() {
  console.log(performance.performance.timeOrigin)
  console.log("Hello World")
}

export {
  hello
}

我想在 deno 程序中使用这个模块,所以我做了这样的事情

import {hello} from './some-module.ts'

function main() {
  hello()
}

但是,我不能这样做,因为 Deno 中没有 perf_hooks 模块。

% deno run main.ts 
Check file:///private/tmp/main.ts
error: TS2305 [ERROR]: Module '"deno:///none.d.ts"' has no exported member 'performance'.
import { performance } from 'perf_hooks';
         ~~~~~~~~~~~
    at file:///private/tmp/some-module.ts:1:10

我想编写自己的 perf_hooks 版本来实现我需要的属性和方法,然后告诉 Deno 嘿——只要有人想要 perf_hook 使用我的改为模块 .

Deno 有内置的东西可以让我这样做吗?如果没有,Deno 社区是否使用一些常见的 practive/bundling 技术来做这类事情。

您可以使用https://deno.land/x/std/node. It provide some Node's built-in modules. For external modules, you can take a look at https://esm.sh(语法为https://esm.sh/<npm-pkg>

而如果你想像NodeJS环境一样使用它,你可以这样做:

import { ... } from "module"; // Let's use NodeJS "module" module for this

然后指定一个import map

{
  "imports": {
    "module": "https://deno.land/std/node/module.ts"
  }
}

运行 带有 --import-map 标志

$ deno run --import-map=/path/to/import_map.json your_file.ts