という話。
Windows ファイル共有上の node_modules 問題をなんとかしたとは?
Windows のファイル共有……と言うか、Linux の ACL とか Permission が有効にならない共有ファイルシステム上で、
yarn add
や npm i
を使って node_modules
とかと作ろうとすると、
- symlink が貼れない
- パーミッションを変更出来ない
- というか
node_modules
とか共有フォルダに置きたくない
言った様な色々と面倒なコトが起きるんですが、色々と考えるのが面倒だったので、 下記の様なスクリプトを用意してなんとかしました、という話です。
問題解決のためのスクリプト
#!/usr/bin/env zsh set -e -u -o pipefail function main() { local prefix="$HOME"/.cache/node_prefix"$(cd "$(pwd)" && pwd)" local target="$(pwd)/node_modules" if ! test -d "${prefix}" ; then mkdir -p "${prefix}" fi if ! test -d "${target}" ; then mkdir -p "${target}" fi sudo bindfs "${prefix}" "${target}" /run/current-system/sw/bin/yarn $* sudo fusermount -u "${target}" } main $*
これは何をしているのか
基本的には、
- node packages の管理コマンド (この場合
yarn
) を実行するタイミングで bindfs
を使ってファイル共有上のnode_modules
をローカルな fs に変更し- コマンド (この場合
yarn
) の実行した後に元に戻す
という感じです。
なお、上記スクリプトでは yarn
が奇妙な絶対パスで書かれていますが、この絶対パスは NixOS 独特のモノで、
普通の Linux だったら普通の絶対パスで yarn
(に相当する package manager) へのパスを書けば良いです。
使ってみた感想は?
最初、上記スクリプトを yarn
というファイル名で作成し、
その際にスクリプト内部で呼び出す yarn
を絶対パスで書いていなかったため、
そのせいで yarn
が yarn
を呼び出して無限ループしてやーん、って感じにはなりましたが、
その点を除けば、別に特段の面倒もなく yarn
が使えています。
以上
今日は NixOS on Hyper-V の環境構築とか行なっていたのですが、ファイル共有周りを除けば、 特段のに苦労するを事なく環境構築が出来ました。
ただ、それとは別に、なんか今の Windows 環境のネットワークが時々詰まるので、 その辺りがちょっと微妙だなーと感じてます。何が原因かは良く判ってないんですが。