我构建了一个R包,其某些功能使用V8
包。但是在某些平台上不支持V8
,因此我想使这些功能仅可用于支持V8
的平台。如何处理这种情况?我可以将V8
放在Suggests
的{{1}}字段而不是DESCRIPTION
字段中,并测试Imports
是否可用,但是我该怎么办?处理必须从requireNamespace
导入的功能?我想将此软件包提交给CRAN。
答案 0 :(得分:1)
我通过复制reactR
软件包使用的方式找到了解决方案。
在V8
字段中放入Suggests
。
请勿在{{1}}中导入V8
或其功能;使用NAMESPACE
来使用V8::...
函数。
在需要V8
的函数中,使用V8
检查是否存在requireNamespace
,如果不存在则抛出消息或错误:
V8
我跑了if(!requireNamespace("V8")){
message("This addin requires the 'V8' package.")
return(invisible())
}
,它没有抱怨。
答案 1 :(得分:0)
我认为最干净的解决方案是拥有两个软件包。第一个包(A
)将包含不(直接或间接)依赖于V8
的所有代码。第二个程序包(B
)取决于A
,并包含确实需要V8
的所有代码。
+-------+
| |
| V8 |
| |
+---^---+
|
| Requires
|
+-------+ +---+---+
| | | |
| A <------------+ B |
| | Requires | |
+-------+ +-------+
在支持V8
的平台上,用户可以使用B
,在所有其他平台上,用户可以使用A
。
打包A
可以Suggest
打包B
。