僕のPCにはATOMは入っていますが、nodeは入っていません。
そんな中npmを使いたい場面に遭遇したのですが、インストールするとなると申請があったりして面倒です。
そんなところへ「ATOMには専用のnodeとnpmが入っている」との噂が!
じゃぁそこにパス通せば使えるじゃん、と軽く考えたら失敗したので恥をさらしておこうと思います。
環境
- OS : Windows8.1 Pro
- Atom : 1.5.3
- atom.cmd へのパス :
%HOMEPATH%\AppData\Local\atom\bin
apm バージョン確認
まずはapmと噂のnodeのバージョンを調べます
> apm -v
apm 1.6.0
npm 2.13.3
node 0.10.40
python 2.7.10
git 2.6.3.windows.1
visual studio 2013
npm はどこだ!?
atom.cmd の中身は最新バージョンのatom.cmdを呼ぶというシンプルなものですのでこれにならいましょう。
アップデートのたびにメンテとかしたくないですしね。
というわけで、npmの実行ファイルを探します。
適当にあたりをつけながら探したところ↓にありました。
{atom.cmdのパス}\..\app-1.5.3\resources\app\apm\node_modules\npm\bin\npm.cmd
atom.cmdをもとにして完成。
もしかして僕って天才だったのかな...!
@echo off
for /F "tokens=3 delims=\ usebackq" %%v in (`findstr "app-[0-9]\.[0-9]\.[0-9]" atom.cmd`) do set ver=%%v
"%~dp0\..\%ver%\resources\app\apm\node_modules\npm\bin\npm.cmd" %*
↓
'node' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ま、まぁ天才だって1度や2度の失敗はね。つきものですよ。
node はどこだ!?
先ほど見つけたnpm.cmdの中身を見てみると、node.exeがない場合はnodeコマンドを試しているよう。
それでさっきのエラーですね。
原因がわかったので、慣れた手つきでnode.exeを呼ぶcmdを作成します。
実行ファイルは {atom.cmdのパス}\..\app-1.5.3\resources\app\apm\bin\node.exe
にありました。
やっぱり天才なのかもしれない...!
@echo off
for /F "tokens=3 delims=\ usebackq" %%v in (`findstr "app-[0-9]\.[0-9]\.[0-9]" atom.cmd`) do set ver=%%v
"%~dp0\..\%ver%\resources\app\apm\bin\node.exe" %*
↓
> node -v
v0.10.40
ほらね。余裕ですわ。
では、本題の...
> npm -v
module.js:340
throw err;
^
Error: Cannot find module 'C:\Users\XXXX\AppData\Local\atom\app-1.5.3\resources\app\apm\node_modules\npm
\bin\node_modules\npm\bin\npm-cli.js'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:935:3
あっ、ふーん。
npm がつかえる…! (2016/2/22追記)
コメントをいただきまして、npmを下記に修正したところ無事動きました(ように見えます)。
こう、さっと正解だけ出すスタイルかっこいいです。
@echo off
for /F "tokens=3 delims=\ usebackq" %%v in (`findstr "app-[0-9]\.[0-9]\.[0-9]" atom.cmd`) do set ver=%%v
node "%~dp0\..\%ver%\resources\app\apm\node_modules\npm\bin\npm-cli.js" %*
↓
> npm -v
2.13.3