alpineにperfをインストールする
Node.jsのパフォーマンスを測定するために、perfをインストールしたときのメモ
環境
node:12.16.2-alpine
方法
/etc/apk/repositories
に以下のリポジトリを追加
http://dl-cdn.alpinelinux.org/alpine/edge/main # elfutils-devの0.179-r0を入れるため http://dl-cdn.alpinelinux.org/alpine/edge/testing # perfを入れるため
apkで依存関係とperfをインストールします
$ sudo apk add elfutils-dev=0.179-r0 perf
Web向けのプロジェクトに混入した@types/nodeをany化する
現象
Web向けのプロジェクトにNode.jsの型が混入し、setTimeout
などの型が壊れてビルドエラーになる
TS2322: Type 'Timeout' is not assignable to type 'number'.
これはライブラリをインストールした際、そのライブラリの型定義ファイルに@types/node
が含まれていてこのようなケースになることがあります
TypeScriptのissueに登録されていて、ワークアラウンドは提案されているものの、根本的な解決には至っていないようです
今回のゴール
- 開発中、ライブラリの型がわかる
- ビルドに失敗しない
対応策
tsconfig.json
のtypeRoots
で@types/node
の読み込み先を変えます
declare module 'node'
でNode.jsの型を上書きします
src/typings/node/index.ts
declare module 'node'
tsconfig.json
"typeRoots": ["src/typings", "node_modules/@types"],
このようにすることで、実際の@types/node
が読み込まれず、型が壊れること無くビルドができます
package.jsonの^(caret)にハマった話
背景
- vue-cliを3系から4系にアップデートしたらビルドに失敗した
ERROR Failed to compile with 1 errors Module build failed (from ./node_modules/eslint-loader/index.js): Error: Cannot find module 'eslint/lib/formatters/stylish' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Module.require (internal/modules/cjs/loader.js:692:17) at require (internal/modules/cjs/helpers.js:25:18) at Object.module.exports (.../node_modules/eslint-loader/index.js:196:28)
- vue-cli 4かつESLint 6で
vue-cli-service lint
を実行するとエラー
Siderがすべて解析エラーになってしまったので対応した
日時
2020/03/05 以降
現象
- Siderの解析に失敗する
- ログを見ても特に何もエラーが出ていない
- 2020/03/08現在はエラーが出るようになってます
対策
sider.yml
にSiderがサポートしているtool以外が設定されていないか調べる
もし設定されている場合は、その設定をymlから削除する
iOS/iPadOS 13のSafariでページ全体や一部がレンダリングされない問題に対するワークアラウンド
背景
業務でWebアプリを開発しているのですが、iPadOS 13のSafariにて以下のような事象が発生しました
- ページ全体が真っ白になる
- ページの一部が欠ける
- 真っ白になったり、一部が欠けたりしたときにWebインスペクタを使うとDOM自体は存在している
- 画面をタップ、スクロールするとレンダリングされる
iOS 13 Safari Not Rendering などで調べてみるといくつかスレッドが上がっていました
しかし、問題解決までには至っていないようでした
Safari on iOS 13.1.2 Not Rendering Correc… - Apple Community
https://discussions.apple.com/thread/250673539
Webアプリを使う人にとっては単純に「Webアプリが使えない」と思ってしまうので、あまりやりたくないですがワークアラウンドを考えてみました
対策
初期表示にスクロールさせてレンダリングされるようにしました
画面をタップ、スクロールするとレンダリングされる
という事象から、アプリ側で強制的にスクロールさせました
Safari側で対応してくれればいいのですが…
擬似コード
レンダリングが終わった = function () { // y軸方向に1pxずらす setTimeout(function () { window.scrollTo(0, 1); }, 100); // 1pxずらしたので戻す setTimeout(function () { window.scrollTo(0, 0); }, 200); }