Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修正: serve-and-syncを機能させる #739

Closed
wants to merge 7 commits into from

Conversation

big-stream
Copy link
Contributor

修正

  • 変更内容はCONTRIBUTING.md に記載されたワークフローに従っています

関連Issue

動作確認は、ホストUbuntu 22.04、仮想マシンはmultipass環境でUbuntu22.04です。

リポジトリはホストでgit cloneして翻訳しつつ、仮想マシンでマウント(multipass mountコマンド)してDockerする状況です。

repo=~/git/angular-ja # ホストでgit clone
multipass launch --cpus 2 --mem 3G --disk 20G --name angular-ja 22.04
multipass mount -u $UID:1000 -g $GROUPS:1000 $repo angular-ja:/angular-ja

この環境では以前から#717 は発生していませんが、別の複数の問題で動作しなかったため、修正しました。

  • 最近のDockerインストールではdocker-composeよりもdocker composeの件
  • serve-and-syncからのrun-pdocs-watchstartを実行できない件
  • docs-watchで1ファイル当たり数回までしか更新できない件

ついでに下記を変更・追加してみました。

  • Debian => Alpineイメージで800MB節約
  • ビルドだけのコマンドyarn build-watch-aio追加

詳しくはコード部分にコメントしますので、ご確認をお願いいたします。

最後に、今回の修正後でもng serve--live-reload(デフォルト)が最初の1回とかしか機能しないです。原因を特定できていませんが、これは前からだったような気がしますし(当方の環境)、自分のタイミングでF5でページ更新できますし、むしろ--live-reload falseでも私は支障がないです。

package.json Outdated
Comment on lines 15 to 16
"start": "docker-compose up --remove-orphans watch-aio",
"start": "which docker-compose >/dev/null && compose=docker-compose || compose='docker compose'; $compose up --remove-orphans watch-aio",
"build-watch-aio": "which docker-compose >/dev/null && compose=docker-compose || compose='docker compose'; $compose build --no-cache watch-aio",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

以前は別バイナリのdocker-composeだけだったようですが、最近のインストールではDocker CLIに含まれているようです。

ビルドだけのコマンドを追加しました。イメージを削除してからyarn startしても、Dockerfileに変更がないラインまでのキャッシュレイヤーがあると、キャッシュでビルドしてしまうようなので、--no-cacheにしました。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

docker compose コマンドは存在することを前提にしていいかもしれませんね

Comment on lines +14 to +16
copyFile(`/aio-ja/${path}`, `/origin/aio/${path}`, err => {
if (err) console.error(err.message, `(${path})`);
});
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Debianベースのcpコマンドのときからそうなのですが、docs-watch(watchr.js)のリスナーが、1ファイル当たり数回更新すると以降は呼ばれなくなりました。コピーは成功しているのですが、以降はF5でもページが更新しません。

Node.jsのコードにすると解決しました。

関係は不明ですが、cpコマンドのときはコピー先のファイルパーミッションが変更(664=>640)されてました。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

例のマウント環境ではCHOKIDAR_USEPOLLING=true yarn startにしないと、watch-aio.mjsのchokidarが反応せず、コピーが発生しないことに注意です。

Comment on lines -23 to +21
await $`yarn serve-and-sync --host=0.0.0.0 --disableHostCheck`;
await $`export npm_execpath=$(yarn config get yarn-path); yarn serve-and-sync --host=0.0.0.0 --disable-host-check`;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/origin/aio/package.json

"serve-and-sync": "run-p \"docs-watch --watch-only\" \"start {@}\" --",

修正前イメージでもコンテナシェルで直接yarn serve-and-syncのコマンドを打つとrun-pは動作したのですが、npx zx watch-aio.mjs経由だとdocs-watchstartを呼べないエラーになりました。

  • なぜか/origin/aio/startを呼ぼうとするエラー(docs-watchも同様)
angular-ja-watch-aio-1  | Error: Cannot find module '/origin/aio/start'
angular-ja-watch-aio-1  |     at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
angular-ja-watch-aio-1  |     at Function.Module._load (node:internal/modules/cjs/loader:778:27)
angular-ja-watch-aio-1  |     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
angular-ja-watch-aio-1  |     at node:internal/main/run_main_module:17:47 {
angular-ja-watch-aio-1  |   code: 'MODULE_NOT_FOUND',
angular-ja-watch-aio-1  |   requireStack: []
angular-ja-watch-aio-1  | }

原因は$npm_execpathの違いのようです。

  • Node.js経由のyarn: /usr/local/lib/node_modules/npm/bin/npx-cli.js
  • シェルで直接yarn config get yarn-path: /origin/.yarn/releases/yarn-1.22.17.cjs

run-p --npm-pathの指定は英語リポジトリ側になるため、環境変数で対応しました。

FROM node:16.16.0
FROM node:16.16.0-alpine
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Debianに依存しているわけではなさそうなので、軽いAlpineにしました。

最後に--live-reloadが機能しない件のログです。

# 何度も編集しても同じハッシュでチェンジなし、でもF5で解決
angular-ja-watch-aio-1  | ✔ Browser application bundle generation complete.
angular-ja-watch-aio-1  | 
angular-ja-watch-aio-1  | 21 unchanged chunks
angular-ja-watch-aio-1  | 
angular-ja-watch-aio-1  | Build at: 2022-08-18T10:46:05.084Z - Hash: 53c762b44674710f - Time: 434ms
angular-ja-watch-aio-1  | 
angular-ja-watch-aio-1  | ✔ Compiled successfully.

# ブラウザコンソールも
[webpack-dev-server] Live Reloading enabled.
[webpack-dev-server] App updated. Recompiling...
[webpack-dev-server] Nothing changed.

コメントは以上です、よろしくお願いいたします。

@github-actions
Copy link

Visit the preview URL for this PR (updated for commit e4d6676):

https://angular-ja--pr739-docker-s3ngvztv.web.app

(expires Fri, 30 Sep 2022 03:10:05 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

@lacolaco
Copy link
Collaborator

@big-stream 修正ありがとうございます!
手元 (M1 Mac)で yarn build-watch-aioyarn start を試してみたんですがエラーになりました。しかし #717 と同じくwebdriver-manager周りのようでしたので、少なくともUbuntu環境では動作する状態になるのであればマージしてよいだろうと思います。

docker composeはもうcomposeコマンドをもたない古いdocker環境は切り捨ててしまってシンプルにしてもよいかと思いますので、そこだけfixお願いしてよいですか?

@lacolaco
Copy link
Collaborator

ところで、そもそもdocker化したのをやめたほうがいいのではないかという気もしています。
#717 (comment)

もしそうするとこの変更は大部分が取り消されてしまいますが、その可能性があることはご了承ください。

@lacolaco
Copy link
Collaborator

#741 試しにdockerをやめてみています。問題なさそうであれば、この路線で改修しようと思います(せっかくdockerで改善してくれたのに申し訳ないです)

@big-stream
Copy link
Contributor Author

訂正しました。
Dockerについては必要性を含めて考えていましたので大丈夫です。Dockerをやめるか、リポジトリ内容をコピーせずにマウントで対応するなどのシンプル化ができそうな気がしていました。

@lacolaco
Copy link
Collaborator

lacolaco commented Sep 3, 2022

@big-stream せっかくの修正ですがこのPRはcloseさせていただきます。dockerをやめた状態でUbuntuでの翻訳作業に支障があればまた遠慮なく教えていただきたいです!

@lacolaco lacolaco closed this Sep 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants