TypeScript

CSVを読むためのモジュールをインストールする。

npm install csv-parse @types/csv-parse -S

サンプルはこんな感じだ。えーっと、ソースにコメントを書いたので説明は省く。あと、オプション指定できる項 の細かい説明はここに詳しく書いてある。

import csvParse from "csv-parse";
import csvParseSync from "csv-parse/lib/sync";

// csvファイルの内容を文字列で用意する。
// 本当はfs.readFileでcsvファイルを読み込み
const csvstr = '"hoge1","hoge2"\n1,3';

//// 非同期処理
// とりあえず、パースする。
// 配列(1レコード)の配列で返される。
csvParse(csvstr, {}, (err, recodes)=>{
    // [ [ 'hoge1', 'hoge2' ], [ '1', '3' ] ] と表示される。
    console.log(recodes);
});

// 1行目がフィールド名の場合
// 1行目のフィールド名がkeyになっているオブジェクトの配列になる。
csvParse(csvstr, { columns:true }, (err, recodes)=>{
    // [ { hoge1: '1', hoge2: '3' } ] と表示される。
    console.log(recodes);
});

// 1行目がフィールド名でkeyを独自に付ける場合
// オプションのnocolumnsでフィールド名(オブジェクトのkeyになる)を指定する。
// 1行目がフィールド名なので2行目からパーするするようにfromオプションで2を指定している。
// 結果、columnsで指定したフィールド名がkeyのオブジェクトの配列になる。
csvParse(csvstr, { columns:["field1", "field2"], from:2 }, (err, recodes)=>{
    // [ { field1: '1', field2: '3' } ] と表示される。
    console.log(recodes);
    // hoge1:1 と表示される。
    console.log(`hoge1:${recodes[0]["field1"]}`);
    // hoge2:3 と表示される。
    console.log(`hoge2:${recodes[0]["field2"]}`);
});


///// 同期処理
// 1行目がフィールド名でkeyを独自に付ける場合
try {
    const recodes = csvParseSync(csvstr, { columns:["field1", "field2"], from:2 });
    // [ { field1: '1', field2: '3' } ] と表示される。
    console.log(recodes);
} catch(err) {
    console.log(err);
}





fs.watchでファイルの変更監視できる。

import * as fs from "fs";

fs.watch("./", {persistent:true, recursive:false}, (eventType, filename)=>{
    console.log(`${eventType}:${filename}`);
});

第1引数に監視するファイルまたはディレクトリ名を指定する。

第2引数にオプション。

  • persistent ファイルの監視を続けるかどうかを指定:trueで続ける。falseだと1度変更されたら終了。
  • recursive サブディレクトリも監視するかどうか。サブディレクトリも監視できるのは、macOSとWindowsのみ対応。

第3引数は、eventTypeとfilenameが渡される関数を指定する。eventTypeは"rename"か"change"でfilenameはイベントのきっかけになったファイル名。


前々からTypeScriptの型定義ファイル(のモジュール?)って--save-dev(-D)オプションを付けてpackage.jsonのdevDependenciesに記録するんじゃなかろーかと思っているんだが、いろんなページ見ていると--save(-S)でpackage.jsonに記録しているんだよねー。

で、MicrosoftのVisual Studio Codeで多分使っているだろーと思って、公開されているpackage.jsonを見てみると、devDependenciesに記録されているんだよね。やっぱり、--save-dev(-D)を付けるので正解のようだ。(たぶん)


パッケージングを行う。パッケージングを行うツールは、何種類かあるみたいだけど、electron-packagerを使うことにする。

[Electron] Hello World的なもの(2) index.htmlの置き場所を変える。からダウンロードできるソースに対して行っていく。

プロジェクトのフォルダでelectron-packagerをインストールする。

npm install electron-packager -D
npm run build:prod

でビルド後、

npx electron-packager dist --overwrite

って、やると実行したOS用のパッケージングが行われる。distはビルド後作成されるフォルダで、その中のファイルをパッケージングする。

32bitのWindows上で実行すると、webpack-electron-win32-ia32フォルダに作成される。このフォルダ名とexeのファイル名のwebpack-electronは、distフォルダにあるpackage.jsonのnameに書いてあるものが使用されている。

macOS用は、

npx electron-packager dist --platform=darwin --arch=x64 --overwrite
で、

64bitのWindows用は、

npx electron-packager dist --platform=win32 --arch=x64 --overwrite

で、x64のLinux用は、

npx electron-packager dist --platform=linux --arch=x64 --overwrite

で作れる。

ただし、Windows上で作ったmacOSのファイルたちをmacOSに持って行っても動かなかったんだよねー。詳しくは調べていないんでなんで動かないのかはわからん。実行権とかなんかの問題なんかな?

Linux、macOS上でWindows用のパッケージングを行うには、Wineをインストールする必要があるようだ。(試してない)

package.jsonのscriptsに

    "package": "electron-packager dist --overwrite"

を追加しておくと、

npm run package

で、パッケージングできる。

変更したソースをダウンロードできるようにしといた。





↑このページのトップヘ