webpack-cli が使えない (win vagrant virtualBox)

仮想環境上で webpack-cli が使えなかった.
調査した結果, ホストマシン側の設定がいくつか必要だったのでまとめる.

現象

過去に同じ現象にハマっている人がいた↓

Each time I do this, it asks me if I want to install the webpack-cli
Would you like to install webpack-cli? (That will run npm install -D webpack-cli) (yes/NO)

引用: webpack keeps asking if I want to install webpack-cli #7197

私が遭遇した現象は次の通り.

事前に次のコマンドで webpack, webpack-cli を inst.

その後, $ npx webpack とするとなぜか再度 webpack-cli inst. を要求され, 次のエラーが発生.

おかしいと感じたのは次の点.

  • 既に webpack-cli は inst. 済なのに再度 inst. を要求される
  • symlink系 err, warning が多すぎる

結構ハマったので解決策をまとめる.

動作環境

  • windows10 Pro x64
  • Vagrant 2.1.1
    • vagrant-winnfsd 1.4.0
  • VirtualBox 5.2.18
  • centOS 6.9
  • node 8.12.0
  • npm 6.4.1
  • webpack 4.x

windowsをホストマシンとして, vagrant + virtualBox 上に仮想環境を構築.
windowsの作業ディレクトリをゲストマシンに nfs マウント.

ゲストマシンOSは centOS.
webpack 4.x を利用.
node.js や npm は全てゲストマシン内で環境構築.

結論

原因は次の2点.

  • windowsでは管理者権限以外での symlink 作成が禁止されている
    • ローカルポリシーを変更すればok
  • virtualBoxで共有フォルダへのsymlink作成が禁止されている
    • コマンドでsymlinkを許可するディレクトリを指定し, 回避可能

これらを解消すれば期待通りに動く.
本記事ではそのための手順を紹介する.

一方で, windows + vagrant + virtualBox を使った環境では次の問題が残っている.

  • nfsマウントしているディレクトリはファイル所有者を root から変更することができない

ホストマシンとしてwindowsを使い続けるなら, node.js & npm はwindows上で環境構築した方が良いと思う.
もしくは Linux or Mac を使うか…
Dockerに乗り換えてみるか…

作業手順

これ以降の作業は全て管理者権限で起動したcmdで作業を行う.
もしかすると余分な手順が含まれているかもしれないが, 一先ず期待通りの動作をしたので気にしないでおく.

windowsで管理者権限以外でも symlink 作成を許可

windows管理者権限以外でsymlink作成を可能にするために, ローカルポリシーを変更する.

ローカル セキュリティ ポリシー > ローカル ポリシー > ユーザー権利の割り当て > シンボリック リンクの作成
(自分のPC名) を追加.

管理者権限でcmdを開いて, 魔法のコマンドを打つことでsymlink可能に.

fsutil はファイルに関するいくつかの処理を行う場合に使うコマンド.
↓このへんにまとまってる.

ここまでの作業で root じゃなくても symlink 作成が可能になる.

virtualBox内 共有フォルダ内で symlink 作成 を許可

次はVirtualBox 共有フォルダ内で symlink 作成を可能にする.
vboxmanage コマンドを使うので事前にpathを通しておく.

vboxmanage の構文はこれ↓

  • VBoxManage setextradata VM名 VBoxInternal2/SharedFoldersEnableSymlinksCreate/共有フォルダ名 1

↑ 最後の 1 は必要.
要注意.

このコマンドを叩く前にsymlink を許可したいVM名を確認.

実行

使用したコマンドについては公式マニュアル参照.

Vagrantfileに次のような記述をすれば ↑ この作業は不要かもしれない.

私は両方やったが, どちらか一方でokだと思う.

以上.

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る