升级到版本 6

升级到版本 6

Edge 的最新版本包含一些破坏性变更、一些性能改进,最重要的是它仅支持 ES 模块。本指南涵盖了升级到 edge.js@6 所必须遵循的步骤。

升级包

你可以从 npm 包仓库安装最新版本。目前,版本 6 使用 @next 标签发布。

npm i edge.js@next

edge-supercharged 插件的功能现已直接内置到 Edge 中,因此你可以卸载该包并移除其用法。

npm uninstall edge-supercharged

如果你之前使用了 edge-stacksedge-iconify,请务必也更新这些包。

npm i edge-stacks@next
npm i edge-iconify@next

兼容插件

如果你的项目尚未准备好应对破坏性变更(ESM 迁移除外),你可以在应用启动时配置 migrate 插件,它能在版本 5 和 6 之间提供兼容性。

import edge from 'edge.js'
import { migrate } from 'edge.js/plugins/migrate'
edge.use(migrate)

破坏性变更

  • 所有包现在仅支持 ESM。
  • 要求 Node.js >= 18.16.0
  • 布局和区块(sections)已被移除。我们建议使用组件替代。配置兼容插件可继续使用布局。
  • Props API 的变更
  • 移除了 @set 标签,改用 @let@assign 标签。了解更多
  • 全局辅助方法的变更。

Props API 的变更

组件的 props 已被完全更改,像 serializeserializeExcept 这样的方法已不再存在。取而代之,你必须使用 toAttrs 方法。

你可以使用兼容插件找回旧的 Props API。

/**
* 序列化所有属性
*/
$props.serialize()
$props.toAttrs()
/**
* 序列化除所提及属性外的所有属性
*/
$props.serializeExcept(['text'])
$props.except(['text']).toAttrs()
/**
* 仅序列化所提及的属性
*/
$props.serializeOnly(['class'])
$props.only(['class']).toAttrs()
/**
* 合并自定义属性
*/
$props.serializeOnly(['class'], { type: 'text' })
$props.only(['class']).merge({ type: 'text' }).toAttrs()

移除 @set 标签,改用 @let 与 @assign 标签

@set 标签已被移除,取而代之的是新的 @let@assign 标签。它们的内部工作机制和语法都与 set 标签不同。

你可以使用兼容插件重新支持 @set 标签。

/**
* 定义新变量
*/
@set('username', 'virk')
@let(username = 'virk')
/**
* 更新已有变量
*/
@set('username', 'romain')
@assign(username = 'romain')
/**
* 变更对象属性
*/
@set(user, 'username', 'romain')
@assign(user.username = 'romain')

全局辅助方法的变更

  • 移除 e 方法,改用 html.escape
  • 移除 stringify 方法,改用 js.stringify
  • 移除 safe 方法,改用 html.safe
  • 移除 raise 方法。它从未被文档记录过。
{{ e(post.content) }}
{{ html.escape(post.content) }}
{{ stringify(someJSONObject) }}
{{ js.stringify(someJSONObject) }}
{{ safe(post.content) }}
{{ html.safe(post.content) }}