JavaScript/TypeScript備忘録
npmでローカルインストールされたパッケージをコマンド実行する
npx
から実行する。
npx [コマンド]
ローカルインストールされたパッケージはプロジェクト直下の node_modules
に配置されるので、直接呼び出して実行するか、このディレクトリに配置された実行ファイルにパスを通すことでも実行できる。
cannot be compiled under '--isolatedModules' because it is considered a global script file.
で起動できない
ts-node を起動しようとすると ts-node をファイル指定せずに対話モードで起動しようとすると、以下のようなメッセージとともにすぐに落ちる。
# npx ts-node
⨯ Unable to compile TypeScript:
<repl>.ts:1:1 - error TS1208: '<repl>.ts' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module.
原因はメッセージに記載の通り isolatedModules
によるもの。この検査が有効になっているのでimport/export
のない空のファイルをコンパイルしようとするとエラーになるが、対話モードでは <repl>.ts
としてコードが空の状態で起動されるので、この検査でエラーになってしまう。
tsconfig.json
の isolatedModules
の定義を true
から false
に変更すると正常に起動できるようになる。
high severity vulnerabilities
の警告が出る
インストール時に # npm install notebookjs
...
found 2 high severity vulnerabilities
run `npm audit fix` to fix them, or `npm audit` for details
まずは npm audit
で監査を実行して詳細を確認する。コマンド実行するとセキュリティレポートが出力される。
# npm audit
=== npm audit security report ===
Manual Review
Some vulnerabilities require your attention to resolve
Visit https://go.npm.me/audit-guide for additional guidance
High Inefficient Regular Expression Complexity in marked
Package marked
Patched in >=4.0.10
Dependency of notebookjs
Path notebookjs > marked
More info https://github.com/advisories/GHSA-5v2h-r2cx-5xgj
High Inefficient Regular Expression Complexity in marked
Package marked
Patched in >=4.0.10
Dependency of notebookjs
Path notebookjs > marked
More info https://github.com/advisories/GHSA-rrrm-qjm4-v8hf
npm audit fix
してみる…が、更新されない。
# npm audit fix
fixed 0 of 2 vulnerabilities in 197 scanned packages
2 vulnerabilities required manual review and could not be updated
package-lock.json
を編集してインストールする方法もあるが、npm install
毎に対象のnpmプロジェクトの情報に上書きされて元に戻ってしまうので現実的ではないようにみえる。プロジェクトのメンテナに修正してもらうか、ローカルにプロジェクトを置いて package.json
を修正してインストールする感じになりそう。
ローカルではエラーにならないのに、VercelのビルドではWordPress REST APIのFetchが失敗する
Vercelのビルド中に、WordPress REST APIのエンドポイントにfetchでアクセスしているコード部分で以下のエラーがでる。ローカルからテスト実行している場合は問題なく動作する。
Build error occurred
FetchError: invalid json response body at https://example.com/wp-json/wp/v2/posts reason: Unexpected token < in JSON at position 0
該当箇所にレスポンスのステータスを表示させるようにログ仕込んでみると…。
status: 403,
statusText: 'Forbidden',
レスポンスは403で返却されている。エラーメッセージの Unexpected token < in JSON at position 0
から察するに、ボディがJSONではなくHTMLが返却されているため invalid json
としてエラーが出ているように見える。
WordPress側の設定ではアクセスを弾くような設定はされていなかったが、ホスティングサービス側の設定がデフォルトで国外IPからのREST APIアクセスを遮断するような設定になっていたため、許可するように変更。Vercelでリランさせたら問題なくビルド成功した。
参考:
数値文字列の判定方法
数値文字列(ex. num = "1"
)の判定は isNan
でも可能だが、TypeScriptの型チェックで怒られる。また、isNaN("")
のようなケースでは false
が返却される。
isNan(num)
以下のように判定する。
typeof num === "string" && !Number.isNaN(Number(num))
参考: