分离publish 功能为一个单独module