Closed10
TypeScriptって何??
ピン留めされたアイテム
TL;DR なるべくプリミティブにTypeScriptでnpmパッケージを開発するには?
結局最終的に知りたいのはここで…
1. パッケージの初期化
- いつもの
npm --init
[1] - 依存関係にTypeScriptを追加
npm install typescript
[2]
パッケージ自体がtypescriptを要求するので、-D
ではないと思う たぶん…
2. TypeScriptの設定ファイルを作成
3. ソースファイルの作成
-
src/main.ts
を作成し、基本的なTypeScriptコードを記述 [6]main.ts// // hello-ts // const now: Date = new Date(); const message: string = `Hello, TypeScript! now: ${now.toISOString()}`;
4. ビルド・実行
-
tsc
を使ってコンパイルnpx tsc
- これにより
dist
ディレクトリにsrc
ディレクトリのソースをコンパイルした結果が出力される
- これにより
- 実行はそのまま
node dist/main.js
$ node dist/main.js Hello, TypeScript! now: 2023-09-14T01:35:27.415Z
5. 諸々修正
-
package.json
のmain
フィールドの値はデフォルトでindex.js
だが、no such file- コンパイル後に出力される方 (
dist/main.js
) を指定する [7]
- コンパイル後に出力される方 (
- このパッケージを入れる側は別にts-requiredではないので、devdepsに移動 [8]
- ビルドが面倒なので
package.json
に追記 [9]
GitHubからインストールできるようにする
デフォルトでは TSのコンパイル結果であるdist
はgitignoreされているので、 npm install <repo_url>
してもまともに動かない.
そこで、gitのorphanブランチ[1] を使ってreleaseとdevelopを明確に分けてみる
npm pack
でパッケージをpack
1. npm-pack
を使うと、パッケージをtar.gz
にパックすることができる [2]. package.json
の scripts
には prepack
というフィールドを追加でき、ここに npm run build
を入れておけばpack時に自動でビルドが走る. さらに files
フィールドを dist
にすれば、packされたパッケージから src
を除外できる! [3]
2. GitHub Actionsをいい感じに構成する
src
または package.json
、package-lock.json
が変更されたタイミングで動作し、パッケージをpackして展開してコミットするActionを構成する [4]
3. 普通に開発する
アクションが働けば release
ブランチにパッケージのビルド結果が公開される!
4. 他パッケージからインストールする
masterブランチからinstallしようとすると例の如くエラーになるので、そもそもpreinstallか何かで「masterからインストールしちゃダメよ!」 って言った方がいい気がする [5]
ただこれだとpreinstallがつぶされるので、もう少し何かないかなあという感じ
スクリプトとかにしてもよいかも
できた
他パッケージから利用する場合:
パッケージを初期化して
$ npm init
ブランチを指定してインストール
$ npm i Enchan1207/hello-ts#release
(ブランチを指定しないとインストール前に怒られる)
$ npm i Enchan1207/hello-ts
...
npm ERR! > hello-ts@0.1.0 preinstall
npm ERR! > echo "
npm ERR! >
npm ERR! > It seems that you're trying to install from the master branch.
npm ERR! > Please install from release branch. (e.g. npm i Enchan1207/hello-ts#release)";exit 1
npm ERR!
npm ERR!
npm ERR!
npm ERR! It seems that you're trying to install from the master branch.
npm ERR! Please install from release branch. (e.g. npm i Enchan1207/hello-ts#release)
...
呼び出す
index.js
require("hello-ts");
動かす
$ node index.js
Hello, TypeScript! now: 2023-09-14T03:26:45.521Z
Overview
TypeScriptを全く理解できていない人間が色々調べてまとめるスクラップ
パッケージマネージャとの関係
- TypeScriptとnpmやらyarnやらのパッケージマネージャは無関係 (勝手に勘違いしていた)
- tscなどのインストールにはnpmが必要になるが、それはあくまでそれらがnpmパッケージとして提供されているからで、tsに直接関わりがあるわけじゃない
- 極論tscさえ動けばts開発はできる
- tscだけグローバルインストールしてプロジェクトではMakefileで管理ってのも不可能ではない?
- なぜそうしないか: そうする理由がないから? 結局実行にあたってはnodeが必要になるし、それと密接に関わるnpmのパッケージとしてアプリケーション自体を作り始めるのは自然な流れ
- tscだけグローバルインストールしてプロジェクトではMakefileで管理ってのも不可能ではない?
-
tsc --init
でpackage.json
が生成・変更されないことからも明らか- もしnpm前提なら、tscはコンパイル以外に「ts用にoptimizeされたnpmパッケージの雛形」を生成する機能を備えているはず
tsconfig.jsonについて
-
tsc
は単純なコンパイラではなく、TypeScriptプロジェクトの生成・管理を担う機能も持っている-
tsconfig.json
はプロジェクトの構成ファイル-
tsc --init
で生成可能 - この子をプロジェクトにおいておくと、ファイルやオプションを毎回指定しなくても
tsc
するだけで構成情報を読んでコンパイルしてくれる- CMakeでいうところの
-S
と-B
みたいな設定もここでできる
- CMakeでいうところの
-
-
このスクラップは2023/09/14にクローズされました