рдлрд╛рдпрд░рдмреЗрд╕ - рд╡рд┐рд╕рд░реНрдЬрди
3.18.4
рдЙрдмрдВрдЯреВ 18.04 x64
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдкреГрд╖реНрда рдХреЗрд╡рд▓ рдлрд╛рдпрд░рдмреЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд╛рдж рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
> 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
рдореИрдВрдиреЗ рдПрдХ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдлрд╛рдпрд░рдмреЗрд╕ рдЗрдирд┐рдЯ) рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдорд╢реАрди (рдбреЗрдмрд┐рдпрди рд╕реНрдЯреНрд░реЗрдЪ) рдкрд░ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣реА рдмрд╛рдд рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреА рд╣реБрдИ рд╣реИред рдореИрдВрдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рдпрджрд┐ рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд░реЛрдд рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдЧрд░реНрдо рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред
рдореИрдВрдиреЗ рдореИрдХ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдлрд╛рдпрд░рдмреЗрд╕ рдЗрдирд┐рдЯ) рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдпрд╣ рдореИрдХ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдкрд░ред
рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдФрд░ рдореБрдЭреЗ рдЧрд░реНрдо рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ firebase serve
рдХреЗрд╡рд▓ index.js
рдХреЛ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдореЗрдВ `firebase.json рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИред
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдореИрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЖрдЙрдЯ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ index.js
) рдореБрдЭреЗ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ functions/lib/index.js
рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмреЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛрдб 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 рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ / 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 рджреЗрдЦрдиреЗ рдкрд░, рдЖрдкрдХреЛ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд▓реМрдЯреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ firebase serve
рдХрдорд╛рдВрдб рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реИред
рдпрджрд┐ рдЖрдк functions/lib
рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ "source": "functions/lib"
firebase.json
рдХреЛрдб рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдирд┐рдореНрди рд▓реАрд╡рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП touch lib/injex.js
рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, src/index.ts
рдЯреНрд░рд┐рдЧрд░ рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛, рд▓реЗрдХрд┐рди src/handlers/helloworld.ts
рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ @laurenzlong (рдлрд╛рдпрд░рдмреЗрд╕ рдЗрдирд┐рдЯ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛) рдиреАрдЪреЗ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдЕрднреА рднреА 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 рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЖрдк рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ
https://github.com/safarmer/firebase-functions
рд░реЗрдкреНрд░реЛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ рджреЗрдЦреВрдВрдЧрд╛ред
рдпрд╣рд╛рдБ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ :)
рдореЗрд░реЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ firebase serve
рдЕрдм рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ ...
рдореИрдВрдиреЗ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ @safarmer рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдерд╛ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ firebase serve
рдХрд╛рд░реНрдп "рд╕реНрд░реЛрдд" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИ рдФрд░ firebase.json
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреВрд░реНрд╡-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛рдПрдЧрд╛ред
рдпрд╣ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред : рдбреА
рдЖрд╣ рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдкреВрд░реНрд╡-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ tslint
рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдирд╛ рд╣реЛрдЧрд╛ :)
@IchordeDionysos рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдРрд╕рд╛ рд╣реА рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ, рдмрд╛рдХреА рдХреЛрдб рдХреЛ рдирд╣реАрдВред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдлрд╛рдпрд░рдмреЗрд╕ рдЯреАрдо рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓ рд╕рдХрддреА рд╣реИред
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреМрдХреАрджрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ @laurenzlong рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж @ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡)
рд╡рд┐рд╕реНрддреГрдд repro @safarmer рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреАред рдореИрдВ рдореБрджреНрджреЗ рдХреА рдЬрдбрд╝ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдФрд░ https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/207 рджрд╛рдпрд░ рдХрд┐рдпрд╛
рдпрд╣рд╛рдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрд░реЛрдд рдпрд╛ Linuxbrew рд╕реЗ watchman
рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рди рдХрд┐ npm рдкреИрдХреЗрдЬ
@laurenzlong I рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ index.ts рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ tsc рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБред рддрдм рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?
рддреНрд╡рд░рд┐рдд рдиреЛрдЯ: рдХрднреА-рдХрднреА info: Worker for helloWorld closed due to file changes.
ts рдкрд░ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди lib isnt рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп рдмрд╛рд░ рдЗрд╕рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ tsc рд╣рдореЗрд╢рд╛ рдлрдВрдХреНрд╢рди рдХреЛ рд░реАрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
@tstirrat рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рдЪреМрдХреАрджрд╛рд░ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рд▓рдЧрддрд╛
рдЪреМрдХреАрджрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВ?
рдЪреМрдХреАрджрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдп рдЧрд░реНрдо рдирд╣реАрдВ рд╣реИ
рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВред рдореБрдЭреЗ рд╣рд░ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рд╕реЗрд╡рд╛, рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдмреБрдз рдкрд░, 21 рдирд╡рдВрдмрд░, 2018 рдХреЛ рджреЛрдкрд╣рд░ 1:01 рдмрдЬреЗ рдХреЗрд╡рд┐рди рдЬрд┐рдпрд╛рди рд╕реВрдЪрдирд╛рдПрдБ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдЪреМрдХреАрджрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВ?
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/firebase/firebase-tools/issues/758#issuecomment-44040010196 ,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AHgHbeA_iECsIMH3V9P7NQypsmudF_IQks5uxInggaJpZM4Tta12
ред
рдЗрд╕ рдХреА рдХрдИ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рдХрд╛рд░рдг рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЕрднреА рднреА рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЕрднреА рднреА 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ред рдореИрдВ рд╕реБрдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд░реНрдж рдмрд┐рдВрджреБ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рдмрдЧ рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ: 123266946ред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред PRs рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рдореБрдЭреЗ рднреА рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВ рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╣рд░ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдорд╛рдзрд╛рди рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
@ondratra рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рд╡рд░реНрддрдорд╛рди CLI рд╕рдВрд╕реНрдХрд░рдг, OS рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ npm
(рдЙрджрд╛ yarn
) рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
@bkendall рдореИрдВ рдбреЗрдмрд┐рдпрди (рд╕рд┐рдб) рдкрд░ рд╣реВрдВред рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рджреЗрдЦрд╛ рдФрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ tsc -w
+ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ firebase --only functions serve
ред package.json
рдореЗрдВ рд╕рд╣реА рдкрде рд╣реИ
рдЬреЗ рдПрд╕ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ {"main": "dist/src/index.js", ...}
ред рдореИрдВрдиреЗ tsc-watch
рдкреИрдХреЗрдЬ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ touch
рдЗрдВрдбреЗрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред
$ firebase --version
6.3.1
рджреЛрд╕реНрддреЛрдВ, рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдореБрджреНрджрд╛ cloud-functions-emulator
ред рдпрд╣ fs
рд╡реЙрдЪ рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдПрдХ рдЬреНрдЮрд╛рдд рдореБрджреНрджрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП firebase-tools.
рд╕реЗ рд╕реАрдзреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдЙрдореНрдореАрдж рди рдХрд░реЗрдВ
@ribizli thx, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмреЗрд╕ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ?
@ondratra рдХрд╛рдВрдЯрд╛ @google-cloud/functions-emulator
, node-watch
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЬреБрдбрд╝реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, npm link
рдкреИрдХреЗрдЬред firebase-tools
рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ @google-cloud/functions-emulator
, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЕрдВрдд рдореЗрдВ: рдЖрдк https://github.com/GoogleCloudPlatform/cloud-functions-emulator рдкрд░ PR рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗред (рдореИрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛)
рдлрд╝рдВрдХреНрд╢рди -> index.js рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдСрдЯреЛрд░рди "рдлрд╛рдпрд░рдмреЗрд╕ рд╕рд░реНрд╡рд┐рд╕" рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
Https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196 рд╕реЗ рд╕рд╛рднрд╛рд░ (рдзрдиреНрдпрд╡рд╛рдж @dirkjot):
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдпрд╣рд╛рдБ рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдФрд░ @ribizli рдХреЗ рдЫреЛрдЯреЗ рдЯрд╛рдЗрдкреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕:
- рдЕрдкрдиреЗ
@google-cloud
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ, рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЗnode_modules
(рдлрд╛рдпрд░рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)cd functions-emulator
- рдиреЛрдб-рд╡реЙрдЪ рдЬреЛрдбрд╝реЗрдВ:
npm install --save node-watch
- рдлрд╝рд╛рдЗрд▓
src/supervisor/worker.js
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ- рд▓рд╛рдЗрди 180 рдХреЗ рдЖрд╕рдкрд╛рд╕, рдЖрдкрдХреЛ
fs.watch(localdir, {
рдорд┐рд▓реЗрдВрдЧреЗред рдЗрд╕реЗrequire('node-watch')(localdir, {
рдмрджрд▓реЗрдВредрдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдлрд╛рдпрд░рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ
tsc -w
рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ (npm run build
рдХрд╛ рдШрдбрд╝реА рд╕рдВрд╕реНрдХрд░рдг)ред рдЕрдм рдореИрдВ рдЕрдкрдирд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдПрдореБрд▓реЗрдЯрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛редрдпрджрд┐ рдЖрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ
firebase
рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛcd $(npm root -g)/firebase-tools/node_modules/@google-cloud
рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдХреЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рджреЛрд╕реНрддреЛрдВ -
рдпрд╣ рдмрдЧ рд▓реАрдЧреЗрд╕реА рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдореБрд▓реЗрдЯрд░ рдХреА рд╣реЙрдЯ-рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдордИ '19 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдм рд╣рдо 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
's рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдпрд░ ( 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
рднрд╛рдЧрд╛ред
@ рд░рдореА- alloush рд╣реИ рдХрд┐ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореИрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдореБрд▓реЗрдЯрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡реЗ рдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг
{
"build": "tsc -w &>/dev/null &",
"shell": "npm run build && firebase functions:shell",
}
рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рд╢рд╛рдВрдд рдореЗрдВ tsc
рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд░реЗрдкреНрд░реЛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ рджреЗрдЦреВрдВрдЧрд╛ред
рдХреНрдпрд╛ рдпрд╣?
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣реЙрдЯ-рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╡рд╣реА ... рд╣реЙрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХреЗрдВ ...
@oluckyman рдорд╕рд▓рд╛ рд╣рд▓ред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛
https://github.com/firebase/firebase-tools/issues/758#issuecomment -61895252
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
рдЪрд▓рд╛рдПрдБ
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмреИрд╕-рдЯреВрд▓реНрд╕ рд╕рдВрд╕реНрдХрд░рдг 8.8.1
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИред рдЯрд┐рдкреНрд╕ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдереИрдВрдХреНрдпреВ @moifort @garyo @safarmer @abeisgoat : 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
's рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдпрд░ (lib
) рджреЗрдЦ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреБрдирдГ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред рддреЛ рдкрд╛рдЗрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╣реА рд╣реИред