如果您一直在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 statement和Node.js subpath imports。
好处是ESM应用程序可以加载和使用COMPORJS软件包。但不是相反。因此,搬到ESM是必须的。
新资产捆绑
你们中的许多人都要求这样做,所以我们很高兴地宣布,Adonisjs 6将包括Vite作为默认资产捆绑。
注意:我们也将继续维护WebPack Encore。因此,如果您还没有准备好移至Vite,则可以使用WebPack Encore。
更好的文档
当前的Adonisjs文档中有一些失误。例如,诸如IOC容器,服务提供商和软件包开发之类的主题是无证的。另外,文档应该更全面。
使用Adonisjs V6,我们花了大量时间涵盖文档中的所有框架方面。这是的偷偷摸摸的一些新添加的主题。
- 基本面部分涵盖了IOC容器,服务提供商和包装开发的使用。
- ACE文档从头开始重写,涵盖创建自定义ACE命令时需要知道的一切。
- 测试部分包括浏览器测试的文档(通过剧作家)和命令行测试。
要注意的一个重要的事情是文档是一份参考指南,解释了框架的工作原理和可用API。我们想象框架用户在想要有关主题的完整信息时引用文档。
文档将不会教您如何从头开始构建应用程序。为此,我们计划编写分步教程,以教您如何使用框架构建特定的应用程序。
同时,如果您想要基于教程的学习内容,请让我们向您介绍Adocasts和AdonisJS 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")
采用这种方法有一些弊端。
- 您必须始终使用打字稿官方编译器编译代码,因为变压器仅为
tsc
编写。 - 导入语法不熟悉JavaScript开发人员的眼睛。
- 开发人员必须与实现分开编写模块定义。
- 用户无法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容器的更多信息。
- ioc容器软件包README file。
- 涵盖Why you need an IoC container?的文章
- Live stream我们确实在Adonisjs应用程序外展示了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_case
或dash-case
的文件,以导出功能或对象的文件。
我们决定采用一种简单的方法,并始终如一地命名所有文件和文件夹,而不依赖文件导出的内容。 snake_case
格式灵感来自Dart和Google 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
。这使您可以充分利用工人线程来提高性能。 - 新路由器将允许您导入控制器并将其直接绑定到路线。基于字符串的控制器参考仍然存在,但不建议。导入和绑定控制器直接提供更好的类型安全和重构功能。
- 新事件发射极可让您通过类声明类型安全和重构功能的课程。
- 新邮件模块将包括
sendingblue
和resend
的驱动程序。
所有这些更新旨在帮助您使用adonisjs v6编写更好,更高效,更安全的代码。
现在和未来
我们已经完成了框架核心的所有更改,并准备迁移官方软件包与Adonisjs V6合作。
我们不会在官方包装中引入任何破坏的变化。目的是保持破裂的变化的表面积尽可能小,并帮助您快速将应用程序迁移到V6。
结论
得出结论,Adonisjs V6的目标是删除魔术并及时了解语言和平台的最新变化。
我们希望使Adonisjs成为更强大,高效且对开发人员友好的框架。相信我们;我们对内部的V6非常满意,并且超级泵释放它。让我分享我们进行过内部对话的屏幕截图。
最后,我们感谢大家使用Adonisjs并分享他们的反馈。拥有在框架上工作的动力和精力直接来自所有人。
-
您的核心团队