Firebase-tools: Tidak dapat menemukan modul '@ custom-modules / moduleName' saat menerapkan menggunakan TypeScript

Dibuat pada 1 Nov 2018  ·  3Komentar  ·  Sumber: firebase/firebase-tools

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 ~ 🤣

question

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 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?

Semua 3 komentar

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.

  1. Buat file baru /src/fixTsPaths.ts :

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. Impor di /scr/index.ts .

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
Apakah halaman ini membantu?
0 / 5 - 0 peringkat