我可以从最近的痛苦经历中谈到这一点。
打包:这是一种非常古老的方法,早于 Ant 和 Eclipse 所依赖的元数据 API。根据我们的经验,打包的唯一好处是定义您的项目。如果您使用的是 Eclipse(我们这样做,我推荐),您可以将您的项目定义为基于特定包。只要你记得在你的包中添加新组件,你的项目就会挂在一起
顺便说一句,让我们感到困惑的一件事是 package.json 的多种用途。我们注意到以下几点:
已安装的软件包:这些软件包有托管和非托管两种类型,用 SFDC 板上最近的一篇文章的话来说,它们确实是 ISV 将他们的东西部署到“外面”的各种未知组织中。托管包和非托管包都有限制,因此它们不适合和不需要在组织内从开发部署到生产,或者在您进行自定义开发并且不打算将代码分发到大型匿名库的任何情况下。
未安装的包:这是您在 Web UI 中单击“包”时看到的内容。这些,我们有时称为“开发包”,似乎只是将项目定义放在一起的一种方便方式。
无论如何,我得出的结论是我们的团队(定制开发,而不是 ISV)不需要任何形式的包。
其他形式的部署,包括 Eclipse 和 Ant,都依赖于元数据 API。从理论上讲,它们能够做完全相同的事情。实际上,它们似乎是互补的。Force.com 迁移工具,内置于 Eclipse 的 Force.com IDE 中,使部署尽可能简单(这不是很容易),并让您很好地了解它打算部署的内容。另一方面,我们看到 Ant 做了一些 IDE 做不到的事情。因此,两者都值得学习。
我们倾向于将所有项目保留在 SVN 中,并使用 SVN 结构作为项目定义(Eclipse 将使用它并尊重它)。我们使用 Eclipse,有时还使用 Ant 进行迁移。任何地方都没有明显的包装需求。
顺便说一句,还有一件事需要注意——并非所有组件都是可迁移的。有些东西必须在目标环境中手动重新配置。一个例子是基于时间的工作流。我认为队列和组也需要手动创建。同样,元数据 API 不能直接处理字段删除,因此如果您在源中删除了字段,则需要在目标中手动将其删除。还有其他情况。
希望有用——
——史蒂夫·莱恩