有啥方法可以将 Node 项目转换为 Deno?

Posted

技术标签:

【中文标题】有啥方法可以将 Node 项目转换为 Deno?【英文标题】:Is there any way to convert a Node project to Deno?有什么方法可以将 Node 项目转换为 Deno? 【发布时间】:2020-08-29 09:17:12 【问题描述】:

我想将 Node.js 项目转换为 Deno。有指南吗?

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

有什么建议吗?

【问题讨论】:

【参考方案1】:

Deno 和 Node.js API 不兼容,当然您可以重用所有 javascript/typescript 代码,但您需要重构或添加 polyfill。

为了简化迁移,Deno 提供了Node Compatibility library、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-pad 已从 node_modules/ 正确加载。因此,对于不依赖 Node.js API 的 NPM 包,您可以使用 std/node 轻松请求它们。

这是list of all supported modules


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

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

对于在 Node.js 上完美运行的大型项目,IMO 不值得迁移它们。 Deno 和 Node.js 可以共存,不是一个或另一个。如果您愿意,可以在 Deno 上构建新项目,而不是迁移旧项目。

【讨论】:

【参考方案2】:

查看Denoify,它是一个构建工具,可以满足您的需求。您不必编写工具为您执行的端口,文档中对此进行了详细说明。

披露:我是作者。

【讨论】:

【参考方案3】:

从 Deno v1.15 开始,Node.js compatibility mode 是不稳定的,并带有一些警告。还有一个issue in the repo跟踪Node Compat模式的进度。

引用docs

Node.js 兼容模式

从 v1.15 开始,Deno 提供了 Node 兼容模式,使其 可以直接运行为 Node.js 编写的程序子集 德诺。可以通过传递 --compat 标志来激活兼容模式 命令行界面。

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

⚠️ 包管理目前超出了 Node.js 的范围 兼容模式。暂时我们建议继续使用您的 当前解决方案(npm、yarn、pnpm)。

请查看文档

Example How it works? Module Resolution Node.js built-in modules Typescript support

【讨论】:

以上是关于有啥方法可以将 Node 项目转换为 Deno?的主要内容,如果未能解决你的问题,请参考以下文章

Deno 会取代 Node.js 吗?

Deno 并不是下一代 Node.js

Deno 将于 5 月 13 日发布 1.0 版本,Node.js 会逐渐失宠吗?

TypeScript--deno前置学习

有啥方法可以将 Einstein 分析连接到一些 3rd 方 BI 应用程序,例如 powerbi?

为啥 list 应该先转换为 RDD 再转换为 Dataframe?有啥方法可以将列表转换为数据框?