写点什么

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:006877
用户头像
蔡芳芳 InfoQ 总编辑

发布了 813 篇内容, 共 591.6 次阅读, 收获喜欢 2809 次。

关注

评论

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

云图说 | 通过Helm模板快速部署中间件应用

华为云开发者联盟

容器 k8s

Vue-防止重复点击指令

老菜鸟

Vue 指令

微服务 API 网关kong的爬坑之路

夏目

微服务 kong

非暴力拆解:小熊派NB-IoT通信扩展板

华为云开发者联盟

IoT 通信 芯片

领域模型的定义

Braisdom

Java 领域驱动设计 ObjectiveSql

非传统的“易观”,和他的技术驱动之路

易观大数据

大咖布道丨证券行业规模化敏捷和核心能力演进

华为云开发者联盟

产品 证券 大咖

第一周总结

一个节点

极客大学架构师训练营

简直人生外挂,直接涨薪20K,跪谢这份性能调优实战指南

小Q

Java MySQL 架构 JVM 性能调优

云栖大会CDN技术专场:如何构建企业级内容分发加速体验?

阿里云Edge Plus

CDN

第一周作业

Geek_4c1353

极客大学架构师训练营

整合Micrometer与Prometheus & ElasticSearch

李欢颜

UML图

饺子

[Go] 设置各种选项的最佳套路

eddix

设计模式 Go 语言

架构师训练营01周 -- 命题作业

骏马

极客大学架构师训练营

食堂就餐卡系统设计

一个节点

极客大学架构师训练营

Servlet 知识点

陈靓-哲露

第一周学习总结

饺子

架构师技术栈

elfkingw

阿里云发布边缘计算视频上云解决方案 为海量视图处理提供城市级云基础设施

阿里云Edge Plus

边缘计算

聚焦2020云栖大会 边缘计算专场畅谈技术应用创新

阿里云Edge Plus

多方计算——打开区块链应用新场景

CECBC

区块链 大数据

程序员写个人技术博客的价值与意义

Java架构师迁哥

第一周学习架构方法总结

三板斧

谈谈力软快速开发平台B/S专业报表工具

Learun

小程序 敏捷开发 开发者工具 报表

抓住这些BUG程序员进大厂也就这回事,工作后2到3年进大厂操作指南

Java架构师迁哥

就餐卡系统第一周作业「架构师训练营第 1 期」

天天向善

学习

架构方法周总结第一周作业「架构师训练营第 1 期」

天天向善

学习

食堂就餐卡系统UML设计 - 架构师训练营第1周作业

netspecial

极客大学架构师训练营

加速连接效率 阿里云推出5G消息使能平台MEP

阿里云Edge Plus

Vitalik Buterin: 协作的好坏两面

安比实验室SECBIT

区块链 博弈论 协作

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