对Adonisjs 6的期望是什么?
#javascript #news #node #adonisjs

如果您一直在Twitter上关注我们,您可能已经看到我们谈论Adonisjs V6- Adonisjs Framework的新主要版本。我们在Adonisjs V5时代度过了四年,现在是时候以一些新的想法来搬到Adonisjs V6时代了。

但不用担心。将您的应用程序迁移到Adonisjs V6非常容易。根据您的应用程序的大小,可能需要几个小时或几天。我们还将提供一个命令行工具,以帮助将您的代码移至新版本。

adonisjs是一个模块化框架,具有丰富的功能核心(即@adonisjs/core软件包)和一系列官方维护的软件包。每个软件包均遵循其自己的发布周期和SEMVER版本控制。我们正在大大更新此版本中的框架核心(即Adonisjs V6)。

此更新的主要目标是与平台更紧密地工作。我们想使用JavaScript和Node.js的新功能,确保您的应用程序具有更好的类型安全性,并不断改善框架性能。

更新最低要求

因为我们使用了Node.js的新功能,因此您的系统需要至少具有Node.js版本18或更高版本。此版本是当前的Long-Term Support release

注意您可以使用Volta之类的工具轻松地管理和升级Node.js版本。

切换到eCmascript模块(ESM)

此更新中最重大的更改是我们转到Ecmasipript模块(ESM)。目前,Adonisjs使用并编译为COOMJS(CJS)格式。搬到ESM使我们可以使用新的语言功能并与生态系统保持更新。

这对您的应用意味着什么?

您的应用程序将能够使用在ESM中使用的新平台功能,例如Top-Level-Await statementNode.js subpath imports

好处是ESM应用程序可以加载和使用COMPORJS软件包。但不是相反。因此,搬到ESM是必须的。

新资产捆绑

你们中的许多人都要求这样做,所以我们很高兴地宣布,Adonisjs 6将包括Vite作为默认资产捆绑。

注意:我们也将继续维护WebPack Encore。因此,如果您还没有准备好移至Vite,则可以使用WebPack Encore。

更好的文档

当前的Adonisjs文档中有一些失误。例如,诸如IOC容器,服务提供商和软件包开发之类的主题是无证的。另外,文档应该更全面。

使用Adonisjs V6,我们花了大量时间涵盖文档中的所有框架方面。这是的偷偷摸摸的一些新添加的主题。

new_topics_sneak_peak 2

  • 基本面部分涵盖了IOC容器,服务提供商和包装开发的使用。
  • ACE文档从头开始重写,涵盖创建自定义ACE命令时需要知道的一切。
  • 测试部分包括浏览器测试的文档(通过剧作家)命令行测试

要注意的一个重要的事情是文档是一份参考指南,解释了框架的工作原理和可用API。我们想象框架用户在想要有关主题的完整信息时引用文档。

文档将不会教您如何从头开始构建应用程序。为此,我们计划编写分步教程,以教您如何使用框架构建特定的应用程序。

同时,如果您想要基于教程的学习内容,请让我们向您介绍AdocastsAdonisJS Mastery。这两个平台多年来一直在Adonisjs上创建内容。

更改导入模块名称

截至今天(即Adonisjs V5),您将目睹许多以@ioc关键字为前缀的进口。例如,路由器是从@ioc:Adonis/Core/Route模块导入的,并且事件发射极是从@ioc:Adonis/Core/Event模块导入的。

@ioc关键字是我们遵循的惯例,以传达该导入将从Adonisjs的IOC容器中解析。当您将代码从打字稿到JavaScript编译时,我们使用TypeScript transformer将此导入转换为IOC容器查找方法调用。

例如,如果您像这样导入路由模块。

import Route from '@ioc:Adonis/Core/Route

编译的输出将大致看起来如下。

const Route_1 = global[Symbol.for('ioc.use')]("Adonis/Core/Route")

采用这种方法有一些弊端。

  1. 您必须始终使用打字稿官方编译器编译代码,因为变压器仅为tsc编写。
  2. 导入语法不熟悉JavaScript开发人员的眼睛。
  3. 开发人员必须与实现分开编写模块定义。
  4. 用户无法kude6导入以查看实现。

从v6开始,我们将使用常规ESM导入删除@ioc关键字导入,并且仍然能够查找adonisjs依赖容器内的依赖项。

这是路由器导入在V5和V6中的样子。在v6中,如果您在router值上CTRL+click,您将看到一个标准的JavaScript模块从IOC容器中解析Singleton Router实例并将其导出为变量。

# In v5
import Route from '@ioc:Adonis/Core/Route'

# In v6
import router from '@adonisjs/core/services/router'

得出结论,在V6中,没有编译器魔术将导入转换为IOC容器查找方法调用。一切都很简单,易于推理。

您可以从以下链接中了解有关V6中使用的Adonisjs IOC容器的更多信息。

新的加密模块

adonisjs加密模块当前使用单个静态算法(即aes-256-cbc)加密数据。我们收到了一些以驱动程序形式支持其他算法的请求。

adonisjs v6将允许您注册自定义加密驱动程序,我们将捆绑以下加密算法的驱动程序。

  • aes-256-cbc
  • aes-256-gcm
  • chacha20-poly1305

更改文件系统命名约定

向前迈进,Adonisjs官方入门套件将使用snake_case格式来命名文件和文件夹。当前(在V5中),我们使用lowercase root级目录和子目录的PascaleCase名称。

在JavaScript生态系统中,没有关于命名惯例的一般共识。一些子社区使用PascalCase用于导出类和snake_casedash-case的文件,以导出功能或对象的文件。

我们决定采用一种简单的方法,并始终如一地命名所有文件和文件夹,而不依赖文件导出的内容。 snake_case格式灵感来自DartGoogle TypeScript style guide

要了解有关此决定的更多信息,请查看Aman Virk的List of rules and conventions I follow when writing code

灵活的存根系统

make名称空间下的脚手架ACE命令用于快速使用初始样板创建文件。例如,您可以使用make:controller命令创建一个控制器,make:model命令来创建模型,依此类推。

到目前为止,这些命令使用的模板在软件包的源代码内,并且无法自定义它们。

前进(使用V6),您可以将脚手架模板(存根)弹出到应用程序代码库中,并根据您的要求对其进行修改。下次,当您运行make命令时,adonisjs将使用弹出模板。

这是控制器模板的样子。

{{#var controllerName = generators.controllerName(entity.name)}}
{{#var controllerFileName = generators.controllerFileName(entity.name)}}
---
to: {{ app.httpControllersPath(entity.path, controllerFileName) }}
---
// import { HttpContext } from '@adonisjs/core/http'

export default class {{ controllerName }} {
}
  • 我们使用generators对象在前两行中定义变量。
  • 3-5行中,我们使用yaml前务来定义我们将要创建的文件的目标路径。这将使您可以在选择的任何目录中创建控制器和模型。
  • 最后,我们定义了控制器的初始内容。

新验证库

当前的Adonisjs验证模块为我们提供了很好的服务,但迫切需要一些改进。现在:

  • 它缺少联合数据类型。无法将字段验证为字符串或数字。
  • 创建自定义规则的API很粗糙。我们目睹了许多努力创建自定义规则的人。
  • 包代码库的状态不是很好。这使我们很难自信地做出重大改变。需要重大重写。

最后,我们开发了一个名为VineJS的框架不可知的验证库。 Vinejs将成为Adonisjs V6的官方验证系统。

vinejs比V5中使用的版本快得多,而且更全面。它使创建自定义规则,类型和验证复杂模式变得容易。

您可以在我们的介绍直播中了解有关Vinejs的更多信息。 https://www.youtube.com/watch?v=YdBt0s8NA4I

注意
您可以继续使用V6项目中的现有验证模块。无需立即迁移到Vinejs。

实际上,您可以在Adonisjs应用程序中使用Vinejs和现有验证模块。这将使您一次迁移一个验证器。

其他更改

在核心和某些模块中释放Adonisjs 6的其他更改。

以下是一些亮点:

  • VSCODE扩展已被完全改进,以与Adonisjs 5和Adonisjs 6合作。它引入了新功能,例如惯性支持 compontion-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-as-tag support in边缘和自动固定问题。
  • 新核心还将使用最新版本的记录包pino。这使您可以充分利用工人线程来提高性能。
  • 新路由器将允许您导入控制器并将其直接绑定到路线。基于字符串的控制器参考仍然存在,但不建议。导入和绑定控制器直接提供更好的类型安全和重构功能。
  • 新事件发射极可让您通过类声明类型安全和重构功能的课程。
  • 新邮件模块将包括sendingblueresend的驱动程序。

所有这些更新旨在帮助您使用adonisjs v6编写更好,更高效,更安全的代码。

现在和未来

我们已经完成了框架核心的所有更改,并准备迁移官方软件包与Adonisjs V6合作。

我们不会在官方包装中引入任何破坏的变化。目的是保持破裂的变化的表面积尽可能小,并帮助您快速将应用程序迁移到V6。

结论

得出结论,Adonisjs V6的目标是删除魔术并及时了解语言和平台的最新变化。

我们希望使Adonisjs成为更强大,高效且对开发人员友好的框架。相信我们;我们对内部的V6非常满意,并且超级泵释放它。让我分享我们进行过内部对话的屏幕截图。

chat_between_us

最后,我们感谢大家使用Adonisjs并分享他们的反馈。拥有在框架上工作的动力和精力直接来自所有人。

-

您的核心团队