我制作了一个作曲家包" foo"它使用ext-mysqli。在我的开发框中存在mysqli扩展,所以我对这个包的所有测试都没有任何问题。但是如果这个软件包落在没有安装mysqli扩展的盒子上那么它就会失败。 Composer通过允许" ext - *"来解决这个问题。在"要求","要求 - 开发"并且"建议"部分。但是包开发人员应该记住实际上将这些依赖项放入其中。显然,在发布包之前没有任何东西可以阻止开发人员(或者至少警告),而不会将所有使用的扩展列为依赖项。
现在有很多扩展可供使用,很容易忽略这些依赖关系,特别是当他们总是对用于开发特定包的开发盒感到满意时,所以没有本地测试会显示他们的缺席。
是否有任何工具可以检查作曲家包以查看它是否使用特定扩展名并警告扩展名是否实际未在composer.json中列出?
答案 0 :(得分:2)
感谢Jens A. Koch的回答,我决定制作这样的工具。它可以在packagist.org上找到 logics / extcheck 包。
正如预期的那样,它会从已安装的扩展中构建一个字典,然后解析autoload和autoload-dev部分中引用的源代码。
由于一个简单的原因,它没有被实现为嗅探:CodeSniffer主要关注PHP / JS / CSS文件而不是composer.json。
基本上使用它你需要的是添加"逻辑/ extcheck"打包到#34; require-dev" composer.json的一部分,运行" composer update"然后" vendor / bin / extcheck" 。它将为您提供代码实际使用的所有扩展,但未在composer.json中提及。使用-v选项调用它,并为您提供有关扩展使用的信息。
值得注意的是,最初的问题是广泛传播,甚至众所周知/顶级软件包实际上都缺少扩展依赖项。如果您认为已经将所有必需的扩展添加到composer.json,那么请尝试extcheck - 我敢于你! :)
答案 1 :(得分:1)
是否有任何工具可以检查作曲家包以查看它是否使用特定扩展名并警告扩展名是否实际未在composer.json中列出?
不,这样的工具还不存在(但是)。
您需要解析源代码以确定使用的扩展名。 可能通过在字典中查找它们(对于扩展提供的函数和常量)。
例如,您可以将其编写为PHPCodeSniffer的自定义Sniff。
答案 2 :(得分:1)
ComposerRequireChecker应该正是您想要的。
可以通过作曲家安装的CLI工具
composer require maglnet/composer-require-checker
并通过
使用composer-require-checker check /path/to/your/project/composer.json