node.jsでsleepする方法

提供: Node.js/JavaScript入門
移動: 案内検索
スポンサーリンク

node.jsでsleepするには、sleepモジュールで提供されるsleepやusleepを使用します。

読み方

sleep
すりーぷ

概要

C言語などでプログラムを一時的に寝かす方法として、sleep()やusleep()を使用します。 sleepモジュールは、同様の機能を提供してくれます。

インストール

sleepモジュールをインストールします。

$ sudo node install -g sleep

g++コマンドが存在しない環境では、CXXでC++コンパイラを指定してください。

$ sudo env CXX=c++ npm install -g sleep

ソースコード

3秒スリープする例です。

var sleep = require('sleep');
sleep.sleep(3); // 3秒スリープします。

3マイクロ秒スリープするには、usleepを使用します。 1秒は、1,000,000 マイクロセコンドです。

var sleep = require('sleep');
sleep.usleep(3); // 3マイクロ秒スリープします。

実行例

$ node sleep.js

使い方

エラー

インストール時のエラー

npmは、インストール時にC++のソースコードをビルドしようとします。そのときに、g++コマンドを使おうとします。FreeBSD 10.0-RELEASEでは、g++コマンドがありません。代わりに、c++コマンド(実体はclang++)やclang++コマンドがあります。

$ sudo npm install -g sleep
\
> sleep@1.1.8 install /usr/local/lib/node_modules/sleep
> node build.js || nodejs build.js
 
gyp WARN EACCES user "root" does not have permission to access the dev dir "/roo
t/.node-gyp/0.10.33"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/
node_modules/sleep/.node-gyp"
gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' に入ります
  CXX(target) Release/obj.target/node_sleep/sleep.o
gmake: g++: コマンドが見つかりませんでした
node_sleep.target.mk:81: ターゲット 'Release/obj.target/node_sleep/sleep.o' のレシピで失敗しました
gmake: *** [Release/obj.target/node_sleep/sleep.o] エラー 127
gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' から出ます
gyp ERR! build error
gyp ERR! stack Error: `gmake` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:810:12)
gyp ERR! System FreeBSD 10.0-RELEASE-p7
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--global" "sleep"
gyp ERR! cwd /usr/local/lib/node_modules/sleep
gyp ERR! node -v v0.10.33
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok
[sleep]: Error: Failed to execute 'node-gyp rebuild --global sleep' (1)
nodejs: not found
 
npm ERR! FreeBSD 10.0-RELEASE-p7
npm ERR! argv "node" "/usr/local/bin/npm" "install" "-g" "sleep"
npm ERR! node v0.10.33
npm ERR! npm  v2.0.2
npm ERR! code ELIFECYCLE
npm ERR! sleep@1.1.8 install: `node build.js || nodejs build.js`
npm ERR! Exit status 127
npm ERR!
npm ERR! Failed at the sleep@1.1.8 install script.
npm ERR! This is most likely a problem with the sleep package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node build.js || nodejs build.js
npm ERR! You can get their info via:
npm ERR!     npm owner ls sleep
npm ERR! There is likely additional logging output above.

g++コマンドのない環境のエラーです。環境変数でC++コンパイラのコマンドを指定します。 g++以外のC++コンパイラがすでにある場合は、環境変数 CXX でC++コンパイラのコマンドを指定します。または、g++のパッケージをインストールします。

$ sudo env CXX=c++ npm install -g sleep
パスワード:
|
> sleep@1.1.8 install /usr/local/lib/node_modules/sleep
> node build.js || nodejs build.js
 
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/0.10.33"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/sleep/.node-gyp"
gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' に入ります
  CXX(target) Release/obj.target/node_sleep/sleep.o
  SOLINK_MODULE(target) Release/obj.target/node_sleep.node
  COPY Release/node_sleep.node
gmake: ディレクトリ '/usr/local/lib/node_modules/sleep/build' から出ます
[sleep]: Created: Build/Release
[sleep]: Installed in Build/Release/node_sleep.node
sleep@1.1.8 /usr/local/lib/node_modules/sleep
└── mkdirp@0.3.5

ビルド時のエラー

mkdirp がないとエラーになりました。

$ node build.js
 
module.js:340
    throw err;
          ^
Error: Cannot find module 'mkdirp'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/tmp/node/node-sleep/build.js:8:14)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

mkdirp を入れます。

$ sudo npm install -g mkdirp

node-gyp が入っていないようです。

$ node build.js
[sleep]: Error: Failed to execute 'node-gyp rebuild' (Error: spawn ENOENT)

node-gyp を入れます。

$ sudo npm install -g node-gyp

g++コマンドがないので失敗しました。

$ node build.js
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.2
gyp info using node@0.10.33 | freebsd | x64
gyp http GET http://nodejs.org/dist/v0.10.33/node-v0.10.33.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.33/node-v0.10.33.tar.gz
gyp http GET http://nodejs.org/dist/v0.10.33/SHASUMS256.txt
gyp http 200 http://nodejs.org/dist/v0.10.33/SHASUMS256.txt
gyp info spawn python
gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/tmp/node/node-sleep/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/tmp/.node-gyp/0.10.33/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/tmp/.node-gyp/0.10.33',
gyp info spawn args   '-Dmodule_root_dir=/tmp/node/node-sleep',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn gmake
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
gmake: ディレクトリ '/tmp/node/node-sleep/build' に入ります
  CXX(target) Release/obj.target/node_sleep/sleep.o
gmake: g++: コマンドが見つかりませんでした
node_sleep.target.mk:81: ターゲット 'Release/obj.target/node_sleep/sleep.o' のレシピで失敗しました
gmake: *** [Release/obj.target/node_sleep/sleep.o] エラー 127
gmake: ディレクトリ '/tmp/node/node-sleep/build' から出ます
gyp ERR! build error
gyp ERR! stack Error: `gmake` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:810:12)
gyp ERR! System FreeBSD 10.0-RELEASE-p7
gyp ERR! command "node" "/usr/local/bin/node-gyp" "rebuild"
gyp ERR! cwd /tmp/node/node-sleep
gyp ERR! node -v v0.10.33
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok
[sleep]: Error: Failed to execute 'node-gyp rebuild' (1)

FreeBSD 10.0-RELEASEには、g++コマンドがないので、エラーになりました。 make に C++コンパイラを指定してやればいいだけなので、環境変数でこの問題は解決できます。

$ env CXX=c++ node build.js
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.2
gyp info using node@0.10.33 | freebsd | x64
gyp info spawn python
gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/tmp/node/node-sleep/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/tmp/.node-gyp/0.10.33/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/tmp/.node-gyp/0.10.33',
gyp info spawn args   '-Dmodule_root_dir=/tmp/node/node-sleep',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn gmake
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
gmake: ディレクトリ '/tmp/node/node-sleep/build' に入ります
  CXX(target) Release/obj.target/node_sleep/sleep.o
  SOLINK_MODULE(target) Release/obj.target/node_sleep.node
  COPY Release/node_sleep.node
gmake: ディレクトリ '/tmp/node/node-sleep/build' から出ます
gyp info ok
[sleep]: Created: Build/Release
[sleep]: Installed in Build/Release/node_sleep.node

関連項目




スポンサーリンク