AI 从业者都在关注的 NVIDIA GTC 2023 China AI Day 来了!报名戳 了解详情
写点什么

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

发布了 726 篇内容, 共 414.3 次阅读, 收获喜欢 2609 次。

关注

评论

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

最新版SpringBoot开发实战:阿里技术官从基础到项目综合实战pdf

Java 程序员 后端

来自北京大学NOIP金牌选手yxc的常用代码模板3——搜索与图论

Java 程序员 后端

极速体验docker容器健康,高并发分布式系统架构

Java 程序员 后端

毕业就想进大厂?啃完这篇阿里大神整理的Kafka神仙文档,从此面试底气十足

Java 程序员 后端

最新基准测试:Kafka、Pulsar-和-RabbitMQ-哪个最快,阿里Java笔试题目

Java 程序员 后端

架构设计基础知识整理,java常用设计模式面试

Java 程序员 后端

欲速则不达,欲达则欲速!,mysql主从复制原理两主一从ID

Java 程序员 后端

每天一遍、阿里相见,Github爆火的spring高级源码解析免费下载

Java 程序员 后端

架构师成长之路-docker 搭建es集群,rocketmq教程教程

Java 程序员 后端

沉寂唯品会3年,毅然辞职冲刺阿里,我是怎么备战金三银四的

Java 程序员 后端

泪目!跳槽太不容易,蚂蚁金服三轮面试,linux高可用集群架构毕业设计

Java 程序员 后端

普通程序员就不能有拥有架构师光环?想要建立架构思维,这份京东架构技术精髓一定不能错过

Java 程序员 后端

服了!阿里资深架构师发布SpringCloud笔记,在GitHub标星已达81

Java 程序员 后端

本科毕业斩获字节offer的我做了什么准备?大厂面试经验试题分享(1)

Java 程序员 后端

毕业两年,工作三年Java程序员的一点点体会与建议,java面试问项目流程

Java 程序员 后端

毕业三年,从小公司到大厂,先后四面阿里,沈剑架构师训练营

Java 程序员 后端

毕业两年面试阿里成功,月薪36k,分享一下我的经历,锁机制(本地锁+分布式锁)超全分析

Java 程序员 后端

本科毕业斩获字节offer的我做了什么准备?大厂面试经验试题分享

Java 程序员 后端

如何用内网渗透突破安全策略

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

来自北京大学NOIP金牌选手yxc的常用代码模板4——数学知识

Java 程序员 后端

栈实现队列(队列实现栈),java编程规范pdf百度云

Java 程序员 后端

元宇宙到底是个啥?

石云升

元宇宙 10月月更

最近被安排搞搜索接口优化,压测了4次,才勉强达到要求

Java 程序员 后端

来自阿里大牛20000字总结-+-40张图文详解,我就不信你还参透不了并发编程

Java 程序员 后端

Go channel,面试官会这样问

Rayjun

channel Go 语言

每日一学:这个-RabbitMQ-必会-Routing路由模式,你学会了吗

Java 程序员 后端

浅析Mysql索引数据结构演变,让你一看就懂(1),意外收获字节跳动内部资料

Java 程序员 后端

月薪60k的Java开发在阿里是什么级别?对技术能力有哪些要求?

Java 程序员 后端

有个厉害的程序员老婆是什么体验?,mysql性能优化面试题

Java 程序员 后端

查询太慢?看看ES是如何把索引的性能压榨到极致的!,java基础程序设计

Java 程序员 后端

死磕Spring之AOP篇 - Spring AOP常见面试题,java高级开发工程师简历

Java 程序员 后端

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