LoginSignup
0
0

More than 5 years have passed since last update.

【windows】child_processのexecまたはspawnで環境変数を変えて実行する話

Last updated at Posted at 2019-04-12

環境変数を変更して実行したいときってあるじゃないですか。
たとえば、x64とx86を使い分けたいときとか。x64用にアプリケーションをビルドしたり、その逆だとか。。

正直なところ、nodeとかまだほとんどわからないけどどうしてもそうゆうのが必要なときがあったので、一応メモ。

前提

  • nodistが入ってること
  • windows

正直なところ、windowsはメインマシンじゃなくて全然詳しくないので32bitアーキテクチャで64bitのnodeがインストールできるのかとか、どうなのかは詳しくわからないです。

windowsにおけるnodeのバージョン管理ツールもnodist以外に知らないという…。勉強中です!

今何モードでnodeが動いているか確認する

% node
> process.env

環境がwindowsだったらNODIST_X64という項目があるはず。

NODIST_X64=1だったら64bitだし、NODIST_X64=0だったら32bitモードで動いている。

cmd上で意図的に切り替えるには

  • cmdにてset NODIST_X64=0またはset NODIST_X64=1
% set NODIST_X64=0
% node
> process.env
...
  • このとき32bitのnodeがインストールされていないとnodeで対話モードが開けないので注意。
  • set NODIST_X64=0した後にnodist distでインストール可能なバージョンを確認してnodist v0.0.0

ソース上で取得するには

  • 忘れてしまった。たしかprocess.archだった気がする。

    console.log(`This processor architecture is ${process.arch}`);
    

【本題】child_processで環境変数を使い分けるには

execもspawnも同じだけど、オプションのenvをセットするのだ。

child_process.exec

  • execは引数にコマンド(String)、オプション(Object)、コールバック関数をとる
  • 公式ドキュメント:child_process.exec
  • このoptionというところにenvをセットする必要がある

具体的にはこんな感じ

exec('dir', {cwd:'./', env:{NODIST_X64:0}});

ただ私の環境ではNODIST_PREFIXをセットしろと怒られたので、それもセットしときました。

exec('dir', {cwd :'コマンドを実行したいディレクトリのパス', env:{NODIST_X64:0, NODIST_PREFIX:'Cドラのプログラムファイル(x86)下のnodistディレクトリ'}})

↑申し訳ないことに詳細なパスを忘れてしまった。。

ただしnodistを無事インストールできていてパスが通っていてnodeが動くならprocess.envから確認ができたはず。

なので、どこにあるかよくわからない人は一旦cmd.exeより

% node
> process.env

にてNODIST_PREFIXを確認しておくとよい。

なお、cwdをセットすることで1つのスクリプトからあるプロジェクトのビルドをしたり、などができる(便利だしその話は別途書き留めておきたい)

child_process.spawn

  • spawnは引数にコマンド(String)、引数(String[])、オプション(オブジェクト)をとる
  • 公式ドキュメント:child_process.spawn
  • execと同じく、optionというところにenvをセットする必要がある
spawn('dir', ['/b'], {cwd :'コマンドを実行したいディレクトリのパス', env:{NODIST_X64:0, NODIST_PREFIX:'Cドラのプログラムファイル(x86)下のnodistディレクトリ'}});

それにしても、現在大絶賛学習中のchild_processについてもまたいずれきちんとまとめておきたいところです。なお、javascriptの文法がわかりません。あとpromiseってなんなんでしょう。。。非同期処理って…。

以上。

APPENDIX

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0