重写 component 逻辑，改为 package