重构一下 ecomfe/edp#246 的实现