升级到版本 6
Edge 的最新版本包含一些破坏性变更、一些性能改进,最重要的是它仅支持 ES 模块。本指南涵盖了升级到 edge.js@6 所必须遵循的步骤。
升级包
你可以从 npm 包仓库安装最新版本。目前,版本 6 使用 @next 标签发布。
npm i edge.js@next
edge-supercharged 插件的功能现已直接内置到 Edge 中,因此你可以卸载该包并移除其用法。
npm uninstall edge-supercharged
如果你之前使用了 edge-stacks 和 edge-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 已被完全更改,像 serialize 和 serializeExcept 这样的方法已不再存在。取而代之,你必须使用 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) }}