首页 > 解决方案 > -I 有什么区别。和 Perl6 中的 -Ilib?

问题描述

我有一个本地分布,如下所示:

.
├── META6.json
└── lib
    └── Foo.pm6

两者都perl6 -I. -e 'use Foo;'编译perl6 -Ilib -e 'use Foo;'和运行,那么我应该使用哪一个,为什么?

标签: metadatasoftware-distributionrakumodule-search-path

解决方案


问这个问题的另一种方法是“-I $dir-with-meta6-file 和 -I $dir-without-meta6-file 有什么区别?”。在这个答案-I.中,技术上将指代-I $dir-with-meta6-file-Ilib并将指代-I $dir-without-meta6-file。另请注意,这涵盖use lib '.'use lib 'lib'

-I.和的区别-Ilib可以简单概括为:

  • -I.将查看提供的META6.json文件/命名空间及其版本/api/auth

  • -Ilib提供所有现有文件并将它们映射到可预测的命名空间 ( Foo/Bar.pm6-> Foo::Bar) 并将匹配任何版本/api/auth

通常-Ilib在开发时使用,特别是在开始时,因为它比手动添加/删除META6.json文件中的条目更容易。如果您正在编写本地应用程序或不打算安装的东西,这通常是可以的。

然而!一旦为分发创建-I.了文件,应该首选。META6.json这可能需要手动维护更多的工作,但它有一些优点:

  • 它提供了一些安装的基本保证;我看到的一个常见问题是模块通过了测试但未能实际安装,因为安装时的预编译只能访问文件中列出的META6.json文件。

  • 它允许将多个命名空间映射到单个文件(我不鼓励这样做)。

  • 您可以将 Perl.pm文件放在 Perl6 文件旁边.pm6作为一种双语言分发,因为您可以明确告诉 Perl6 使用哪些文件。-Ilib必须将 all.pm.pm6files 视为 Perl6,这与此想法不兼容。


推荐阅读