使用rhino R包的yarn依赖问题



我正在尝试来自Appsilon团队的新R包rhino来构建闪亮的应用程序。

在Windows10笔记本电脑上运行,我安装了本教程中描述的依赖项node.js和yarn。

以下是rhino::diagnostics()的输出:

Windows 10 x64 build 19042
R version 4.1.0 (2021-05-18)
rhino: 1.0.0
node: v16.15.0
yarn: 1.22.15

运行rhino::build_sass()给我这个错误:

yarn run v1.22.15
$ sass --no-source-map --style=compressed root/app/styles/main.scss:root/app/static/css/app.min.css
Error reading rootappstylesmain.scss: no such file or directory.
error Command failed with exit code 66.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error:
! System command 'yarn' exited with status 66.
i If you can't use Node.js and yarn, try using sass: 'r' configuration.
Run `rlang::last_error()` to see where the error occurred.

我对呼叫"sass"的路径感到困惑;以"root/app"开头。我的应用程序位于我的主目录:"C:/用户/XXX/文件/workspace/rhino_dummy"

有没有可能这些路径在调用中是错误的?


幸运的是,使用已弃用的libsass解释器的建议替代方案适用于教程中的sass示例。如果node.js和sass能在Windows10上工作,那就太好了,这样以后就可以应用更复杂的应用了。


编辑1,在Kat的评论后

感谢Kat的快速反馈。我通过yarn add sass添加了sass,并再次尝试相同的错误:

> rhino::build_sass()
yarn run v1.22.15
warning ....package.json: No license field
$ sass --no-source-map --style=compressed root/app/styles/main.scss:root/app/static/css/app.min.css
Error reading rootappstylesmain.scss: no such file or directory.
error Command failed with exit code 66.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error:
! System command 'yarn' exited with status 66.
i If you can't use Node.js and yarn, try using sass: 'r' configuration.
Run `rlang::last_error()` to see where the error occurred.

警告来自pckage.json文件,该文件是通过在我的R项目文件夹中调用yarn创建的。它只有最少的内容:

# package.json
{
"dependencies": {
"sass": "^1.51.0"
}
}

出于好奇,我试着编译javascript的例子,也失败了非常类似的错误关于文件夹路径:

> rhino::build_js()
yarn run v1.22.15
warning ....package.json: No license field
$ webpack
assets by status 0 bytes [cached] 1 asset
ERROR in main
Module not found: Error: Can't resolve 'C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js' in 'C:UsersXXXDocumentsworkspacerhino_dummy.rhinonode'
resolve 'C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js' in 'C:UsersXXXDocumentsworkspacerhino_dummy.rhinonode'
using description file: C:UsersXXXDocumentsworkspacerhino_dummy.rhinonodepackage.json (relative path: .)
Field 'browser' doesn't contain a valid alias configuration using description file: C:UsersXXXDocumentsworkspacerhino_dummy.rhinonodepackage.json (relative path: ./root/app/js/index.js)
no extension
Field 'browser' doesn't contain a valid alias configuration
C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js.js doesn't exist
.json
Field 'browser' doesn't contain a valid alias configuration
C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js.json doesn't exist
.wasm
Field 'browser' doesn't contain a valid alias configuration
C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js.wasm doesn't exist
as directory
C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderootappjsindex.js doesn't exist
webpack 5.69.0 compiled with 1 error in 162 ms
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error in `system_yarn()`:
! System command 'yarn' exited with status 1.
Run `rlang::last_error()` to see where the error occurred.

要让Node.js函数在Windows 10上工作,你需要在你的系统上启用Developer Mode,正如我们在How-to: Use Rhino on Windows文章中提到的那样。这对于符号链接在Windows上工作是必要的(.rhino/node/root文件是指向项目根目录的符号链接)。

之后,从你的项目中删除.rhino/node目录,或者在你的项目根目录下运行rhino:::add_node(clean = TRUE)

变通办法

这个答案只是一个解决方案,如果你不能在windows上启用开发人员模式(更多信息请参阅Kamil Zyla的帖子)。

看起来文件夹名"root"在错误消息中是一个损坏的变量。

文件夹...workspacerhino_dummy.rhinonoderoot不存在,但是子结构存在:

  • appstylesmain.scss
  • appjsindex.js
  • ...workspacerhino_dummy.rhinonode

修复step1

  • 我试了试运气,创建了文件夹"root":C:UsersXXXDocumentsworkspacerhino_dummy.rhinonoderoot
  • copyrhino_dummyappstylesmain.scssrhino_dummy.rhinonoderootappstylesmain.scss
  • copyrhino_dummyappjsindex.jsrhino_dummy.rhinonoderootappjsindex.js
  • 运行rhino::build_sass()rhino::build_js()现在工作!

rhino::build_sass()

yarn run v1.22.15
warning ....package.json: No license field
$ sass --no-source-map --style=compressed root/app/styles/main.scss:root/app/static/css/app.min.css
Done in 0.45s.

rhino::build_js()

yarn run v1.22.15
warning ....package.json: No license field
$ webpack
asset app.min.js 470 bytes [compared for emit] [minimized] (name: main)
runtime modules 670 bytes 3 modules
./root/app/js/index.js 113 bytes [built] [code generated]
webpack 5.69.0 compiled successfully in 846 ms
Done in 2.58s.

修复步骤2

  • 将结果复制回"static"文件夹,在那里闪亮/犀牛
  • 复制rhino_dummy.rhinonoderootappstaticcssapp.min.cssrhino_dummyappstaticcssapp.min.css
  • 复制rhino_dummy.rhinonoderootappstaticjsapp.min.jsrhino_dummyappstaticjsapp.min.js
  • 通过shiny::shinyAppDir(".")启动app
  • 点击教程中的按钮;-)

Edit1

检查rhino的github repo

SASS

  • build_sass()定义呼叫yarn("build-sass")
  • build-sass的定义显示硬编码root/app/styles/main.scss

JS

  • build_js的定义呼叫yarn("build-js")
  • webpack的定义Build-js也显示了硬编码的"root"在文件路径

最新更新