scene9
7.50M · 2026-04-10
在我维护的 VuReact 编译器新版本里,我做了一个很明确的架构调整:直接停止对 Vue 传统 <script> 语法的支持,之后只专注 <script setup> 现代写法。
这不是一时冲动,而是踩过坑、算过成本、看清方向后,做出的最理性选择。这篇文章把整个思考过程一次性说清楚。
最开始我也想尽量多支持几种写法,传统 <script> 也一并兼容。
当时的思路很简单:只提取里面 setup() 函数的代码。
<script>
export default {
setup() {
// 只有这一段能正常处理
const count = ref(0);
return { count };
},
data() {
return { message: 'Hello' }; // 完全处理不了
},
methods: {
showMessage() {
console.log(this.message); // 也处理不了
}
}
};
</script>
跑起来才发现问题根本绕不开:
setup(),data/methods/computed/watch/生命周期全部无效这种“能用但不完全能用”的支持,比直接不支持更坑人。
我也认真评估过:要不要把传统语法完整实现?
结论是:成本高到不可行。 要完整支持,就必须处理一整套 Vue 组件选项:
这意味着:
维护两套语法的后果:
简单说:为了兼容老写法,会拖垮整个工具的质量与迭代速度。
观察 Vue 生态就能明显感受到:
<script setup> 定为推荐写法我的目标很清晰: 为使用 Vue 3 现代语法的开发者,提供更稳定、更好用的工具。 不追求大而全,只追求小而精、稳而强。
<script setup>我最终选择了 方案3。 作为独立开发者,资源有限,必须聚焦,才能把东西做稳、做好。
我直接把缺失的「版本策略」完整内容写给你,并且告诉你加在文章哪个位置,一字不改贴合你现在的全文风格、主语、语气。
我将这次停止支持传统语法的变更,放在 VuReact 编译器 1.5.2 版本 中发布。
这样做的原因很明确:
<script setup> 的主流用户完全无影响同时,我也为传统语法使用者提供了清晰明确的错误提示,避免困惑。
if (检测到传统语法) {
throw new Error(
`Traditional Vue <script> syntax is not supported. Please migrate to <script setup>.n` +
`at <anonymous> (${filename})`
);
}
<script setup>停止支持 Vue 传统 <script>,不是刻意排斥老项目,而是在有限时间与精力下,做出的最负责任的选择。放弃“大而全”,选择“小而美”;放弃模糊兼容,选择明确专注。
未来我会把所有精力放在 <script setup> 现代语法上,提供更稳定、更高效、更贴合 Vue 生态的工具。
如果你正在使用现代语法,这次更新对你完全无影响;
如果你还在使用传统写法,也建议逐步迁移到 <script setup>,这也是官方与社区的共同方向。
技术取舍,从来都是:有所不为,才能有所为。
GitHub:github.com/vureact-js/…
Gitee:gitee.com/vureact-js/…
官方文档:vureact.top
持续更新 Vue → React 迁移实战、原理与避坑干货!