Skip to content

JavaScript

rewireでjest

テストのために関数exportしないといけないの、チョット気持ち悪いので、解決策を探ってみる。

jhnns/rewire: Easy monkey-patching for node.js unit testsが一般的らしい。

$ npm install -D rewire @types/rewire

テストコードのimportを修正

import rewire from 'rewire';

const __local__ = rewire('./mdmml.ts');
const atoi = __local__.__get__('atoi')

テスト実行

$ npm test

> mdmml_js@1.0.0 test
> jest

 FAIL  src/mdmml.test.ts
  ● Test suite failed to run

    /home/umemak/workspace/mdmml_js/src/mdmml.ts:8
        Tracks: Track[] = [];
        

    SyntaxError: Unexpected identifier

      at Object.load (node_modules/rewire/lib/moduleEnv.js:57:18)
      at internalRewire (node_modules/rewire/lib/rewire.js:49:15)
      at rewire (node_modules/rewire/lib/index.js:11:12)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        1.01 s
Ran all test suites.

関係ないところでエラーになるようになってしまった。。

Read more

webpackで構築

昨日は、TypeScript環境構築に手間をかけたくないという想いでParcelを試してみたところ、エラーで途方に暮れていた。

今日は、古き良きwebpackを試した。

参考にしたページはこちら

$ npm init -y
$ npm i -D webpack webpack-cli typescript ts-loader
$ code package.json
$ code tsconfig.json
$ code webpack.config.js
$ code src/main.ts
$ npm run build
> mdmml_js@1.0.0 build /home/umemak/workspace/mdmml_js
> webpack

asset main.js 1.2 KiB [emitted] (name: main)
./src/main.ts 14 bytes [built] [code generated]
webpack 5.72.0 compiled successfully in 1126 ms

できた。 楽をしようとしてかえって遠回りになった経験だった。

Read more

Parcelを使ってみる

久しぶりにJavaScript(TypeScript)を書こうとしたら、何から始めてよいかわからなくなっていた。

あまり環境構築に手間をかけたくなかったので、parcel-bundler/parcel: The zero configuration build tool for the web. 📦🚀を使ってみた。

Building a web app with Parcelを見ながら

npm init
npm install --save-dev parcel

src/index.htmlを作って、

npx parcel src/index.html
/home/umemak/workspace/mdmml_js/node_modules/@parcel/core/lib/Parcel.js:150
  #requestTracker
  ^

SyntaxError: Invalid or unexpected token
    at new Script (vm.js:83:7)
    at NativeCompileCache._moduleCompile (/home/umemak/workspace/mdmml_js/node_modules/v8-compile-cache/v8-compile-cache.js:240:18)
    at Module._compile (/home/umemak/workspace/mdmml_js/node_modules/v8-compile-cache/v8-compile-cache.js:184:36)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (/home/umemak/workspace/mdmml_js/node_modules/v8-compile-cache/v8-compile-cache.js:159:20)
    at Object.<anonymous> (/home/umemak/workspace/mdmml_js/node_modules/@parcel/core/lib/index.js:81:39)
/home/umemak/workspace/mdmml_js/node_modules/@parcel/logger/lib/Logger.js:41
  #logEmitter
  ^

SyntaxError: Invalid or unexpected token
    at new Script (vm.js:83:7)
    at NativeCompileCache._moduleCompile (/home/umemak/workspace/mdmml_js/node_modules/v8-compile-cache/v8-compile-cache.js:240:18)
    at Module._compile (/home/umemak/workspace/mdmml_js/node_modules/v8-compile-cache/v8-compile-cache.js:184:36)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at _logger (/home/umemak/workspace/mdmml_js/node_modules/parcel/lib/cli.js:54:16)

うーん。。めんどくさい。。

Read more

Magenta.js

昨日のcifkao/html-midi-player: 🎹 Play and display MIDI files on the webの使い方見ようとして、magenta-js/music at master · magenta/magenta-jsを使っているのを知った。

Magentaは出始めのときにそんなのがあるのか、って思って深くは見ていなかったのだけど、今度はちゃんと使ってみようかな。

html-midi-playerではSMFファイルを渡して初期化しているところを、 textboxに書かれたマークダウンをSMFに変換してblobToNoteSequenceに渡せばよいのかな。 JavaScriptでテンポラリファイルとか作れるんだっけ・・?それなら無改造で行けそうだけど。

Read more

Screeps: Arena体験

Steam:Screeps: ArenaのDemo版をやってみた。

チュートリアルの途中までやったけど、普通に何か自分で開発してたほうが良いかな。

ノートPCで1画面でやってると、VS CodeとScreepsの行き来が面倒だったので、エディタは内蔵されていたほうが良いと思った。