git - Typescript menggunakan pustaka bersama
Ketika memiliki basis kode yang berbeda, bagaimana saya akan membagikan kode di antara mereka. Semua kode ditulis dalam TypeScript dan sedang dalam pengembangan berkelanjutan.
Saya sedang mencari solusi yang sederhana.
Hal-hal yang telah saya coba:
1 menggunakan pernyataan import dengan path ke proyek lain:
import { type } from '../../otherProj/src/type';
tidak berfungsi:
error TS2307: Cannot find module '../../otherProj/src/type'
2 modul npm
Diinstal secara lokal menggunakan
npm i ../otherProj
Menjadi masalah karena saya selalu harus memperbarui versi pustaka setiap ada perubahan atau saya harus mencopot/menginstal ulang pustaka secara manual.
3 submodul/subtree git
Menggunakan submodul git.
4 Softlink/Persimpangan Direktori
Karena kita sedang menggunakan Windows, kita saat ini menggunakan mklink /D /J
Apakah ada alternatif lain?
Jawaban #1
2 modul npm
Gunakan npm link untuk menautkan modul.
Dokumen
https://docs.npmjs.com/cli/link
Jawaban #2
Akhirnya saya membuat gulp-task yang memantau basis kode di lokasi utama dan menyalin baik sumber maupun output yang dikompilasi ke proyek/target sekunder. Perpustakaan bersama terletak di root kedua proyek dan memiliki jalur relatif yang sama.
Di target, saya telah .gitignore sumber yang disalin.
Ini bekerja dengan baik, tetapi memiliki kekurangan utama bahwa referensi simbol di editor membuat saya mengedit kode yang tercermin, bukan sumber yang dikelola. Ini mungkin bisa diperbaiki dengan menggunakan pendekatan git "submodule", di mana kedua pohon akan dikelola, tetapi saya meninggalkannya karena tampaknya menambah kompleksitas dan ketergantungan server sumber.
Datang dari .net dengan assembly yang dikompilasi dan dibagikan, ini ternyata menjadi masalah yang cukup sulit, dan saya curiga bahwa mencoba meniru perilaku ini di Typescript mungkin bukan cara yang tepat untuk melakukannya?
function compileUtils() {
// Tried to use the tool syncy for this, but it did not work with "../", had to revert to manual sync.
// NB: This will break when bad files are removed and renamed.
return gulp.src(utilsPath)
.pipe(gulp.dest('./utils'));
}
function compileBuiltUtils() {
// Copy of the above, copies the built utils files
return gulp.src(utilsBuiltPath)
.pipe(gulp.dest('./build/utils'));
}
