Node.js
[Typescript 2.6.1] とりあえず、lodashでエラーになるのを回避
Typescript 2.6.1でlodashのchainを使ってるところでエラーになって困っていたんだが、とりあえず、回避方法がわかったので書いておく。
Typescriptのオプションでstrictをtrueにしていると、strictFunctionTypesオプションもtrueになってエラーになっているので、strictFunctionTypesをfalseでとりあえずエラーを回避できる。
strictFunctionTypesってなんぞやは、Typescript 2.6.1の変更点をググってみろ!w
(追記)
うーん、これでエラーにならなくなるけど、Visual Studio Codeでコード補完がおかしいような気がする。
[Node.js] 8.9.0LTSが出てる!!(T/O)
[Node.js] バイナリファイルの読み書き
試してみると、たいしたことなかったが、一応書いておく。
Bufferを用意して、write*()やread*()でアクセスするだけだ。
まずは、バイナリファイルを書き込むコードだ。
import * as fs from "fs";
let buf = Buffer.alloc(256);
for(let i = 0; i < buf.length; i++) {
buf.writeUInt8(i, i);
}
console.log("Write Binary");
fs.writeFileSync("test.bin", buf);
このバイナリファイルをバイナリエディタで見てみるとこんな感じになってる。

つぎにこのファイルを読んでみる。
import * as fs from "fs";
console.log("Read Binary");
let buf2 = fs.readFileSync("test.bin");
if(buf2) {
console.log("Data check");
if(buf2.length != 256) {
console.log("Size error");
process.abort();
}
for(let i = 0; i < buf2.length; i++) {
if(buf2.readUInt8(i) !== i) {
console.log("Ignore offset:" + i);
process.abort();
}
}
} else {
console.log("Read ERROR");
}
[Node.js][TypeScript] プライベートなモジュールの共有
いろいろ作っていると、TypeScriptに限らず別のプロジェクトで作ったコード使い回せそうだなとかある。(最初から使い回せるように作る場合も)C言語だとライブラリ作るんだけどNode.js、TypeScriptだとどうするんだろう?ってなったわけだ。で、調べてみた。
npmの2.0からローカルにあるパッケージ(モジュールというべき?)をインストールできるようになったらしいんそれを使う。
例として、複数プロジェクトで使うモジュールをcommonという名前で作る。
commonディレクトリを作って、そこでnpm initを実行して、package.jsonを適当に作る。
このモジュールは公開しないので念のためprivateフィールドをtrueで追加する。TypeScriptの場合、typesフィールドを追加して、モジュールの型情報ファイルをしてする。
{
"name": "common",
"version": "1.0.8",
"description": "",
"main": "test1.js",
"types":"test1.d.ts",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"private": true
}
つぎにTypeScriptの準備。
tsc --initを実行して、tsconfig.jsonを作成する。まー、特に変更するところはない。
外部モジュールのコード(test1.ts)はこんな感じにして、tscを実行する。
export function print() {
console.log("Test1モジュール");
}
tsc -Dを実行して型情報ファイルを生成する。(test1.d.tsができる)
次にこのモジュールを使う方だ。
commonディレクトリと同列(隣)にtestと言うディレクトリを作って、そこを使うことにする。 npm initやtsc --initでpackage.json、tsconfig.jsonを作成する。
$ npm install ../common --save
を実行して、commonモジュールをインストールする。testプロジェクトのnode_modulesフォルダにコピーされる。
commonモジュールを使うコードはこんな感じになる。
import * as hoge from "common";
hoge.print();
これで気になるのが、package.jsonのdependenciesフィールドにcommonが絶対ディレクトリで指定されるんだよな。他のPCに持って行ったときにちょっと困りそうだが、直接このフィールドを編集して相対パスで指定しても良さそうだ。
"dependencies": {
"common": "file:../common"
}
追記 2017/9/10
なんか、npm installで型定義ファイルがコピーされなくなってる。
追記 2017/9/10 その2
どうも、.gitignoreに*.d.tsを指定していたせいみたいだ。
型定義ファイルはtscで生成するからと思い.gitignoreに*.d.tsを指定していた。