【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

发布了 781 篇内容, 共 495.1 次阅读, 收获喜欢 2748 次。

关注

评论

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

软件测试 | 测试开发 | 软件测试入门必会-流程管理平台

测吧(北京)科技有限公司

测试

四个典型的车联网案例,给你数据架构升级思路

TDengine

tdengine 车联网 物联网

python安装包报错Microsoft Visual C++ 14.0 or greater is required

阿呆

pip

Java: 压缩PDF文档

Geek_249eec

Java PDF 压缩

边缘计算落地提速 天翼云Serverless边缘容器加速深耕市场

Geek_2d6073

使用WIX 进行商业智能OEM打包

葡萄城技术团队

Alluxio与北京大学计算机学院签署合作框架协议,推动产学研深度融合

Alluxio

开源 云原生 产学研用 Alluxio 北京大学

C语言太细了

清风莫追

c 10月月更

TDengine3.0流式计算引擎语法规则介绍

TDengine

数据库 tdengine 企业号九月金秋榜

2022-9-30

留白的艺术

【导航】FreeRTOS学习专栏目录 【快速跳转】

矜辰所致

目录 FreeRTOS 9月月更

卫星通信,给手机市场带来了什么?

脑极体

从React源码角度看useCallback,useMemo,useContext

goClient1992

React

软件测试 | 测试开发 | 软件项目管理与跨部门沟通协作

测吧(北京)科技有限公司

测试

【译】日志:每个软件工程师都应该了解实时数据的统一抽象【二】

Rae

kafka 架构 分布式 日志 原理

HummerRisk 云原生安全平台

HummerCloud

云计算 云原生 云安全

嵌入式RTOS的 任务栈 和 系统栈

矜辰所致

嵌入式 9月月更 RTOS

Tree-sitter入门

阿呆

Python tree-sitter py-tree-sitter

深度分析React源码中的合成事件

goClient1992

React

Go runtime:带你了解Go语言的GMP模型与goroutine调度

董哥的黑板报

Go 线程 操作系统 协程 runtime

多维数据库中的高效计算机制

元年技术洞察

智能多维数据库 专利解析

ReactDOM.render在react源码中执行之后发生了什么?

flyzz177

React

NFTScan 与 PANews 在 NFT 数据层面进行战略合作

NFT Research

API NFT 合作 MetaMask

软件测试 | 测试开发 | 测试面试 | 某 BAT 大厂测试开发面试真题与重点解析

测吧(北京)科技有限公司

测试

国庆数字游,融云都为您准备好了

融云 RongCloud

软件测试 | 测试开发 | 做为测试,那些必须掌握的测试技术体系

测吧(北京)科技有限公司

测试

大咖说·图书分享|深入集群:大型数据中心资源调度与管理

大咖说

编程 数据中心

开发者有话说|27岁暮年老人一生

百里丶落云

云数据库技术行业动态@2022-09-30

数据库 数据复制 数据管理 数据备份 数据对比

安利几款简单好用的帮助文档制作工具

Baklib

帮助文档

软件测试 | 测试开发 | 一文带你了解测试流程的体系

测吧(北京)科技有限公司

测试

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