Firebase - الإصدار
3.18.4
نظام التشغيل Ubuntu 18.04 x64
يعرض المستعرض المحتوى المحدث
يتم تحديث الصفحة فقط بعد إعادة تشغيل أمر firebase serve. لقد أكدت أنه تم تحديث الإخراج في lib.
> firebase serve --only functions --debug [17:29:27]
[2018-05-01T00:29:30.975Z] ----------------------------------------------------------------------
[2018-05-01T00:29:30.978Z] Command: /home/shane/.nvm/versions/node/v6.11.5/bin/node /home/shane/.yarn/bin/firebase serve --only functions --debug
[2018-05-01T00:29:30.978Z] CLI Version: 3.18.4
[2018-05-01T00:29:30.979Z] Platform: linux
[2018-05-01T00:29:30.979Z] Node Version: v6.11.5
[2018-05-01T00:29:30.979Z] Time: Mon Apr 30 2018 17:29:30 GMT-0700 (PDT)
[2018-05-01T00:29:30.979Z] ----------------------------------------------------------------------
[2018-05-01T00:29:30.986Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2018-05-01T00:29:30.986Z] > authorizing via signed-in user
[2018-05-01T00:29:30.988Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/projects/nativ-dev
Mon Apr 30 2018 17:29:30 GMT-0700 (PDT)
[2018-05-01T00:29:31.433Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 01 May 2018 00:29:31 GMT, content-type=application/json; charset=utf-8, content-length=128, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
[2018-05-01T00:29:31.437Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/database/nativ-dev/tokens
Mon Apr 30 2018 17:29:31 GMT-0700 (PDT)
[2018-05-01T00:29:31.926Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 01 May 2018 00:29:31 GMT, content-type=application/json; charset=utf-8, content-length=256, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
[2018-05-01T00:29:31.927Z] >>> HTTP REQUEST GET https://cloudresourcemanager.googleapis.com/v1/projects/nativ-dev
Mon Apr 30 2018 17:29:31 GMT-0700 (PDT)
[2018-05-01T00:29:32.335Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Tue, 01 May 2018 00:29:32 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=hq=":443"; ma=2592000; quic=51303433; quic=51303432; quic=51303431; quic=51303339; quic=51303335,quic=":443"; ma=2592000; v="43,42,41,39,35", accept-ranges=none, connection=close
=== Serving from '/home/shane/source/firebase'...
i functions: Preparing to emulate functions.
[2018-05-01T00:29:32.733Z] Fetching environment
[2018-05-01T00:29:32.736Z] >>> HTTP REQUEST GET https://mobilesdk-pa.googleapis.com/v1/projects/766196581577:getServerAppConfig
Mon Apr 30 2018 17:29:32 GMT-0700 (PDT)
[2018-05-01T00:29:33.255Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Tue, 01 May 2018 00:29:33 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=hq=":443"; ma=2592000; quic=51303433; quic=51303432; quic=51303431; quic=51303339; quic=51303335,quic=":443"; ma=2592000; v="43,42,41,39,35", accept-ranges=none, connection=close
[2018-05-01T00:29:33.256Z] Starting @google-cloud/functions-emulator
[2018-05-01T00:29:34.318Z] Parsing function triggers
i functions: No HTTPS functions found. Use firebase functions:shell if you would like to emulate other types of functions.
i functions: No HTTPS functions found. Use firebase functions:shell if you would like to emulate other types of functions.
✔ functions: createCustomerOnCall: http://localhost:5000/nativ-dev/us-central1/createCustomerOnCall
✔ functions: createCustomerHttps: http://localhost:5000/nativ-dev/us-central1/createCustomerHttps
info: User function triggered, starting execution
info: Execution took 19 ms, user function completed successfully
info: User function triggered, starting execution
info: Execution took 1 ms, user function completed successfully
لقد جربت هذا للتو على جهاز مختلف (Debian Stretch) بمشروع جديد (firebase init) وحدث نفس الشيء مع وظيفة hello world. لقد لاحظت أنه إذا قمت بتغيير المصدر قبل إرسال طلب إلى الوظيفة ، ولكن بعد أن أصبحت الوظيفة جاهزة للخدمة ، يمكنني إعادة تحميلها مرة واحدة ثم التوقف عن العمل مرة أخرى.
لقد حاولت إنشاء مشروع جديد (firebase init) على جهاز Mac و Linux ، وهو يعمل على نظام Mac وليس على Linux.
لقد قمت ببعض التجارب ويمكنني الحصول على مثال hello world في JavaScript لإعادة التحميل السريع ولكن ليس مثال TypeScript. يبدو أن firebase serve
يشاهد index.js
في الدليل الذي تم تكوينه في `firebase.json.
لإعادة تحميل مشروعي لـ TypeScript (وأفترض أن تخطيطات JavaScript أكثر تعقيدًا تحتوي على أكثر من index.js
) كان علي استخدام Webpack لإخراج ملف واحد functions/lib/index.js
وتهيئة Firebase للبحث عن كود الدالات في functions/list
. يؤدي هذا بعد ذلك إلى عمل إعادة التحميل السريع لكل من firebase functions:shell
و firebase serve
.
عندما كنت أستخدم tsc
(وفقًا للقالب firebase init
) ، لن يتم إعادة تحميل الكود إلا إذا قمت بتعديل الملف الناتج index.js
. سير العمل الحالي الخاص بي هو تشغيل webpack --watch
في محطة واحدة مع firebase serve --only functions
في محطة أخرى. أنا الآن أحصل على إعادة تحميل ساخنة. سيكون من الجيد لو كان بإمكاني العودة إلى الإعداد الافتراضي من firebase init
.
تم تحديث firebase.json
{
"functions": {
"predeploy": "npm --prefix functions run build",
"source": "functions/list"
}
}
safarmer كيف تبدو وظائفك / package.json؟ هل يحتوي على حقل main
؟
لقد بدأت في استخدام الافتراضي الذي تم إنشاؤه بواسطة firebase init
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc --project tsconfig.json",
"serve": "yarn run build && firebase serve --only functions",
"shell": "yarn run build && firebase functions:shell",
"start": "yarn run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"main": "lib/index.js",
"dependencies": {
...
},
"devDependencies": {
...
},
"private": true
}
أبسط طريقة لتكرار المشكلة:
firebase init && cd functions && yarn
mkdir src/handlers && mv src/index.ts src/handlers/helloworld.ts
echo "export * from './handlers/helloworld';" > src/index.ts
yarn build --watch
firebase serve --only functions
عند زيارة عنوان URL في المتصفح ، سترى رسالة Hello world. إذا قمت بتغيير السلسلة التي تم إرجاعها من المعالج في handler.ts ، فإن الطريقة الوحيدة للحصول على نتيجة التغيير هي إعادة تشغيل الأمر firebase serve
.
بإضافة "source": "functions/lib"
إلى firebase.json
، قم بإعادة تحميل الكود بشكل سريع إذا قمت بتغيير أي شيء في functions/lib
لكن الدلائل ذات الرافعة المنخفضة لا تؤدي إلى إعادة التحميل. من الممكن تشغيل touch lib/injex.js
لبدء إعادة التحميل. على سبيل المثال ، يؤدي تغيير معالج في src/index.ts
إعادة التحميل ، لكن تغيير src/handlers/helloworld.ts
لا يفعل ذلك.
laurenzlong أفضل ما لدي حتى الآن هو (مأخوذ من النتيجة الافتراضية لـ firebase init) أدناه. مع هذا ، ما زلت بحاجة إلى تشغيل touch lib/index.js
. مشكلة Antoher مع هذا هو أن firebase deploy
لم يعد يعمل.
firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions/lib"
}
}
وظائف / package.json
{
"name": "functions",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"serve": "npm run build && firebase serve --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"main": "lib/index.js",
"dependencies": {
"firebase-admin": "~5.12.0",
"firebase-functions": "^1.0.1"
},
"devDependencies": {
"tslint": "^5.8.0",
"typescript": "^2.5.3"
},
"private": true
}
laurenzlong لدي مثال بسيط يمكنك استنساخه لإعادة حل المشكلة على Linux:
https://github.com/safarmer/firebase-functions
شكرا على التوبيخ! سألقي نظرة الأسبوع المقبل.
نفس المشكلة هنا :)
بالنسبة لي ، يبدو أن firebase serve
لا يدعم الكتابة المطبوعة في الوقت الحالي ...
لقد قارنت الملفات التي طلبتها مع تلك التي أرسلتها safarmer ولدي نفس التكوينات. لا يفاجئني لأن هذا هو التكوين الرسمي للاستخدام مع TypeScript
أعتقد أن المشكلة تكمن في أن firebase serve
لا يستمع للتغييرات في دليل الوظائف "المصدر" ولن يقوم بتشغيل البرامج النصية قبل النشر ، المحددة في firebase.json
.
سيكون رائعا إذا تم إضافة هذا. :د
آه ، وسيكون رائعًا إذا كان بإمكاني تحديد البرامج النصية الأخرى للنشر المسبق لخدمة Firebase ، لذلك لن أضطر إلى التشغيل على سبيل المثال tslint
في الاختبار :)
IchordeDionysos لا أعتقد أنه مجرد TypeScript. حاولت أن أفعل نفس الشيء مثل المثال الخاص بي في JavaScript وبدا أنه يفعل الشيء نفسه. أعتقد أن المشكلة تتعلق بالخادم فقط بالنظر إلى نقطة الدخول وليس إلى بقية الكود. نأمل أن يتمكن فريق Firebase من إلقاء بعض الضوء على المشكلة قريبًا.
يبدو أن تثبيت @ laurenzlong يدويًا يجعل الأشياء تعمل (شكرًا tstirrat على الاقتراح)
شكرا على Repro المفصل https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/207. يرجى متابعة هذا الموضوع.
laurenzlong يمكنني إعادة إنتاج هذه المشكلة في Windows وعلى وجه الخصوص لم يتم اكتشاف تغيير index.ts. أحتاج إلى تشغيل tsc يدويًا. ثم يتم الكشف عن التغيير وإعادة تحميل الوظيفة.
هل يجب أن أفتح قضية منفصلة؟
ملاحظات سريعة: في بعض الأحيان يتم اكتشاف info: Worker for helloWorld closed due to file changes.
في ts ولكن لا يتم تحديث lib. في أوقات أخرى لم يتم اكتشافه على الإطلاق. تشغيل tsc يدويًا يعيد دائمًا تحميل الوظيفة.
tstirrat لا يبدو أن تثبيت الحارس على النوافذ وفقًا للتعليمات يعمل
ما هي الأخطاء التي تواجهها على وجه التحديد عند تثبيت الحارس؟
لا توجد أخطاء عند تثبيت الحارس. لكن وظائف التقديم ليست ساخنة
إعادة تحميل. يجب أن أتوقف عن الخدمة ، والبناء ، والخدمة مرة أخرى بعد كل تغيير.
يوم الأربعاء 21 نوفمبر 2018 الساعة 1:01 صباحًا كتب Kevin Jian [email protected] :
ما هي الأخطاء التي تواجهها على وجه التحديد عند تثبيت الحارس؟
-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/firebase/firebase-tools/issues/758#issuecomment-440460196 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AHgHbeA_iECsIMH3V9P7NQypsmudF_IQks5uxInggaJpZM4Tta12
.
إعادة الفتح بسبب تقارير متعددة عن هذا لا يزال لا يعمل على Windows
لا يزال لا يعمل على Ubuntu 18.04 مع Node.js v10.15.0
كانت مشكلتي متعلقة بالمحاكي:
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196
مرحباً بالجميع ، شكراً على التقارير التفصيلية. afuggini أحصل على 404 عندما أنقر على هذا الرابط ، هل تم تعيين الأذونات بشكل صحيح على هذا الريبو للعرض العام؟ هناك مشكلة أخرى مشابهة لهذه المشكلة: https://github.com/firebase/firebase-tools/issues/1022. سمعت أن هذه المشكلة تخلق نقطة ألم للتنمية المحلية باستخدام Typescript.
لقد سجلت خطأ في جهاز التعقب الداخلي لدينا: 123266946. لا يمكنني الالتزام عندما يمكننا الالتفاف حول هذا الأمر ، لكنني أعلم أنه يتم تتبع ذلك. العلاقات العامة هي موضع ترحيب كبير!
أنا أيضا واجهت هذا الخطأ. لم أتمكن من إنشاء أي حل بديل لذلك يجب علي إعادة تشغيل الخادم بعد كل تغيير. إذا كنت تعرف حلاً موثوقًا به ، فيرجى إبلاغي بذلك.
ondratra ، هل يمكنك تقديم إصدار CLI الحالي ونظام التشغيل الأساسي وإعلامنا إذا كنت تعمل مع أي شيء آخر غير npm
(على سبيل المثال yarn
)؟
bkendall أنا على دبيان (sid). تتم مشاهدة الملفات المصدر للطباعة وتصنيفها عبر tsc -w
+ يتم تقديم الوظائف عبر firebase --only functions serve
. package.json
على المسار الصحيح لـ
js ملف الإخراج {"main": "dist/src/index.js", ...}
. حتى أنني حاولت استخدام حزمة tsc-watch
وصراحة ملف فهرس touch
، لكن دون جدوى.
$ firebase --version
6.3.1
يا رفاق ، تحقق من تعليقي السابق. تتعلق المشكلة بـ cloud-functions-emulator
. إنه يستخدم ميزة fs
watch ، والتي بها مشكلة معروفة في نظام التشغيل Linux. لذلك لا تتوقع حلاً مباشرةً من firebase-tools.
ribizli thx ، الرابط الذي قمت بمشاركته يشرح بالتأكيد طبيعة المشكلة. لكن ما زلت لم أجد أي حل بديل. هل هناك أي إمكانية لمشاهدة الملفات عبر البرنامج النصي المخصص وإجبار Firebase على إعادة التحميل؟
ondratra fork @google-cloud/functions-emulator
، أضف node-watch
كما ذكرت في تعليقي المرتبط ، npm link
الحزمة. أعد تثبيت firebase-tools
: يحتوي على @google-cloud/functions-emulator
كتبعية اختيارية ، لذلك سيتم استخدام نسختك المرتبطة.
وأخيرًا: يمكنك إنشاء علاقات عامة على https://github.com/GoogleCloudPlatform/cloud-functions-emulator وآمل أن يقبلوا ويصدروا قريبًا. (يمكنني التعايش مع الحل الخاص بي ، لذلك لم أساهم)
وظائف -> index.js بعد حفظ هذا الملف ، كيف يمكنني بدء التشغيل التلقائي لـ "firebase serve"
الحل البديل من https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196 (شكرًاdirkjot):
لقد نجح هذا الأمر بالنسبة لي ، إليك الإرشادات الكاملة وإصلاح الخطأ المطبعي الصغير
- ابحث عن
@google-cloud
، ربما فيnode_modules
(انظر أدناه للحصول على Firebase)cd functions-emulator
- إضافة node-watch:
npm install --save node-watch
- قم بتحرير الملف
src/supervisor/worker.js
- حول السطر 180 ، ستجد
fs.watch(localdir, {
. استبدل هذا بـrequire('node-watch')(localdir, {
.باستخدام Firebase مع الكتابة المطبوعة ، كل ما علي فعله هو تشغيل
tsc -w
في محطة طرفية منفصلة (متغير الساعةnpm run build
). يمكنني الآن تغيير كود المصدر الخاص بي وسوف يلاحظ المحاكي التغييرات.إذا قمت بتثبيت
firebase
عالميًا ، يمكنك العثور على هذه الملفات بالانتقال إلىcd $(npm root -g)/firebase-tools/node_modules/@google-cloud
.
مرحبا يا اصدقاء -
يتعلق هذا الخطأ بقدرة محاكي وظائف السحابة القديمة على إعادة التحميل السريع. اعتبارًا من مايو 2019 لم نعد نستخدم google-cloud/functions-emulator
في firebase-tools
لذلك هذا يغير طبيعة الخطأ (أعتقد أن الطبيعة الجديدة هي أنه غير موجود).
أنا أقدر كل شخص يعمل بجد واكتشاف الحلول ، وأخيرًا يجب أن يسمح المحاكي الجديد الخاص بنا بإعادة تحميل أي لغات مترجمة بشكل سريع طالما أنك تقوم بتشغيل مراقبك (مثل tsc -w
) بشكل منفصل عن firebase serve
.
مع الواجهة الخلفية للمحاكي الجديد ، قمنا بحل هذه المشكلة والآن أصبحت جميع الحلول في هذا الموضوع قديمة ، لذلك سأغلق هذا الموضوع لتجنب الالتباس.
إذا كنت لا تزال ترى أي سلوك غير مقصود ، فيرجى فتح خطأ جديد.
شكرا لك مرة أخرى!
في حال انتهى الأمر بالآخرين هنا ، فإليك كيفية إعداده في functions/package.json
حتى يتم تشغيل tsc -w
بشكل منفصل عن firebase serve
:
{
"name": "functions",
"scripts": {
...
"serve": "tsc -w | firebase serve --only functions",
...
},
بمعنى آخر ، قم بتشغيل tsc -w
وقم بتوجيه الإخراج إلى firebase serve
. لا أعتقد أن الأنبوب يرسل في الواقع أي شيء ؛ أعتقد عندما يتغير المصدر، TSC إعادة تشغيل، و firebase serve
يراقب tsc
الصورة دير الإخراج ( lib
) لذلك الإعادة. لذا فإن الأنبوب موجود بالفعل لإدارة العملية.
التثبيت يعمل بشكل متزامن بالنسبة لي:
"build:watch": "tsc -w && cp src/*.json lib",
"serve": "firebase serve --only functions",
"start": "concurrently \"npm run build:watch\" \"npm run serve\"",
بالنسبة لي على [email protected]
لا تعمل إعادة التحميل الساخنة خارج الصندوق. لقد قمت بتعديل build
في functions/package.json
ليصبح tsc -w
كـ
{
"name": "functions",
"scripts": {
...
"build": "tsc -w",
...
},
سيؤدي هذا إلى إبقاء الساعة نشطة للوظائف عند تشغيل npm run build
، ثم من another terminal
قمت بتشغيل firebase emulators:start
.
@ rami-alloush هذا هو سير العمل الذي أستخدمه أيضًا. لا تقوم المحاكيات بإعادة إنشاء التعليمات البرمجية الخاصة بك ولكنها تقوم بإعادة تحميل الكود المدمج بشكل سريع.
نسخة أخرى
{
"build": "tsc -w &>/dev/null &",
"shell": "npm run build && firebase functions:shell",
}
يعمل هذا tsc
في الخلفية وهادئ ، لذلك لا تحتاج إلى محطة طرفية أخرى.
شكرا على التوبيخ! سألقي نظرة الأسبوع المقبل.
فعلا؟
تواجه نفس المشكلة مع الكتابة المطبوعة ، وإعادة التحميل السريع لا يعمل.
نفس ... إعادة التحميل السريع لا يعمل ، ومن الصعب جعل المحاكي يتعرف على التغييرات على الإطلاق ...
oluckyman حل المشكلة. لطيف جدا
https://github.com/firebase/firebase-tools/issues/758#issuecomment -620096052
firebase-tools
=> 8.7.0
بلدي الحل:
...
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc -w --preserveWatchOutput",
"serve": "tsc && firebase emulators:exec --ui --only functions,firestore 'yarn build'",
"shell": "yarn run build && firebase functions:shell",
"start": "yarn run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
...
تشغيل yarn serve
هذا يعمل بشكل جيد بالنسبة لي في الوقت الحالي على إصدار أدوات Firebase 8.8.1
باستخدام الكتابة المطبوعة. الشكر للنصائح الرجالmoifortgaryosafarmerabeisgoat: 1st_place_medal:
"scripts": {
...
...
"serve": "yarn build | firebase emulators:start --only functions",
"build": "./node_modules/.bin/tslint --project tsconfig.json && ./node_modules/.bin/tsc --watch --preserveWatchOutput"
},
التعليق الأكثر فائدة
في حال انتهى الأمر بالآخرين هنا ، فإليك كيفية إعداده في
functions/package.json
حتى يتم تشغيلtsc -w
بشكل منفصل عنfirebase serve
:بمعنى آخر ، قم بتشغيل
tsc -w
وقم بتوجيه الإخراج إلىfirebase serve
. لا أعتقد أن الأنبوب يرسل في الواقع أي شيء ؛ أعتقد عندما يتغير المصدر، TSC إعادة تشغيل، وfirebase serve
يراقبtsc
الصورة دير الإخراج (lib
) لذلك الإعادة. لذا فإن الأنبوب موجود بالفعل لإدارة العملية.