QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Deno 1.6 正式发布!支持编译成单个可执行文件,苹果 M1 可原生运行

  • 2020-12-11
  • 本文字数:3018 字

    阅读完需:约 10 分钟

Deno 1.6正式发布!支持编译成单个可执行文件,苹果M1可原生运行

近日,Deno 1.6.0 正式发布。这一版本包含一些主要特性升级和许多错误修复,包括最受开发者关注的 deno compile 也取得了阶段性成果,现在 Deno 终于可以支持将 TypeScript 编译成单个可执行文件了。

 

以下是本次版本更新的要点一览:



如果你已经安装了 Deno,则运行 deno upgrade 即可升级到 1.6 版本。如果你是第一次安装 Deno,可以使用下面列出的几种方法:

# Using Shell (macOS and Linux):curl -fsSL https://deno.land/x/install/install.sh | sh

# Using PowerShell (Windows):iwr https://deno.land/x/install/install.ps1 -useb | iex

# Using homebrew (MacOS):brew install deno

# Using Scoop (Windows):scoop install deno

# Using Chocolatey (Windows):choco install deno

# Build from source using cargocargo install
复制代码

新特性和更改

deno compile:独立的自包含二进制文件



Deno 开发团队希望在 Deno CLI 中提供一个好用的实用工具链,deno fmt 和 deno lint 就是其中的例子。现在,Deno 工具链终于添加了另一个开发工具:deno compile。deno compile 对 Deno 来说,和 Node 里面的 nexe 或 pkg 的作用是一样的:从 JavaScript 或 TypeScript 源代码创建独立的自包含二进制文件。这也是 Deno 问题跟踪器上最受关注的一个问题。


它的工作机制是这样的:

$ deno compile --unstable https://deno.land/std@0.79.0/http/file_server.tsCheck https://deno.land/std@0.79.0/http/file_server.tsBundle https://deno.land/std@0.79.0/http/file_server.tsCompile https://deno.land/std@0.79.0/http/file_server.tsEmit file_server

$ ./file_serverHTTP server listening on http://0.0.0.0:4507/
复制代码


与 Deno 中的所有新特性一样,deno compile 需要--unstable 标志,因为短期内这个接口可能会迎来重大更改。如果你有任何反馈,请在Deno discord中发表评论,或在 Deno问题跟踪器上创建功能请求问题。


有关该实现的详细信息,参见 #8539(https://github.com/denoland/deno/pull/8539)。

当前限制

目前,使用 deno compile 时可能会遇到一些限制。如果你遇到了以下情况,请在对应的跟踪问题中提交反馈。


未来计划

你可能已经注意到,与其他为 JS 创建独立自包含二进制文件的工具(如 pkg)不一样的是,deno compile 没有可用于打包资产的虚拟文件系统。Deno 开发团队表示,希望随着将来一些 TC39 提案(例如 import assertions 和 asset references)的引入,可以不再需要虚拟文件系统,因为届时资产可以在 JS 模块图中正确表示。


目前来说,deno compile 子命令不支持跨平台编译,特定平台的编译必须在该平台上进行。如果有需求,Deno 开发团队想使用一个--target 标志,为编译时添加针对不同架构交叉编译的功能。这个跟踪问题是 #8567(https://github.com/denoland/deno/issues/8567)。


由于当前二进制文件打包的工作机制,二进制文件中包含了许多不必要的代码。经初步测试,除去这些不必要的代码后,可以将二进制文件的最终大小减少约 60%(减到 20MB 左右)。目前 Deno 开发团队正在做这方面的工作(例如 #8640,https://github.com/denoland/deno/pull/8640)。

内置 Deno 语言服务器



Deno 1.6 附带了一个新的 deno lsp 子命令,该子命令提供了一个实现LSP语言服务器协议的语言服务器。LSP 使编辑器可以与 Deno 通信,以提供各种高级功能,例如代码自动完成、linting 和悬停文档等。


这个新的 deno lsp 子命令尚未制作完成,但是它实现了许多主要的 LSP 功能:

  • 代码完成

  • 悬停提示

  • 转到定义

  • 转到引用

  • deno fmt 集成

  • deno lint 整合


Deno VSCode扩展尚不支持 deno lsp。它比新生的 deno lsp 提供的功能还是丰富许多。但是,随着 LSP 越来越成熟,预计这种情况将在未来几周内改变。现在,如果你要使用 VSCode 尝试 deno lsp,则必须安装VSCode Deno Canary。在尝试这个新扩展之前,请确保 Deno 1.6 已安装,并禁用这个扩展的旧版本,否则诊断可能会重复。


要跟踪开发进度,请查看问题 #8643(https://github.com/denoland/deno/issues/8643)。#8643 完成后,Deno 开发团队将发布使用 deno lsp 的新版 vscode-deno。

迁移到更严格的类型检查

在 Deno 1.4 中,--unstable 引入了一些更严格的 TypeScript 类型检查,使开发团队能够将一堆代码从 JS 移到 Rust 中(从而大大提升了 TypeScript 的编译和打包性能)。在 Deno 1.5 中,默认情况下为每个人都启用了这些更严格的类型检查,并且给出了"isolatedModules": flase 的 TypeScript 编译器选项,以便开发人员选择关闭。


在这一版本中,这个选项已被移除。现在,所有 TypeScript 代码都使用"isolatedModules": true 运行。


关于此特性的更多详细信息,请参见 Deno 1.5 博客文章(https://deno.land/posts/v1.5#stricter-type-checks-in-stable)。

TypeScript 4.1


Deno 1.6 附带了 TypeScript 的最新稳定版本。


有关 Typescript 4.1 中新特性的更多信息,请参见 TypeScript 4.1 发布文章。

金丝雀频道


一些高级用户想要在下一个稳定的 Deno 版本发布之前测试错误修复和新特性,针对这些用户,Deno 开发团队提供了一个 canary 更新通道。这里每天会发布多个金丝雀版本,在 Deno 存储库的master分支上每提交一次就更新一个版本。


你可以通过版本末尾的 7 字符提交哈希,以及 deno --version 输出中的 canary 字符串来识别这些发行版。


从 Deno 1.6 开始,你可以切换到金丝雀频道,运行 deno upgrade,--canary 下载最新的金丝雀版本。你可以使用 deno upgrade --canary --version 5eedcb6b8d471e487179ac66d7da9038279884df 跳转到特定的提交哈希。


警告:在金丝雀版本之间跳转或降级为稳定版本可能会损坏你的 DENO_DIR。


可以从https://dl.deno.land下载金丝雀版本的 zip 文件。


金丝雀尚不支持 aarch64-apple-darwin 构建。

对 Mac Arm64 的实验性支持


使用苹果搭载 M1 处理器的新 Mac 设备的用户将能原生运行 Deno 了。在发行 zip 文件中,开发团队通过 LLVM target triple aarch64-apple-darwin 来引用这个目标。


该目标仍被认为是实验性的,因为它是用 Rust nightly 构建(我们通常使用 Rust 稳定版),并且团队尚无自动化 CI 流程来构建和测试这个目标。不过 M1 上的 Deno 完全通过了测试套件,因此团队还是挺有信心的,认为它会带来比较顺滑的体验。


以 M1 为目标的 rusty_v8 v0.14.0 的二进制文件也提供了相同的警告(https://github.com/denoland/rusty_v8/releases/tag/v0.14.0)。

std/bytes 的更改


作为标准库工作组(https://github.com/denoland/deno/issues/8405)工作的一部分;std/bytes 模块已做了大修。这是稳定 Deno 标准库的第一步。


大多数 API 都被重命名,以更好地与 Array 上可用的 API 保持一致:

  • copyBytes -> copy

  • equal -> equals

  • findIndex -> indexOf

  • findLastIndex -> lastIndexOf

  • hasPrefix -> startsWith

  • hasSuffix -> endsWith


完整的发行说明(包括错误修复)参加此处:https://github.com/denoland/deno/releases/tag/v1.6.0


原文链接:https://deno.land/posts/v1.6

2020-12-11 14:006664
用户头像
蔡芳芳 InfoQ主编

发布了 804 篇内容, 共 574.5 次阅读, 收获喜欢 2799 次。

关注

评论

发布
暂无评论
发现更多内容

nginx做代理访问慢,优化方案

Ng

使用VUE和Element 创建一个dialog对话框组件的详细过程

尔嵘

Kubernetes弃用Docker运行时,小甜甜变牛夫人影响了谁?

敏捷调度TASKCTL

Docker 云计算 架构 容器 #Kubernetes#

封装变化的内容

这就是编程

程序开发

layui使用templet格式化表格数据

世界首台人工智能地震监测系统问世;AAAI 2021 | 利用深度元学习对城市销量进行预测

京东科技开发者

大数据 红帽

第九章作业

Kalman

产品经理 产品经理训练营

第九章学习总结

Kalman

产品经理 产品经理训练营

产品经理训练营作业 06

KingSwim

颠覆认知——Redis会遇到的15个「坑」,你踩过几个?

Kaito

redis 踩坑 后端

音频互动连麦使用手册

anyRTC开发者

ios android 音视频 WebRTC RTC

第 9 周作业 _ 数据分析

园子

vue+element中引入百度地图

尔嵘

Vue Element 百度地图

剖析Android开发未来的出路在哪里,终局之战

欢喜学安卓

android 程序员 面试 移动开发

如何避免水肥一体化过量灌溉?开启智慧管理,一个屏幕轻松搞定

一只数据鲸鱼

物联网 数据可视化 智慧城市 智慧农业

力扣(LeetCode)刷题,简单题(第12期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

产品经理训练营 - 作业六

胡小湖

图解 | 原来这就是 IO 多路复用

Java 程序员 架构 面试

从优秀到卓越:成为DevOps专家的7项软技能

禅道项目管理

DevOps 趋势 软技能

大侠请留步!欢迎有极客精神的你

Lily

程序开发必备的六个信条

这就是编程

程序开发

中国云基础设施支出创新高,增速全球第一;国内首个区块链特色司法鉴定机构在京成立

京东科技开发者

区块链 人工智能 开发者

互联网大厂100道Android面试题助你冲关金三银四!附小技巧

欢喜学安卓

android 程序员 面试 移动开发

EGG Network公链生态应用EFTalk阿凡提

币圈那点事

聊聊Java的异常机制问题

华为云开发者联盟

Java 对象 异常机制 Throwable Error

五年磨一剑,海外运营商数字化转型与新一代OSS

鲸品堂

方法论 数字化转型 运营商

通过序列号Sequence零代码实现订单流水号

crudapi

低代码 流水号 crud crudapi 序列号

最火前端Web组态软件(可视化)

尔嵘

大前端 可视化数据分析搭建 web组态 托拉拽组态

AI量化智能交易软件,量化策略系统搭建

单片机如何从上电复位执行到main函数?

不脱发的程序猿

28天写作 嵌入式软件 单片机 3月日更 上电复位执行到main函数

nginx配置日志为json格式,nginx按照天实现日志分割,nginx配置负载均衡

Ng

Deno 1.6正式发布!支持编译成单个可执行文件,苹果M1可原生运行_语言 & 开发_Ryan Dahl_InfoQ精选文章