前言

2019年2月18日,发布了Deno@v0.3.0版本。

在这个版本里,主要的API做了修改变更,原来import的方式引用核心模块import deno from "deno" 现在被全局变量Deno代替。同时,仍然允许代码里的Deno特性可以在浏览器中运行。目前新版本会兼容以前import deno的方式使用其核心方法,但在以后的版本会删除这方面的兼容,请更新现有的deno代码。

此次版本官方的变更主要有:

  • 添加Deno全局变量对象
  • 添加window.location
  • 添加Deno.version对象,对象包括所支持的TypeScript版本号
  • 添加Deno.execPath
  • File类里,添加seek和实现对应的Seeker
  • 修复使用文件时候无扩展名的处理
  • 添加Deno.run使用时候的环境传参
  • 打开了v8_postmortem_support
  • 升级V8 至7.4.158版本
  • 可以使用适当目录的缓存文件
  • REPL支持多行recoverable errors。
  • 遵守TypeScriptNO_COLOR输出
  • 支持范围变量,解锁了REPL异步操作和报错颜色浏览器

Deno使用全局化带来期待

用JavaScript写的Deno代码未来可以多端兼容

注:
如果是用 JavaScript 写的代码,同时不依赖Deno的原生API,就可以兼容 Deno环境和浏览器环境使用。
如果 JavaScript 代码里包含了 Deno原生API的依赖,如果依赖的API只是能以浏览器的方式兼容,就需要实现一个window.Deno的兼容对应的原生API就能保证代码的兼容。

例如以下代码在Deno环境下执行

async function main() {console.log(Deno.platform);
}
main();

在浏览器,如果要兼容 Deno.platform 的使用,就可以模拟 Deno 的全局变量的对应 API

window.Deno = {};
Deno.platform = (function(w) {const userAgent = w.navigator.userAgent;let arch = "x64";let os = "Unknown";if (/win32|wow32/i.test(userAgent)) {arch = "x32";}if (/mac os/i.test(userAgent)) {os = "Mac";} else if (/linux/i.test(userAgent)) {os = "Linux";} else if (/windows|win32/i.test(userAgent)) {os = "Window";} return {arch,os,}
})(window)async function main() {console.log(Deno.platform);
}
main();

  • 关于兼容浏览器的Deno的原生API

    • 大部分API可能无法实现,例如readFile,readDir之类的。但是如果将readFile利用input[type="file"]的方式实现也未尝不是一个方向,即利用浏览器的能力伪实现系统依赖功能。
    • 可以实现部分非系统功能依赖API例如Deno.env()Deno.platform之类的

浏览器API的兼容化

本次Deno升级到v0.3.0版本,新增了window.location属性,意味着对浏览器Web API的兼容更也更进一步了。

浏览器的Web API通常是挂载在全局的window变量上。在Deno的环境里,也有个全局挂载对象window,挂载在window上的属性都可以直接使用。

例如在Deno@v0.3.0环境里,执行一下代码:

const apiList = Object.keys(window)console.log(`Supported global API [count: ${apiList.length}]: rn`);
console.log(`${apiList.join(',')} rn`);

会打印出一下信息

  • 截至Deno@v0.3.0 版本里,挂载在windowWeb API有一下20个

    • window
    • atob
    • btoa
    • fetch
    • clearTimeout
    • clearInterval
    • setTimeout
    • setInterval
    • location
    • Blob
    • CustomEvent
    • Event
    • EventTarget
    • URL
    • URLSearchParams
    • Headers
    • FormData
    • TextEncoder
    • TextDecoder
    • performance
  • 上述 Web API 的使用方式,和浏览器的使用一致,使用方法,都可以在 MDN web 开发文档里查到。
  • 常用的浏览器支持的API在Deno环境下都可以使用
    • 例如locationfetch

用JavaScript写的代码(无Deno引用)可以多端兼容

例如一下JavaScript代码在Deno环境和浏览器环境执行,结果都一样的。

async function main() {const res = await fetch("https://cnodejs.org/api/v1/topic/5433d5e4e737cbe96dcef312");const json = await res.json();console.log("Fetch result: rn");console.log(JSON.stringify(json));
}
main();

  • 浏览结果
  • Deno 环境下结果

后记

最后比较有意思的是,Deno在发布v0.3.0版本后,官方的介绍从原来的

A new way to JavaScript

替换成

A browser-like command line runtime

每次的Deno的每次较大的版本变更,介绍语都有一定的变更,代表着该次变更的影响,但万变不离其宗就是逐步朝着原有的浏览器全兼容的方向去发展。

如果想更加方便进行技术交流,可以关注我公众号 “大海码”。

antdesign 所兼容的浏览器_Deno v0.3.0 来啦!浏览器兼容更进一步了相关推荐

  1. 兼容浏览器_你知道什么是跨浏览器兼容吗?

    文章来自:卓码软件测评 在过去的二十年里,互联网得到了巨大的发展.1998年只有大约240万个网站,而现在已经有大约18亿个了,这正好是74900%的增长.不仅如此,互联网用户的数量也从1998年的1 ...

  2. 用Meta标签代码让360双核浏览器默认极速模式打开网站不是兼容模式

    我开发了一个网站,大量采用了html5和css3,希望用户都以webkit内核打开页面,但是测试却发现360的以ie内核打开为推荐模式,不知原因为何.其实360给网站开发者设计了一种选择的方法,只要加 ...

  3. linux电视浏览器下载软件,【UC浏览器开发者工具Linux版】UC浏览器开发者工具下载 v0.4.1 Linux版-趣致软件园...

    UC浏览器开发者工具Linux版是一款专门针对UC浏览器开发者版本所推出的调试工具,这款软件完美兼容DevTools Protocol,因此用户无需再搭配其它工具便可以快速有效的完成调试工作.除此之外 ...

  4. bootstrap和css样式兼容(ie、360、qq)不同浏览器的解决办法

    一.作为一个之前没有真正实践项目的前端新手,这次在实践的时候就发现了一个严重的问题--兼容性. 开发者在前端开发,调试的时候,使用的基本都是谷歌.火狐这种开发者浏览器,忽略了其实我们国内主流的浏览器仍 ...

  5. html2canvas 浏览器端截屏并下载保存(兼容IE)

    html2canvas 浏览器端截屏并下载保存(兼容IE) <!DOCTYPE html> <html> <head> <meta charset=" ...

  6. 360浏览器已经适配鸿蒙系统,360安全浏览器全面支持IE9 提速兼容双重奏

    2011年3月15日中午,微软发布了全新的IE9浏览器正式版.五小时后,360推出了全面支持IE9的360安全浏览器3.7 beta4版.该版本全方位开启了IE9内核的各种高性能引擎,并对IE9的兼容 ...

  7. AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 wps office, excel ppt

    AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 office   更多主页   下载地址   ​​​​​​​ 能在以及几乎所有支持websock浏览器,包括chro ...

  8. ie8浏览器html圆角问题,css圆角和阴影兼容问题(ie7,ie8)

    Document .box { background-color: #f0f0f0; width: 740px; height: 40px; border: 1px solid #d7d7d7; -m ...

  9. OpenYurt v0.4.0 新特性发布:高效地管理边缘存储资源

    作者 | 高文俊 来源|阿里巴巴云原生公众号 ​ 简介 OpenYurt 是由阿里云开源的基于原生 Kubernetes 构建的.业内首个对于 Kubernetes 非侵入式的边缘计算项目,目标是扩展 ...

最新文章

  1. css 实现打分效果
  2. YAML中多行字符串的配置方法总结
  3. 烦人的Facebook分享授权
  4. idea.config.path is invalid 问题
  5. 谷歌正式推出 Fuchsia OS比拼HarmonyOS!
  6. 三年经验前端社招——有赞
  7. mysql之union合并查询
  8. jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
  9. python中print后面加逗号
  10. 蠕虫病毒通过什么侵入计算机系统,注意!蠕虫病毒入侵!我区已有单位个人计算机中招!...
  11. ubuntu的无线网无法连上
  12. Ubuntu Emacs Fcitx 中文输入法设置
  13. 固态硬盘(samsung SSD 850 pro)相关问题
  14. 大数据平台、从数仓 到 数据中台
  15. THUNLP发布《更多数据,更多关系,更多上下文与更多开放:关系抽取问题综述与前瞻》阅读笔记
  16. 制图中比例尺的一些问题
  17. lol登入显示目录服务器失败,英雄联盟(LOL)登录游戏提示“连接DIR服务器失败”?...
  18. 命令行里打 cd 简直是浪费生命
  19. 电子科技大学信息与软件工程学院
  20. js语法+dom+js图片库+最佳实践+图片库改进版

热门文章

  1. zemax评价函数编辑器_zemax常用评价函数操作数..doc
  2. PHP新闻APP,【优速软件】APP/小程序接口:全部新闻列表,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
  3. 服务器关于数据流转方式
  4. web前端基础(13js语法基础)
  5. 秋风秋雨愁煞人:寒宵独坐心如捣
  6. Remixer-谷歌的UI参数动态修改框架
  7. win10的11对战平台突然无法启动魔兽
  8. abap 创建出口历程_SAP ABAP第一,两,三代出口型BADI实现 解释的概念
  9. 可以分屏的软件_Screen分屏软件下载|Screen+专业分屏 免费版v1.4.25 下载
  10. 计算机二级学校查询,计算机等级考试查询系统