前言Deno 已经正式发布了! 我说这句话时候,是不是很多前端 和 NodeJS 工(码)程(农)师已经按不住自己的40米大刀了。心中的不仅感慨前端是真的会造轮子,有了 node 还不够吗,还没学会 node 又搞了个 deno,node 和 deno 啥区别?! 的确,deno 和 node 形态很相似,要解决的问题似乎也相同,那他们到底有啥区别,这一切究竟是道德的沦丧还是 ry 的扭曲,让我们走进本篇文章,一探究竟。 一定要看到最后哦,最后有惊喜哦!Deno VS Node
1.内置 API 引用方式不同node 模块导入node 内置 API 通过模块导入的方式引用,例如: const fs = require("fs"); fs.readFileSync("./data.txt"); 复制代码
deno 全局对象而 deno 则是一个全局对象 Deno.readFileSync("./data.txt"); 复制代码
具体 deno 有哪些方法,我们可以通过 deno # 或 deno repl
复制代码
进入 {
Buffer: [Function: Buffer],
readAll: [AsyncFunction: readAll],
readAllSync: [Function: readAllSync],
writeAll: [AsyncFunction: writeAll],
writeAllSync: [Function: writeAllSync],
# .....
}
这种处理的方式好处是简单、方便,坏处是没有分类,想查找忘记的 API 比较困难。总体来说见仁见智。 2.模块系统我们再来看一下模块系统,这也是 deno 和 node 差别最大的地方,同样也是 deno 和 node 不兼容的地方。 node CommonJS 规范我们都知道 node 采用的是 CommonJS 规范,而 deno 则是采用的 ES Module 的浏览器实现,那么我们首先来认识一下: ES Module 的浏览器实现具体关于 ES Module 想必大家都早已熟知,但其浏览器实现可能大家还不是很熟悉,所以我们先看一下其浏览器实现: <body> <!-- 注意这里一定要加上 type="module" --> <script type="module"> // 从 URL 导入 import Vue from "https:///vue@2.6.11/dist/vue.esm.browser.js"; // 从相对路径导入 import * as utils from "./utils.js"; // 从绝对路径导入 import "/index.js"; // 不支持 import foo from "foo.js"; import bar from "bar/index.js"; import zoo from "./index"; // 没有 .js 后缀 </script> </body> 复制代码
deno 的模块规范deno 完全遵循 es module 浏览器实现,所以 deno 也是如此: // 支持 import * as fs from "https://nd/std/fs/mod.ts"; import { deepCopy } from "./deepCopy.js"; import foo from "/foo.ts"; // 不支持 import foo from "foo.ts"; import bar from "./bar"; // 必须指定扩展名 复制代码
我们发现其和我们平常在 webpack 或者 ts 使用 es module 最大的不同:
关于第 1 点,争议非常大,有人很看好,觉得极大的扩展了 deno 库的范围;有人则不太看好,觉得国内网速的原因,并不实用。大家的看法如何,欢迎在评论区发表 |
|
来自: python_lover > 《待分类》