bouzuya.hatenablog.com

ぼうずやのにっき

Node.js で ESM を使う際の nyc の設定を直した / diverta 2019 Programming Contest 2 の A を解いた

Node.js で ES Modules を使用した場合の npm:nyc の設定を直した。よく分からないままに。

node --loader @istanbuljs/esm-loader-hook してやると動く。きちんと理解はできていないものの、モジュール解決に処理を挟み込むことで nyc が動くようにしているのだろう。 experimental な flag に依存していて怪しい。実装も babel を使っているっぽくて怪しい。きちんと理解して babel の設定を書くほうが良さそうではある。

この方法 (npm:@istanbuljs/esm-loader-hook) だと Node.js v14.x では動かないっぽい。 https://nodejs.org/dist/latest/docs/api/esm.html#loaders によると v16.x で挙動が変わっているようなので、その変更に依存しているのかもしれない。 Node.js v14.x は 2023-04-30 で End-of-Life (https://github.com/nodejs/Release) なので、あと数ヶ月も立てば正式に切っても良さそう。 CI 的には切っておいても物としてはたぶん問題なく動く。問題があるとすれば ES Modules only にしているのでその影響のほうがよほど大きい。

ts-node/esm などを使う方法もあるようなのだけど、もういいかな……という気持ちになっている。

nyc のドキュメントには TypeScript と Node.js の両方で ESM を使用する例があまりきちんと書かれていないように思う。


diverta 2019 Programming Contest 2 の A を解いた。

use proconio::input;

fn main() {
    input! {
        n: usize,
        k: usize,
    };
    let ans = if k == 1 { 0 } else { n - k };
    println!("{}", ans);
}

今日のコミット。