nestjsのimport from '@/'
雑に読むMisskeyをしていてでた疑問基素.icon
https://github.com/misskey-dev/misskey/tree/7e8700514f18409874737cd5b439280bb03b829c/packages/backend/src/core
'import { GlobalEventService } from '@/core/GlobalEventService.js'のように@/でアクセスできるのはなんの仕様?
https://gyazo.com/3c750ca36e1f0abad0f9a3335a1e9d25
Vue.jsというフレームワークの仕様らしい。本当?
裏どりする
https://ja.stackoverflow.com/questions/49318/importするときのの意味
webpackのものでwebpack.base.conf.jsに書いてある、という説明
しかしそんなファイルはない
昔使われていた形跡はある
https://github.com/search?q=repo%3Amisskey-dev%2Fmisskey+webpack&type=commits
webpackにあるなら他のものが模倣している可能性があるのでaliasでnestjsを調べると、それっぽいものがある
https://docs.nestjs.com/cli/libraries#using-libraries
tsconfig.jsonを見るとそれっぽいものが書いてあった
"@/*": ["./src/*"]
https://github.com/misskey-dev/misskey/blob/7e8700514f18409874737cd5b439280bb03b829c/packages/backend/tsconfig.json#L29
以下のファイルでもエイリアスを設定しているのではないですか?coolwind0202.icon
https://github.com/misskey-dev/misskey/blob/7e8700514f18409874737cd5b439280bb03b829c/packages/backend/.swcrc
Webpackからswcにビルドツールを変更したのではないかと思います
13.7.1からswcになったとのこと基素.icon
https://github.com/misskey-dev/misskey/issues/10030#issuecomment-1441100523
https://github.com/misskey-dev/misskey/blob/7e8700514f18409874737cd5b439280bb03b829c/packages/backend/package.json
build コマンドを実行すると swc でビルドします
このとき、 .swcrc のエイリアス設定を使ってビルドします
build:tsc コマンドを実行すると tsc でビルドします
このときは、tsconfig.json のエイリアス設定を使います
tsc-alias スクリプトを実行してパスを置き換えます
こういうことかな基素.icon
本番環境用にtscでビルドした際にpath aliasだとエラーになってしまったため、tsc-aliasを使ってpath aliasを相対パス形式に変換するようにした。
path aliasを使ったTypescriptファイルをtscでコンパイルする
tsconfig.jsonでエイリアスを設定すると、エディタにもそれが認識されます
tsconfig.jsonはビルドよりもこのためだけに使っているのかも基素.icon
なるほど。感謝基素.icon
swc(build)とtsc(build:tsc)はどう使い分けているんだろう?基素.icon
暫定結論:tscはかつて使っていたが今は利用されていない
ビルドのコマンドを眺めるとわかるかな
swcは型チェックをしないらしいから、このdenoみたいな方式なのかな?
@petamoriken: @suin 型チェックには tsc を使っており、実行時には JavaScript へ swc で変換し、V8 で実行しています。
https://t.co/RhU2rEm71u
特に TypeScript をパフォーマンスのために活用しているようなことはありません。
..と思ったけど多分違う。tscで型チェックをしているけどbuild:tscは使ってなさそう基素.icon
https://github.com/misskey-dev/misskey/commit/0026c45fe04d1debfa4b7a82cc4327ffa9f5ff05
これはCIだけど、productionへのビルド時は型チェックしてないのかな?
ここでこれがよばれる
https://github.com/misskey-dev/misskey/blob/e4fc9ea816eabba03933d9845ba0918b1ad365ab/packages/backend/package.json#L15
もともとtscでbuildしていたのをwindowsで動かないという理由でswcにしているみたいだった
Windowsかつtscでビルドできていない人がいるみたいだからswcにしようという議論
https://github.com/misskey-dev/misskey/pull/10026
https://github.com/misskey-dev/misskey/issues/10025
https://github.com/misskey-dev/misskey/commit/4e23500732b2084aed597b95341f1ca45ede7f75 でshipされた(#10035, 13.7.2 )
tscはもう使ってない説