我想将一个Node.js项目转换为Deno。是否有可用的指南?
我的当前项目有很多NPM文件,并且已经使用TypeScript。
有什么建议吗?
我想将一个Node.js项目转换为Deno。是否有可用的指南?
我的当前项目有很多NPM文件,并且已经使用TypeScript。
有什么建议吗?
npm:
指定符来实验性地支持NPM。
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
轻松地引入它们。
这是一个所有支持的模块列表
现在,对于严重依赖Node.js API的包,你能做的最好的事情就是使用Deno API重新编写它们。
随着项目成熟,将会有更简单的方法将Node.js项目转换为Deno。
我个人认为,对于在Node.js上完美运行的大型项目来说,迁移到Deno是不值得的。Deno和Node.js可以共存,不是非此即彼的关系。如果你喜欢的话,在Deno上构建新项目,而不是迁移旧项目。
⚠️ 当前使用兼容模式需要 --unstable 标志。如果您打算使用 CJS 模块,则还需要 --allow-read 标志。
⚠️ 目前 Node.js 兼容模式不支持包管理。暂时建议继续使用您当前的解决方案(npm、yarn、pnpm)。
请查看文档以获取更多信息。
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")