自分はbashシェルが好きで、Windowsでも、Gitバンドルのbashにパスを通していつでも使えるように設定しているのですが、先日このWindows上のbashで発生するトラブルに遭遇したので、ご紹介したいと思います。
問題が発生したのはGitbash上で”yarn add”コマンドをインストールしたとき。
$ yarn add @babel/plugin-proposal-class-properties
yarn add v1.22.10
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.2: The platform "win32" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "win32" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
...省略...
error An unexpected error occurred: "EPERM: operation not permitted, unlink 'C:\\Users\\user\\Program Projects\\ProjectSalaPipeWeb\\node_modules\\.bin\\yarn'".
info If you think this is a bug, please open a bug report with the information provided in "C:\\Users\\user\\Program Projects\\ProjectSalaPipeWeb\\yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
上記のように”EPERM: operation not permitted”エラーが出てしまいました。
エラーが発生したディレクトリの権限を変更したりなどいろいろ試しては見たのですが解消せず…
他にもいろいろ試して、ようやく解決方法を見つけました。
下記のログは、Windowsのコマンドプロンプトで同じコマンドを実行した際のものです。
>yarn add -D @babel/plugin-proposal-class-properties
yarn add v1.22.10
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.2: The platform "win32" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "win32" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > @material-ui/pickers@3.3.10" has unmet peer dependency "@date-io/core@^1.3.6".
warning "react-tagcloud > @babel/preset-react@7.13.13" has unmet peer dependency "@babel/core@^7.0.0-0".
warning "@babel/preset-react > @babel/plugin-transform-react-display-name@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
...省略...
[4/4] Building fresh packages...
warning "@babel/plugin-proposal-class-properties" is already in "dependencies". Please remove existing entry first before adding it to "devDependencies".
success Saved 1 new dependency.
info Direct dependencies
└─ @babel/plugin-proposal-class-properties@7.13.0
info All dependencies
└─ @babel/plugin-proposal-class-properties@7.13.0
Done in 55.75s.
シェルを変更した以外特に何も違いはないのですが、無事インストールが通っています。
どうやらyarn上では使用しているシェルに関わらず、cmdやPowerShellで認識できる形式の絶対パスを内部で使用しているようですが、コマンドプロンプト(およびPowerShell)とGitbashでは絶対パスの指定の仕方が微妙に違うため、Gitbash上でyarnが発行したパスがうまく認識できない、といった問題が起きてしまっていたようです。
最近別OS(とくにLinux)のコンポーネントをWindowsでも利用することができるようになってきていて、Linux好きの僕としてはなかなかうれしい話ではあるのですが、一方で、OSの差異によるトラブルが起きる可能性についてももっと意識していく必要がありそうだなぁ、と感じました(;´∀`)