مرحبًا ، يا رفاق ، لا يمكنني النشر عند تعيين وسيطات 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 ، وفي الوقت الحالي ، هل يمكن لأي شخص مساعدتي؟ شكرا ~ 🤣
نظرًا لأن فهمي يعمل ، يتم استخدام 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 يعمل معي.
أنشئ ملفًا جديدًا /src/fixTsPaths.ts
:
import * as ModuleAlias from 'module-alias'
ModuleAlias.addAliases({
helpers: __dirname + '/helpers',
})
قم باستيراده بـ /scr/index.ts
.
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import './fixTsPaths'
التعليق الأكثر فائدة
مرحبا! هل تريد إضافة المزيد من المعلومات حول هذه المشكلة ، لأنني واجهتها أيضًا.
في مشروع 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 ، بما في ذلك البيئات المحلية والإنتاجية؟