Firebase-tools: لا يمكن العثور على الوحدة النمطية "@ custom-modules / moduleName" عند النشر باستخدام TypeScript

تم إنشاؤها على ١ نوفمبر ٢٠١٨  ·  3تعليقات  ·  مصدر: firebase/firebase-tools

مرحبًا ، يا رفاق ، لا يمكنني النشر عند تعيين وسيطات paths في tsconfig.json ، مثل هذا:

{
  "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"]
}

عادةً ما تستخدم الوسيطات paths TypeScript وتعمل بشكل مثالي. لكن نشر Firebase ألقى هذا الخطأ:

Error: Error parsing triggers: Cannot find module '@custom-modules/moduleName'

تم نشر هذا السؤال في StackOverFlow قبل كيفية استخدام TS Path Mapping مع Firebase Cloud Functions ، وفي الوقت الحالي ، هل يمكن لأي شخص مساعدتي؟ شكرا ~ 🤣

question

التعليق الأكثر فائدة

مرحبا! هل تريد إضافة المزيد من المعلومات حول هذه المشكلة ، لأنني واجهتها أيضًا.
في مشروع Node.js + TypeScript الآخر الخاص بي ، كانت المشكلة قائمة ، لأنه ، كما هو موضح أعلاه ، لا يتغير Typescript يتطلب مسارات في JS الإخراج. الحل الوحيد الذي تمكنت من العثور عليه هو https://github.com/dividab/tsconfig-paths#with -node ، والذي يغير طريقة معالجة مسارات Node.js بناءً على ملف التكوين tsconfig.json . يعمل هذا بفضل الوسيطة -r tsconfig-paths/register التي تم تمريرها إلى Node ، ولا يبدو أن تنفيذ register في وقت التشغيل (حتى في الجزء العلوي من index.ts) يعمل في وظائف Firebase.

يبدو أن وجود مسارات نسبية أمر غير مريح للغاية بالنسبة لي ، لأن لدي مجلد common يتم استخدامه أيضًا بواسطة رمز الواجهة الأمامية ، والمسار النسبي سيبدو مثل ../../../common في index.ts ، وحتى أكثر قبحًا في المجلدات الفرعية.

لذلك ربما هناك طريقة لإضافة هذه الوسيطة -r tsconfig-paths/register لوظائف Firebase ، بما في ذلك البيئات المحلية والإنتاجية؟

ال 3 كومينتر

نظرًا لأن فهمي يعمل ، يتم استخدام baseUrl و paths فقط من قبل المترجم و linter لفهم كتابة وموقع الوحدات. هاتان الخاصيتان لا تخبران المحول البرمجي _ تضمين_ تلك المسارات المعينة في التجميع أو تغيير عبارات import للعمل أثناء وقت الترجمة. ألق نظرة على الدليل المترجم lib لترى أن كشف @custom-modules/* import لم يتغير.

ومع ذلك ، يأتي الخطأ من حقيقة أنه في عملية النشر ، يفسر CLI رمز الوظائف لفهم الوظائف التي يجب نشرها. نظرًا لأن كود الوظائف يتطلب وحدة نمطية ليس لديه علم بها (هذا موجود في المجلد lib ، تذكر) ، يتم طرح خطأ يطبع هذه الرسالة.

إذا كنت تحاول حفظ بعض الكتابة عن طريق إجراء import ... from "@custom-modules/..."; وإعادة التعيين إلى مكان آخر في الهيكل الخاص بك ، فيمكنك إصلاح ذلك عن طريق إجراء عمليات استيراد نسبية ، والتي ربما تكون الطريقة الموصى بها على أي حال. لا أعتقد أن الإجابة التي تبحث عنها هي baseUrl و paths .

مرحبا! هل تريد إضافة المزيد من المعلومات حول هذه المشكلة ، لأنني واجهتها أيضًا.
في مشروع Node.js + TypeScript الآخر الخاص بي ، كانت المشكلة قائمة ، لأنه ، كما هو موضح أعلاه ، لا يتغير Typescript يتطلب مسارات في JS الإخراج. الحل الوحيد الذي تمكنت من العثور عليه هو https://github.com/dividab/tsconfig-paths#with -node ، والذي يغير طريقة معالجة مسارات Node.js بناءً على ملف التكوين tsconfig.json . يعمل هذا بفضل الوسيطة -r tsconfig-paths/register التي تم تمريرها إلى Node ، ولا يبدو أن تنفيذ register في وقت التشغيل (حتى في الجزء العلوي من index.ts) يعمل في وظائف Firebase.

يبدو أن وجود مسارات نسبية أمر غير مريح للغاية بالنسبة لي ، لأن لدي مجلد common يتم استخدامه أيضًا بواسطة رمز الواجهة الأمامية ، والمسار النسبي سيبدو مثل ../../../common في index.ts ، وحتى أكثر قبحًا في المجلدات الفرعية.

لذلك ربما هناك طريقة لإضافة هذه الوسيطة -r tsconfig-paths/register لوظائف Firebase ، بما في ذلك البيئات المحلية والإنتاجية؟

لقد وجدت أن https://www.npmjs.com/package/module-alias يعمل معي.

  1. أنشئ ملفًا جديدًا /src/fixTsPaths.ts :

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. قم باستيراده بـ /scr/index.ts .

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات