使用作曲家后需要哪些文件



我运行作曲家是为了使用guzzle。它产生了这些目录:

composer
gabrieldarezzo
guzzlehttp
psr
ralouphie
symfony

我注意到文件车.png在加布里埃尔达雷佐/colorizzar/。整个目录似乎对 guzzle 毫无用处,所以我删除了它,代码仍然有效。我尝试一次删除一个其他一些目录,但代码失败。有没有办法知道实际需要哪些文件?

评论后编辑:

这个问题的目的是询问作曲家添加的所有文件是否都是必要的。我将作曲家重新运行到新位置,它安装了 6.5.8 版。加布里埃尔达雷佐不包括在内,所以我一定在某个时候为其他包运行了作曲家。从所有回复中,我可以看到我的问题的答案是肯定的,它们是必需的。我感谢对此的所有答复。

整个目录似乎对 guzzle 毫无用处,所以我删除了它,代码仍然有效。

如果不讨论哪些代码仍然有效,这个陈述是没有意义的 - 换句话说,需要哪些文件取决于您实际在做什么。

如果你要求Composer安装Guzzle,然后写一个PHP文件,只说echo 'Hello world';那么你可以删除整个供应商目录,显然没有什么会破坏。或者,您可以编写echo GuzzleHttpRequestOptions::ALLOW_REDIRECTS;并删除除定义该常量vendor/guzzle/guzzlehttp/src/RequestOptions.php之外的所有内容。

有没有办法知道实际需要哪些文件?

从理论上讲,您可以静态分析一段代码,递归地确定哪些代码段是可访问的,因此使用的最小文件集是多少。您还可以监视正在运行的应用程序,并查看它在PHP自动加载器级别甚至操作系统/文件系统级别打开了哪些文件。

但问题是你为什么关心?

重要的是要了解,除非以某种方式引用文件,否则实际上不会读取任何文件并将其加载到内存中。这就是自动加载的目的。因此删除文件不会对应用程序的编译或执行速度产生任何影响。

删除文件将减少存储应用程序所需的磁盘空间,但所涉及的空间很少占可用空间的很大一部分。它还会减少部署它所需的带宽,但源代码通常压缩得很好,所以一旦捆绑成像 tar.gz 这样的东西,这种节省通常也是微不足道的。

可能相关的最后一个注意事项是,这些文件都不应在您的版本历史记录中提交。您应该提交composer.jsoncomposer.lock,并将整个vendor目录标记为"忽略"(例如在.gitignore文件中)。然后,您可以通过运行composer install来获取任何版本使用的确切依赖项,这将从composer.lock读取版本。

每当您需要第三方软件包而没有深入审查和跟踪列出每个文件以及审查结果的加密安全内容哈希值时,您都可以轻松遇到您所描述的情况。

"随机"删除此类目录的问题在于,它不会取代适当的依赖关系检查,而只是阻止(现已删除的)代码加载到生产系统上,以便在内存中进行分析和执行(或者在car.png的情况下出于其他原因?

现在在这两个极点之间有很多空间和常见的开发项目,运行它们的人不够重要,以至于依赖项实际上得到了彻底的审查,尽管它们中的大多数都不适合特定目的和非常粗体的免责声明。

但是,如果这是一个您调查的项目,并且您发现某些文件看起来很可疑,如果您关心并且对您有意义,请向项目报告问题。

有时项目没有(扩展)使用作曲家包(概念)的dist分发,并且有改进的余地(不用说,这是对这些项目实践中的任何一个都没有判断)。 例如,排除生产使用中的开发资源。这样做的好处是,您不需要"随机"删除文件,而是与实际的开发人员和软件分销商合作。

最新更新