Because the functions directory of your Firebase project already contains all dependencies that would be available in your server-side environment, you may be tempted to write your PoC/draft code snippets inside functions/ itself (maybe to avoid having to install/set-up a separate set-up just for PoCs, and also to automatically keep the PoC code in sync with any dependency/version changes made your main project) - possibly under clear-cut subdirectories that would be excluded from the deployment (e.g. my.test.js/, to automatically match an existing exclude like *.test.js).
One downside of this approach is that, every time you make a change in your PoC code, it will also reload the actual functions code in the emulator - because the functions change-detector is watching all subdirs of functions/. It seems that .gitignore, .gcloudignore etc are not honored by the emulator's change-detector process; so even if you have your PoC folder excluded, the emulator problem persists.
To solve this, you can patch lib/emulator/functionsEmulator.js from the firebase-tools installation directory (usu. {global NodeJS installation/lib dir}/node_modules/firebase-tools/) to add your custom dir (or a more generic matching pattern) to the watcher's excludes:
class FunctionsEmulator {
...
async connect() {
...
for (const backend of this.args.emulatableBackends) {
this.logger.logLabeled("BULLET", "functions", `Watching "${backend.functionsDir}" for Cloud Functions...`);
const watcher = chokidar.watch(backend.functionsDir, {
// this appears around line 228, on Emulator v11.1.0
ignored: [
/.+?[\\\/]node_modules[\\\/].+?/,
/(^|[\/\\])\../,
/.+\.log/,
// new entry covering custom dir
/.+\.test\.js/,
],
persistent: true,
});
No comments:
Post a Comment