[英]R package - force a dependency on a GitHub version over a CRAN version
[英]CRAN package with an optional dependency
我构建了一个 R 包,它的一些函数使用了V8
包。 但是有些平台不支持V8
,所以我想把这些功能只在支持V8
的平台上可用。 如何处理这种情况? 我可以将V8
放在DESCRIPTION
的Suggests
字段中而不是Imports
字段中,并测试它是否可用requireNamespace
,但是我如何处理必须从V8
导入的函数? 我想将此包提交给 CRAN。
我通过复制reactR
包使用的方式找到了解决方案。
将V8
放在Suggests
字段中。
不要在NAMESPACE
导入V8
或其函数; 使用V8::...
来使用V8
功能。
在需要V8
的函数中,使用requireNamespace
检查是否存在V8
,如果不存在则抛出消息或错误:
if(!requireNamespace("V8")){ message("This addin requires the 'V8' package.") return(invisible()) }
我运行了R CMD CHECK
,它没有抱怨。
我认为最干净的解决方案是有两个包。 第一个包 ( A
) 将包含所有不依赖(直接或间接)依赖于V8
。 第二个包 ( B
) 将取决于A
并包含所有需要V8
代码。
+-------+
| |
| V8 |
| |
+---^---+
|
| Requires
|
+-------+ +---+---+
| | | |
| A <------------+ B |
| | Requires | |
+-------+ +-------+
在支持V8
平台上,用户可以使用B
而在所有其他平台上,用户可以使用A
套餐A
可以Suggest
套餐B
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.