‘node.js’ タグのついている投稿

node.js用のglob

PHP的にglobコマンドでファイル一覧を取得したかったので書いてみました。

var
  fs = require('fs');

fs.glob = function (path, pattern, callback) {
  fs.readdir(path, function (cb) {
    return function (err, files) {
      if (!err) {
        var files2 = [];
        for (var index in files) {
          if (files[index].match(pattern)) {
            files2.push(files[index]);
          }
        }
        cb(err, files2);
      }
      else {
        cb(err, files);
      }
    }
  } (callback));
};

fs.glob('.', /.*\.log/i, function (err, files) {
  console.log(files);
});

こんなんでいいのかな。一応動いているっぽいです。

[ 'npm-debug.log',
  'service.log',
  'test.20120621.log',
  'test.20120621090035.log',
  'test.20120621090058.log',
  'test1.log',
  'test1.old.log',
  'test2.log' ]


Node.jsはPowerPCで使えないという話

LinuxでPowerPCのアーキテクチャを選択する場合は注意が必要です。

わざわざWindows版もMac版も用意されているのだからアーキテクチャはほぼ不問なんだと思ってました…

OpenBlocks(debian squeeze)にNode.jsをnvmからインストールしようとしたところ、WAFがエラーを出しました。

root@squeeze:~# nvm install v0.6.18
######################################################################## 100.0%
Checking for program g++ or c++          : /usr/bin/g++
Checking for program cpp                 : /usr/bin/cpp
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for g++                         : ok
Checking for program gcc or cc           : /usr/bin/gcc
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for gcc                         : ok
Checking for library dl                  : yes
Checking for openssl                     : not found
Checking for function SSL_library_init   : yes
Checking for header openssl/crypto.h     : yes
Checking for library util                : yes
Traceback (most recent call last):
  File "/root/nvm/src/node-v0.6.18/tools/waf-light", line 158, in <module>
    Scripting.prepare(t, cwd, VERSION, wafdir)
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 145, in prepare
    prepare_impl(t, cwd, ver, wafdir)
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 135, in prepare_impl
    main()
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 188, in main
    fun(ctx)
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 241, in configure
    conf.sub_config([''])
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Configure.py", line 221, in sub_config
    self.recurse(k, name='configure')
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Utils.py", line 634, in recurse
    f(self)
  File "/root/nvm/src/node-v0.6.18/wscript", line 399, in configure
    conf.env['DEST_CPU'] = canonical_cpu_type(conf.env['DEST_CPU'])
  File "/root/nvm/src/node-v0.6.18/wscript", line 60, in canonical_cpu_type
    " but NOT '" + arch + "'.")
Exception: supported architectures are arm, ia32, x64 but NOT 'powerpc'.
nvm: install v0.6.18 failed!

nvmでしか試していませんが、恐らくnodeをmakeしても同じです。これはV8エンジンがPowerPCに非対応なのが原因です。http://code.google.com/p/v8/

あとはこの辺り参照。

Is it possible to make Node.js use Rhino as the Javascript engine? – Stack Overflow

Issue 692 – waf – cannot build nodejs (uses waf) on OS X ppc – The meta build system – Google Project Hosting

一応、V8をPowerPCで動くようにするプロジェクトはあるみたいですが…

https://github.com/ic/v8-powerpc

Long-term goal: Get Node.js and Google Chrome to PowerPC users.

らしいので気長に待つしか…

あとはSpiderMonkeyにV8のAPI実装してNodeに結合するspidernodeですね。

https://github.com/zpao/spidernode

ちょっと求めているものとは違うんですよね…動くのかわからないし。

あー、どうしよっかなー…


WinSerでnode.jsをWindowsのサービスにする

そんな用途がある人は相当少ないとは思うのですが、仕事柄、ニッチな要求ばかりがやってきます。

さて、node.js用に書かれたプログラムを、Windowsでサービス登録してバックグラウンドで自動実行する方法です。

WinSer: node.js applications as windows services

npmコマンドでインストールできます。

npm install winser

実際のプログラムをサービス化するにあたって、package.jsonを作成しておく必要があります。package.jsonのnameがそのままサービス名として登録されます。他の項目はどうでもいいです。

コマンドプロンプトを管理者権限で実行します。

C:\> chcp 437

日本語環境の場合、chcpコマンドでコマンドプロンプトを英語モードにしないと、
You must run this tool as an administrator
というエラーが出ます。

そして、自分の作ったプログラムのディレクトリに移動して、
C:\path\to\node_modules\.bat\winser.cmd -i
でサービスに登録されます。

cmdファイル経由ではなく、
node.exe C:\path\to\winser\winser -i
でもOKです。

ちなみに、サービス自体はnssmが登録します。

NSSM – the Non-Sucking Service Manager

ファイアウォールを通す場合は、nssmを指定します。