Open13
npm 的 sbt 理解

JSer たる私は npm に例えないと機能が理解できないので sbt と npm の機能マッピングを行った。

sbt vs npm 雑比較
Feature | sbt | npm |
---|---|---|
プロジェクト定義 | build.sbt |
package.json |
依存関係管理 | libraryDependencies |
dependencies |
レジストラ | Maven / Ivy | npm |
ビルド | sbt compile |
N/A |
テスト | sbt test |
N/A |
パッケージング | sbt package |
npm pack |
レジストラに公開 | sbt publish |
npm publish |
タスク実行 | カスタムタスク定義 | npm-scripts |
インタラクティブシェル | sbt |
N/A |
プロジェクト生成 | sbt new |
npm init |
プラグイン | project/plugins.sbt |
npm-scripts |

npm がパッケージマネージャー (Node Package Manager だしね) なのに対して、 sbt はビルドツール (Simple|Scala Build Tool だしね) なので担当する範囲はかなり違いそう

リファレンスマニュアルを読む

$ sbt
でインタラクティブシェルに入れる。
compile
とか ~compile
とかでコマンドを実行できる。

sbt:foo-build> set ThisBuild / scalaVersion := "2.13.12"
の ThisBuild
ってなんじゃいと思ったけどこのビルド全体のこと、スコープのことらしい。

インタラクティブシェルで出てきたコマンド

このディレクトリっていうのは公開するパッケージのディレクトリ構成の話だな

sbt --client
で Metals が起動している sbt セッションにログインできるらしい。便利そう。

build.sbt のドメイン固有言語(DSL)
各エントリは設定式と呼び、その中にタスク式と呼ばれるものがある。

モノレポもできる( Multi Project Build と呼ばれている)

何か言ってるかわからん

なるほど、マルチプロジェクトを踏まえた対象を絞るためのスコープなのね。
で、 ThisBuild はマルチプロジェクトがあってもそのビルド全体を指す予約語だと。