有没有一种方法将Node项目转换为Deno?

13

我想将一个Node.js项目转换为Deno。是否有可用的指南?

我的当前项目有很多NPM文件,并且已经使用TypeScript。

有什么建议吗?

4个回答

9
请查看Denoify,它是一款能够满足你需求的构建工具。你不需要手动编写端口,该工具会为你完成,并详细记录在文档中。
声明:我是该工具的作者。 repo

9
截至Deno 1.25版本,可以通过使用npm:指定符来实验性地支持NPM。

如何在Deno中使用npm模块?


Deno和Node.js的API不兼容,当然你可以重用所有的JavaScript/TypeScript代码,但是你需要重构或添加polyfills。
为了简化迁移,Deno提供了一个Node兼容库,即std/node,但仍需要大量的工作。
幸运的是,require已经是其中一个支持的polyfill。
import { createRequire } from "https://deno.land/std/node/module.ts";

const require = createRequire(import.meta.url);
// Loads native module polyfill.
const path = require("path");
// Visits node_modules.
const leftPad = require("left-pad");

console.log(leftPad('5', 5, '0'))

如果你运行这个例子:
npm i left-pad
deno run --allow-read node.js
// 00005

正如你所见,left-padnode_modules/ 正确加载了。因此,对于不依赖于 Node.js API 的 NPM 包,你可以使用 std/node 轻松地引入它们。

这是一个所有支持的模块列表


现在,对于严重依赖Node.js API的包,你能做的最好的事情就是使用Deno API重新编写它们。

随着项目成熟,将会有更简单的方法将Node.js项目转换为Deno。

我个人认为,对于在Node.js上完美运行的大型项目来说,迁移到Deno是不值得的。Deno和Node.js可以共存,不是非此即彼的关系。如果你喜欢的话,在Deno上构建新项目,而不是迁移旧项目。


0
从Deno v1.15开始,有Node.js兼容模式,但是该模式不稳定且存在一些注意事项。还有一个存储库中的问题跟踪节点Compat模式的进度。
引用自文档Node.js 兼容模式 从 v1.15 开始,Deno 提供了 Node.js 兼容模式,使得可以直接在 Deno 中运行一部分为 Node.js 编写的程序。通过在 CLI 中传递 --compat 标志即可激活兼容模式。

⚠️ 当前使用兼容模式需要 --unstable 标志。如果您打算使用 CJS 模块,则还需要 --allow-read 标志。

⚠️ 目前 Node.js 兼容模式不支持包管理。暂时建议继续使用您当前的解决方案(npm、yarn、pnpm)。

请查看文档以获取更多信息。


-1

denoify 演示:

#! /bin/sh

cd $(mktemp -d)
npm init -y
sed -i 's|"main": "index.js"|"main": "src/index.ts"|' package.json
mkdir src

cat >src/index.ts <<'EOF'
import { writeSync } from 'fs'
writeSync(1, "hello world\n")
EOF

echo '{"compilerOptions": { "outDir": "out" }}' >tsconfig.json
npm install denoify
npx denoify
deno run --allow-env=NODE_DEBUG deno_out/index.ts

输入:src/index.ts

import { writeSync } from 'fs'
writeSync(1, "hello world\n")

输出:deno_out/index.ts

import { writeSync } from 'https://deno.land/std@0.159.0/node/fs.ts'
writeSync(1, "hello world\n")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接