Open uribo opened 6 years ago
@niszet
file.exists(".textlintr/node_modules/textlint/bin/textlint.js")
はTRUEを返しますか?
改めてインストールしなおしてみましたが、エラーメッセージは変わらず。 下記コマンドはTRUEを返しました。
> file.exists(".textlintr/node_modules/textlint/bin/textlint.js")
[1] TRUE
TRUEを返す状況でも
library(textlintr)
lint_target <-
system.file("sample.md", package = "textlintr")
textlint(lint_target)
がエラーということでしょうか。
# processx::run("echo", "Hello R!")
~~も試してもらって良いですか? 二番目の方でもエラーになるようだと、問題はprocessxにある気がします。~~
編集
所定のパスにtextlint.jsがインストールされているので、
は実行されている(processxが問題なく動いている)ようです。
そうです!
そして、下記もエラーとなりました…。
> processx::run("echo", "Hello R!")
Error in process_initialize(self, private, command, args, stdin, stdout, :
Command not found
Terminalタブではecho使えるので、processxをもうちょっと調べたほうがよさそうですね…。
ありがとうございます。 うーん、わからなくなってきましたね。
processxの問題なら解決しているかもしれません。
Win機がへぼすぎるのかnpmのインストールがいつまでたっても終わらないので、それ以上の確認はできていません。
sessioninfo::session_info("processx")
#> - Session info ---------------------------------------------------------------
#> setting value
#> version R version 3.6.0 (2019-04-26)
#> os Windows 10 x64
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate Japanese_Japan.932
#> ctype Japanese_Japan.932
#> tz Asia/Tokyo
#> date 2020-08-19
#>
#> - Packages -------------------------------------------------------------------
#> package * version date lib source
#> processx 3.4.2 2020-02-09 [1] CRAN (R 3.6.3)
#> ps 1.3.2 2020-02-13 [1] CRAN (R 3.6.3)
#> R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.2)
#>
#> [1] C:/Users/atusy/Documents/R/win-library/3.6
#> [2] C:/Program Files/R/R-3.6.0/library
processx::run("echo", "Hello R!")
#> $status
#> [1] 0
#>
#> $stdout
#> [1] "Hello R!\n"
#>
#> $stderr
#> [1] ""
#>
#> $timeout
#> [1] FALSE
Created on 2020-08-19 by the reprex package (v0.3.0)
ソースコードをなんとなく眺めてきましたがこのあたりがおかしいように見えます。
search_textlint_path
が返すのはただのJSファイルで実行ファイルではないみたいなので、これはargsにわたすべきで、commandにわたすべきなのはnode
とかなような?
@paithiov909
search_textlint_pathが返すのはただのJSファイル はい。その通りです。
search_textlint_path()
ではnpmのグローバルパス、作業ディレクトリのパス、ユーザが指定したパスのいずれかによってtextlint.js
を探します。
JavaScriptの知識が不足していて申し訳ないのですが
node node_modules/textlint/bin/textlint.js target.md
とした時と
# node指定なし
node_modules/textlint/bin/textlint.js target.md
では結果が同じになります。
npx
を使えば良いのかな
node node_modules/textlint/bin/textlint.js target.md
とした時と
# node指定なし node_modules/textlint/bin/textlint.js target.md
では結果が同じになります。
UNIX系のOSだとこういった実行時のインタプリタを指定する小ワザがきちんと機能するため、このファイルを直接呼んでもJSとして実行できるようですが、Windows環境ではこのかぎりではありません。Windows環境でこれをシェルから実行するには頭にnodeとかnpxとかを付ける必要があります。
$ npm init -y
$ npm install textlint
$ Rscript -e "processx::run('node', args = c(file.path(getwd(), 'node_modules/textlint/bin/textlint.js'), '--help'))" ## これは動く
$ Rscript -e "processx::run(file.path(getwd() , 'node_modules/textlint/bin/textlint.js'), '--help')" ## これは動かない
Macなんかでのnpmの挙動はかえってわからないのですが、Windows環境だとnpm install textlint
するとnode_modules/.bin/textlint
として、JSを実行するエイリアスみたいなのがつくられるので、これはシェルから実行可能なコマンドとして呼ぶことができます。
$ npm init -y
$ npm install textlint
$ Rscript -e "processx::run('bash', args = c(file.path(getwd(), 'node_modules/.bin/textlint'), '--help'))" ## 動く
$ Rscript -e "processx::run(file.path(getwd() , 'node_modules/.bin/textlint'), '--help')" ## 動かない
なるほど。詳細にありがとうございます。
node_modukes/.bin/textlint
、macOS環境でもありました。
ただグローバルインストールしたときには /usr/local/bin/textlint
でした。
npm install textlint -g
/usr/local/bin/textlint -> /usr/local/lib/node_modules/textlint/bin/textlint.js
+ textlint@11.7.6
added 201 packages from 105 contributors in 11.089s
いずれにせよ processx::run('node', args = ...)
で実行するのが良さそうですね。
5 のコメントに関連
状況
.textlint/
以下にtextlintの実行に必要なファイルがインストールされる。一方で