-I. 和有什么区别?和 -Ilib in Raku?

问题描述 投票:0回答:1

我有一个本地分布如下:

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

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

metadata software-distribution raku module-search-path
1个回答
15
投票

问这个问题的另一种方式是“-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.rakumod
    ->
    Foo::Bar
    )并将匹配任何版本/api/auth

通常

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

但是!一旦为分发创建了

-I.
文件,就应该首选
META6.json
。手动维护可能会稍微多一些工作,但它有一些优点:

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

    META6.json
    文件中列出的文件。

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

© www.soinside.com 2019 - 2024. All rights reserved.