简体   繁体   中英

CRAN package with an optional dependency

I built a R package whose some functions use the V8 package. But V8 is not supported on some platforms, so I want to make these functions available only for the platforms supporting V8 . How to deal with this situation? I can put V8 in the Suggests field of DESCRIPTION instead of the Imports field, and test whether it is available with requireNamespace , but then how do I deal with the functions that must be imported from V8 ? I want to submit this package to CRAN.

I found a solution by copying the way used by the reactR package.

  • Put V8 in the Suggests field.

  • Do not import V8 or its functions in NAMESPACE ; use V8::... to use the V8 functions.

  • In the functions requiring V8 , use requireNamespace to check whether V8 is present, and throw a message or an error if it is not:

     if(!requireNamespace("V8")){ message("This addin requires the 'V8' package.") return(invisible()) }

I ran R CMD CHECK and it did not complain.

The cleanest solution in my opinion is to have two packages. The first package ( A ) would contain all of your code that does not depend (directly or indirectly) on V8 . The second package ( B ) would depend on the A and contain all of your code that does require V8 .


                              +-------+
                              |       |
                              |  V8   |
                              |       |
                              +---^---+
                                  |
                                  | Requires
                                  |
         +-------+            +---+---+
         |       |            |       |
         |  A    <------------+  B    |
         |       |  Requires  |       |
         +-------+            +-------+

On platforms that support V8 then users can take B and on all other platforms users can take A .

Package A could Suggest package B .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM