angularjs - Bagaimana cara berbagi TypeScript/JavaScript antara Frontend dan Backend?
Saya memiliki struktur folder untuk proyek Node.js /w Angular.js dengan beberapa file seperti berikut (dari root proyek):
frontend
frontend-file1.ts
frontend-file2.ts
backend
backend-file1.ts
backend-file2.ts
Saya menggunakan compiler TypeScript bersama dengan banyak plugin gulp lainnya untuk mengompilasi ini menjadi folder build seperti ini (perhatikan bagaimana file frontend ditempatkan ke dalam public):
build
backend-file1.js
backend-file2.js
public
frontend-file1.js
frontend-file2.js
Di folder sumber, saya menggunakan pernyataan import ES6/TypeScript untuk mengimpor file.
Contoh: backend-file1.ts
import './backend-file2';
Situasi
Saya telah menulis beberapa fungsi utilitas kustom yang seharusnya digunakan oleh backend dan frontend. Saya tidak ingin mengulang fungsi yang sama di kedua folder, karena ini rawan kesalahan dan merupakan pekerjaan ganda.
Saya telah mempertimbangkan untuk membuat folder shared di root proyek di antara folder frontend dan backend, tetapi saya tidak bisa mengimpor file di browser yang berada di atas file index.html, yang ada di folder frontend.
Pertanyaan
Bagaimana saya bisa menulis file TypeScript sekali dan dapat import file ini di kedua folder frontend dan backend?
Jawaban #1
Saya akan menstrukturkan kode seperti ini:
- src/
- server/
- client/
- shared/
Anda dapat menempatkan semua pustaka bersama Anda ke dalam direktori shared lalu mengimpor/memintanya dari berkas sumber server atau klien Anda:
import '../shared/library'
Jawaban #2
Untuk memperluas jawaban yang sudah diberikan untuk kasus outFile, saya akan menunjukkan cara saya menangani berbagi kelas apabila Anda tidak bisa atau tidak ingin menggunakan opsi webpack/browserify/outFile.
Strukturnya terlihat mirip
-client
index.html
app.ts
-server
service.ts
-common
helper.ts
-dist
-client
-index.html
-lib
-client
app.js
-common
helper.js
-server
service.js
-common
helper.js
Idenya adalah bagaimana Anda membangun folder dist dengan hasil build Anda. Saya melakukan ini dengan tugas-tugas gulp dan dengan memiliki struktur di atas, itu memungkinkan saya untuk menggunakan kembali komponen baik di sisi server maupun klien dari pustaka umum.
Catatan. Untuk bekerja di sisi klien, jangan lupa untuk mengatur base URL untuk systemjs di index.html:
System.config({
baseURL: './lib'
});
System.defaultJSExtensions = true;
Semoga ini membantu.
