写点什么

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:006646
用户头像
蔡芳芳 InfoQ主编

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

关注

评论

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

SpringBoot 整合 MyBatis-Plus

SpringBoot 2 Mybatis-Plus 8月月更

Kubernetes 1.25 发布!博云带你玩转新特性

BoCloud博云

容器 云平台 #k8s

MobTech ShareSDK Android端快速集成

MobTech袤博科技

android Android Studio SDK 教程

ONES 团队版50人以下免费,助力中小企业「弯道超车」

万事ONES

这个让全网眼红的红利行业,还需要人才吗

千锋IT教育

JS【数组合并】的性能差异对比

掘金安东尼

JavaScript 前端 8月月更

HMS Core Discovery第17期直播预告|音随我动,秒变音色造型师

HarmonyOS SDK

【python】通用的json_diff方法

转转技术团队

测试工具

我想搞信息资讯聚合类产品,如何编写PHP爬虫?

智伍应用

灏天农业签约旺链科技,推动中药材产业健康发展

旺链科技

区块链 产业区块链 中药材

攻击面管理:企业向主动安全转变的开始

SEAL安全

攻击技术 黑客攻击 软件供应链安全

静态IP是什么意思?和动态IP 有什么区别

郑州埃文科技

静态IP 动态IP IP地址

藏不住了,数据分类分级利器「极盾·智辨」发布

极盾科技

网络安全 安全 数据 数据分类 数据安全

使用 yo 命令行向导创建 SAP UI5 应用

汪子熙

前端开发 SAP SAP UI5 ui5 8月月更

密集计算场景下的 JNI 实战

vivo互联网技术

Java c++ 性能 JVM jni

DR882-Qualcomm-Atheros-QCA9882-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-5G-high-powe

wallys-wifi6

中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结

阿里巴巴中间件

阿里云 开源 云原生 dubbo

百度App 低端机优化-启动性能优化(概述篇)

百度Geek说

性能优化 运维 服务器

RedisSyncer同步引擎的设计与实现

京东科技开发者

同步代码 key 引擎 redis 底层原理

Apache顶级项目Ranger和Alluxio的最佳实践(附教程)

Alluxio

Ranger Alluxio Apache 分布式 大数据 开源 8月月更

搜索引擎分布式系统思考实践

得物技术

搜索引擎 分布式系统

人工智能应用落地的两难

felix

人工智能 开放api 算法模型

极盾·析策XDR,助力顶级汽车集团构建安全运营中台

极盾科技

网络安全 安全 信息安全 数据安全 xdr

阿里云丁宇:以领先的云原生技术,激活应用构建新范式

阿里巴巴中间件

阿里云 Serverless 容器 RocketMQ 云原生

DR600VX-Atheros-QCA9880-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-Dual-Band-2.4GHz-5GHz

wallys-wifi6

大咖说 | 云采销助力中小企业获客提升300%,交易提效58%

大咖说

数字化升级 云采销

Zebec社区利好频传,Galaxy Project上领取专属Zebec OAT

小哈区块

从零开始实现一个MyBatis加解密插件

vivo互联网技术

spring mybatis

图灵访谈 | Vue.js官方团队成员霍春阳:跨专业做程序员,是什么感受?

图灵社区

vue.js 代码人生

高效的工作从取消汇报开始|敏捷实践

LigaAI

高效工作 Scrum 敏捷开发 研发团队 每日站会

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