ブログ

割とコンピュータよりの情報をお届けします。

2018年7月14日

Visual Studio CodeでNode.jsのアプリをデバッグ

先の記事の続きでプログラム作成を続けていた。するとlaunch.jsonの設定にまだまだ深いところがあったので追加の内容を調べていた。
process.stdout.writeを使ったところでlaunch.jsonに新たな設定が必要になった。

今回デバッグするアプリケーションは
2つのファイルで構成

スクリプトの内容は後に回すとして
まずlaunch.jsonでconfigurationsに追加が必要なのは
"console": "integratedTerminal",
であった。

これを追加しておかないとprocess.stdout.writeで出力した内容がデバッグの表示に現れない。
なぜこうなるのかは いまひとつよくわかっていない。

一つ目はserv.js

const GetNtp = require('./GetNtp')

var getNtp = new GetNtp();

var before = new Date();
var task = new Promise(function(resolve, reject) {
  getNtp.getNetworkTime('ntp.nict.jp', 123, resolve, reject)
})

task.then(function(value) {
  var after = new Date()
  console.log('Computer tick: ' + (before.valueOf() + after.valueOf()) / 2 + ' ms')
  process.stdout.write('ntp.nict.jp tick: ' + value.valueOf() + ' ms\n')
  process.stdout.write('Difference: ' + ((before.valueOf() + after.valueOf()) / 2 - value.valueOf()) + ' ms')
  process.stdout.write(' ±: ' + (after.valueOf() - before.valueOf()) + ' ms\n')
})

2つ目のファイルGetNtp.jsは以下のようになっている


var GetNtp = function() {
  this.ntpClient = require('ntp-client');
}

GetNtp.prototype.getNetworkTime = function(uri, port, resolve, reject) {
  this.ntpClient.getNetworkTime(uri, port, function(err, date) {
    if(err) {
        console.error(err)
        if (typeof reject !== "undefined")
          reject()
        return
    }
    if (typeof resolve !== "undefined")
      resolve(date)
  });
}

module.exports = GetNtp

その前にこのサンプルではntp-clientを使って時刻を取得し自PCの時刻と差をms出力をしている。

作業フォルダでnpm init -yを実行してnpm install -D ntp-clientを実行しておく必要があることは言うまでもない。

≫ 続きを読む

2018/07/14 コンピュータ   TakeMe

手動でインストールしたNode.jsをVisual Studio Codeで使う?

以前にNode.jsをzipファイルからインストールしたのだがVisual Studio Codeでのデバッグ時に多少手間取ったので記録を残しておく。

フォルダを開く

フォルダを開き名前を付けてワークスペースを保存した。

構成の追加

Ctrl+Shit+D でデバッグに移ることができるが,この時「デバッグ ►」の横に「構成がありません」と表示が出ている場合には,歯車のボタンをクリックする。するとlaunch.jsonがない場合には作成され,エディタに以下のようなlaunch.js内容が表示される。ある場合にはすでにあるlaunch.jsonが表示される。

"program": "${workspaceFolder}/serv.js" となっているのは私の開いているフォルダにserv.jsファイルしかないから。デバッグしたいスクリプトを選択する。

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "プログラムの起動",
            "program": "${workspaceFolder}/serv.js"
        }
    ]
}

configurationsの項目に以下を追加する。例えばインストールディレクトリがC:/node-v10.2.1-win-x64/ならば

,
            "runtimeExecutable": "C:/node-v10.2.1-win-x64/node"

これでデバッグできる。もしくは追加するものを以下のようにすることもできる。

, "env": {
                "Path": "C:\\WinPython-64bit-2.7.13.1Zero\\python-2.7.13.amd64;C:\\node-v10.2.1-win-x64\\"
            }

Pathの大文字小文字の区別に注意。実際に実行中のアプリでPathが変わったかどうかは
console.log(JSON.stringify(process.env.Path))
で確認できます。

なお標準の環境変数Pathに追加する場合には,
 

"env": {
  "Path": "${env:Path};C:\\WinPython-64bit-2.7.13.1Zero\\python-2.7.13.amd64;C:\\node-v10.2.1-win-x64"
}

としないとダメです。

≫ 続きを読む

2018/07/14 リリース   TakeMe