操作系统的 Makefile.PL meta.json 先决条件,因此模块不会安装在 Windows 上

Posted

技术标签:

【中文标题】操作系统的 Makefile.PL meta.json 先决条件,因此模块不会安装在 Windows 上【英文标题】:Makefile.PL meta.json prereqs for OS so module won't be installed on Windows 【发布时间】:2021-07-05 13:51:41 【问题描述】:

我正在开发一个不能在 Windows 上运行的 Perl 模块,以防止 CPAN 测试人员在 Windows 上失败我想使用从 Makefile 生成的分发中的元文件来防止模块被安装或测试在 Windows 上。

如果情况相反(模块仅适用于 Windows),指定对 Win32 的依赖项将使其仅可安装在 Windows 上。

另外如果模块转换为Dist::Zilla,需要对应的dist.ini解决方案。

【问题讨论】:

Win32.pm 在其 Makefile.PL 中仅包含 unless ($^O eq "MSWin32" || $^O eq "cygwin") die "OS unsupported\n"; 。您可以使用相同的方法(只是翻转条件)。 两次失败,这个解决方案所做的只是使安装在不受支持的平台上失败,它没有包含在元 yml/json 文件中。对于那些没有支持平台的特定密钥的人来说,这是规范的错误。另一个失败是如果分发切换到它,解决方案不会移植到 Dist::Zilla。 我刚刚找到了解决可移植性的 Devel::AssertOS 和 Dist::Zilla::Plugin::AssertOS。 Re "它没有被包含在元 yml/json 文件中",它甚至没有到达生成这些文件的地步! Re "我刚刚发现 Devel::AssertOS 和 Dist::Zilla::Plugin::AssertOS 可以解决可移植性问题。",一点也不。他们不可能做任何不同的事情。 Devel::AssertOS 甚至与模块安装没有任何关系 【参考方案1】:

CPAN Testers FAQ 说:

虽然这不是一个非常优雅的解决方案,但推荐的方法是在 Makefile.PL 或 Build.PL(或测试文件中的 BAIL_OUT)中终止,并显示以下消息之一:

不支持操作系统

操作系统不支持

【讨论】:

使用 Devel::AssertOS 来告诉 Makefile 何时死亡在我看来比在 Makefile 中寻找特定操作系统的使用条件更好。因为 Dist::Zilla 有一个插件,所以相同的代码“使用 Devel::AssertOS qw(-MSWin32 -Cigwin);”可以复制到 dist.ini 中。除非您看到缺点或有更好的建议,否则请添加到您的答案中,我会接受。 Devel::AssertOS 非常非常简单。查看代码并决定是否要为此设置另一个依赖项。我觉得不值得。 你说得对,但它作为所需的操作系统标识字符串的参考指南仍然很有价值。 Dist::Zilla 插件将其副本捆绑到您的发行版中,并将其标记为不被 cpan 索引。 从历史上看,在您的发行版中捆绑其他软件还有其他问题。无论您发送什么,您都会被困住,如果出现问题,您必须更新您的软件,尽管实际上并没有改变用户关心的任何内容。你可能会读到 Module::Install 的历史,它已经没人真正使用了。你要为一个简单的任务承担很多复杂性。【参考方案2】:

另一种方法是添加对 Platform::Unix 或 Platform::Windows 的依赖项。

这样做的好处是,当您的模块上传到 CPAN 时,人们会在依赖项中看到“Platform::Whatever”,因此您的模块需要什么平台非常明显。

More information on Platform::*.

【讨论】:

以上是关于操作系统的 Makefile.PL meta.json 先决条件,因此模块不会安装在 Windows 上的主要内容,如果未能解决你的问题,请参考以下文章

从JS/meta/JS/meta/JS/meta/meta/JS/meta/JS/meta/开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展开展

移动端自动生成 meta js

如何在 PowerShell 中添加到文件中?

使用 MakeMaker 的手册页

将 .scss 文件导入 Reactenvironment 中的 .js 文件

开源监控解决方案:ICINGA(Nagios)监控MYSQL Database