それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WindowsにNodeJS環境を作る/scoop

NodeJSのインストール。by scoop

scoop の準備

scoop を入れるために、リモートコードを許可する。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

scoop をインストールする

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

scoopのインストール先

scoop は /User/takuya/scop にインストールをします。

nodejs インストール

scoop で nodejs(LTS) を入れる

nodejs/npm/npx をインストール

scoop install nodejs-lts

実行画面。

実行するとこんな感じ。

Scoop でnodejs を入れると

scoopで入れると PATH設定をやってくれる。これが楽。

インストール時に必要はPATH設定が同時に実行されるため、特に何も考えず、コマンドが使える。

このため、コマンド関連はscoopでインストールが便利

nodejs をインストールした場合のPATH

次のコマンドがPATHに追加されている。

PS C:\Users\takuya> $env:path.split(";")
C:\Users\takuya\scoop\apps\nodejs\current\bin
C:\Users\takuya\scoop\apps\nodejs\current
C:\Users\takuya\scoop\shims

chocolatey より便利な場合が多い

choco だとパッケージが多かったり、最新版が来なかったりするし、管理者ユーザーでかんりするひつようがるが

scoop なら初期設定がユーザ空間で、ユーザーインストールされるので、サクッと使うには便利かもしれない。

WSLと共存はめんどくさい。

ただし、WSLと共通のコマンド(npm/node)を入れてしまうと。PATHが競合して面倒が起きる。

対応するには、PATHの優先順位を逆順にするなどいくつか対応が必要です。

echo $PATH | \
    sed -e 's/:/\n/g'  | \
    awk ' { if ( $1 ~ /mnt/ ) print length(),$0 ; else print length()+1000, $0 } ' | \
    sort -nr  | \
    cut -d ' ' -f 2- | \
    paste -sd ':'

たとえば、/mnt/ が含まれるPATHエントリを優先度下げるとか。WSL側でWindowsに設定された同じコマンド( python, pip / node , npm / php )でPATHの競合が起きないよう、優先順位を配慮した設定が必要になると思われます。

設定例

サクッと書いてみた設定例。

## PATH 変数をソートする
## windowsの空白文字なディレクトリだと誤作動する。
## /mnt/c のPATHはWindowsコマンドなので優先度を下げる。
function sort_path_env {
  path=$*
  # path=${path//:/ }
  path=$( echo $path | sed 's/:/\n/g' | awk '{ if( $1 ~ /mnt/ ) print length(),$0 ; else print length()+1000, $0 } ' | sort -nr  | cut -d ' ' -f 2- | paste -sd ':' )
  echo $path
  return 0
}
export PATH=$(sort_path_env $PATH)