Hai, teman-teman ~ Saya tidak dapat menerapkan ketika saya menetapkan argumen paths
di tsconfig.json
, seperti ini:
{
"compilerOptions": {
"lib": ["es6"],
"module": "commonjs",
"outDir": "lib",
"rootDir": "src",
"target": "es6",
"sourceMap": true,
"noImplicitReturns": true,
"baseUrl": ".",
// here, I assign a paths arguments
"paths": {
"@custom-modules/*": ["src/modules/*"],
}
},
"compileOnSave": true,
"include": ["src"]
}
Argumen paths
biasanya menggunakan TypeScript dan berfungsi dengan sempurna. Tetapi firebase deploy menampilkan kesalahan itu:
Error: Error parsing triggers: Cannot find module '@custom-modules/moduleName'
Pertanyaan ini telah dipublikasikan di StackOverFlow sebelumnya. Bagaimana cara menggunakan TS Path Mapping dengan Firebase Cloud Functions , dan untuk saat ini, Adakah yang bisa membantu saya? Terima kasih ~ 🤣
Saat pemahaman saya bekerja, baseUrl
dan paths
hanya digunakan oleh compiler dan linter untuk memahami pengetikan dan lokasi modul. Kedua properti tersebut _not_ memberi tahu kompilator untuk _include_ jalur yang dipetakan tersebut ke dalam kompilasi atau mengubah pernyataan import
agar berfungsi selama waktu kompilasi. Lihatlah direktori lib
dikompilasi untuk melihat bahwa pernyataan @custom-modules/*
import
tidak berubah.
Meskipun demikian, kesalahan tersebut berasal dari fakta bahwa dalam proses penerapan, CLI menginterpretasikan kode fungsi untuk memahami fungsi apa yang perlu diterapkan. Karena kode fungsi membutuhkan modul yang tidak diketahuinya (ini ada di folder lib
, ingat), kesalahan muncul yang mencetak pesan itu.
Jika Anda mencoba menghemat beberapa pengetikan dengan melakukan import ... from "@custom-modules/...";
dan memetakan ulang ke tempat lain dalam struktur Anda, Anda dapat memperbaikinya dengan melakukan impor relatif, yang mungkin merupakan cara yang disarankan. Saya tidak percaya baseUrl
dan paths
adalah jawaban yang Anda cari.
Halo yang disana! Ingin menambahkan lebih banyak info untuk masalah ini, karena saya telah mengalaminya juga.
Dalam proyek Node.js + TypeScript saya yang lain, masalahnya ada, karena, seperti yang dijelaskan di atas, Typecript tidak berubah memerlukan jalur dalam output JS. Satu-satunya solusi yang berfungsi yang dapat saya temukan adalah https://github.com/dividab/tsconfig-paths#with -node, yang mengubah cara penanganan jalur Node.js berdasarkan file konfigurasi tsconfig.json
. Itu berfungsi berkat argumen -r tsconfig-paths/register
diteruskan ke Node, dan mengeksekusi register
dalam runtime (bahkan di bagian paling atas index.ts) sepertinya tidak berfungsi di Fungsi Firebase.
Memiliki path relatif tampaknya sangat merepotkan bagi saya, karena saya memiliki folder common
yang juga digunakan oleh kode frontend, path relatif ke sana akan terlihat seperti ../../../common
di index.ts, dan bahkan lebih jelek di subfolder.
Jadi mungkin ada cara untuk menambahkan argumen -r tsconfig-paths/register
untuk Fungsi Firebase, termasuk lingkungan lokal dan produksi?
Saya telah menemukan bahwa https://www.npmjs.com/package/module-alias bekerja untuk saya.
Buat file baru /src/fixTsPaths.ts
:
import * as ModuleAlias from 'module-alias'
ModuleAlias.addAliases({
helpers: __dirname + '/helpers',
})
Impor di /scr/index.ts
.
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import './fixTsPaths'
Komentar yang paling membantu
Halo yang disana! Ingin menambahkan lebih banyak info untuk masalah ini, karena saya telah mengalaminya juga.
Dalam proyek Node.js + TypeScript saya yang lain, masalahnya ada, karena, seperti yang dijelaskan di atas, Typecript tidak berubah memerlukan jalur dalam output JS. Satu-satunya solusi yang berfungsi yang dapat saya temukan adalah https://github.com/dividab/tsconfig-paths#with -node, yang mengubah cara penanganan jalur Node.js berdasarkan file konfigurasi
tsconfig.json
. Itu berfungsi berkat argumen-r tsconfig-paths/register
diteruskan ke Node, dan mengeksekusiregister
dalam runtime (bahkan di bagian paling atas index.ts) sepertinya tidak berfungsi di Fungsi Firebase.Memiliki path relatif tampaknya sangat merepotkan bagi saya, karena saya memiliki folder
common
yang juga digunakan oleh kode frontend, path relatif ke sana akan terlihat seperti../../../common
di index.ts, dan bahkan lebih jelek di subfolder.Jadi mungkin ada cara untuk menambahkan argumen
-r tsconfig-paths/register
untuk Fungsi Firebase, termasuk lingkungan lokal dan produksi?