俺になんの断りもなく、いつのまにかwebpackのバージョンが上がっていたのだ。解決済みだが、2点ハマった。
- exports is not defined
- process is not defined
exports is not defined は、babel がうまく変換してくれないのだと分かったが、検索するとtypescriptの記事ばかり。俺のプログラムはtypescriptでないnode.js のコードなんだよ。そんなので書いている人はもういないのだろう。更に検索を続けた結果、.babelrc にsourceType:'unambiguous'を追加すると直った。
{ "presets": ["@babel/preset-env"], sourceType: 'unambiguous' }
process is not defined こっちは更にいろいろと試行錯誤をしていらないパッケージとかをインストールしたりしても直らず、結局は log4js がprocess.envにアクセスしているからだと分かり、log4jsを取ってしまうことにした。 本体の開発はcliで別のリポジトリでやっていて、web公開用はソースコードを持ってきてるだけだから、取ってもいいやという感じである。 とはいえ log はいたるところに書いてあるので、ダミーのlog4jsを書いた。
class Log4JSDummyLogger { costructor() { this.level = ''; } debug() {}; isDebugEnabled() {return false}; fatal() {}; error() {}; warn() {}; info() {}; debug() {}; trace() {}; } function getLogger() { return new Log4JSDummyLogger(); } exports.getLogger = getLogger;
これでなんとか動くようになったので、昨日の因数分解プログラム公開になったのである。 途中で、もう諦めて、ソースコードを全部typescriptで書き直そうかと思ったこともあったが、もしそうしていたら、別の世界線に移っていたところであった。危ない、危ない。
上の本は全然読んでいないので役に立つのか立たないのかも知らない。たぶんネットで最新の情報に当たった方がいいんじゃないかな。でも概要を知るには本を読んだ方がいいかも知れない。
node.js も webpack も babel も全く理解しないで適当に使っている。log4js は java の時代に log4j を使っていたので少しは分かっているつもり(だが怪しいところもある)