aws lambda - TypeScript serverless-esbuild εξαιρεί "*" (ολόκληρο node_modules) δεν φαίνεται να λειτουργεί


Χρησιμοποιώ το plugin serverless-layers στο Serverless Framework, οπότε θα ήθελα να εξαιρέσω τον κατάλογο node_modules από το esbuild.

Σύμφωνα με το επίσημο έγγραφο, μπορώ να θέσω το "*" στην επιλογή exclude του serverless-esbuild για να αποκλείσω ολόκληρο τον κατάλογο node_modules.

Ένας πίνακας εξαρτήσεων που θα εξαιρεθούν από το Lambda. Αυτό περνάει στην εξωτερική επιλογή του esbuild. Ορισμός σε * για απενεργοποίηση της συσκευασίας node_modules ['aws-sdk']

Ωστόσο, φαίνεται να μην λειτουργεί αν το ορίσω στο serverless.ts.
Εδώ ήταν οι δοκιμές μου:

exclude: ['*']
exclude: '*'
exclude: ['./node_modules/*']

Από την άλλη πλευρά, η καθορισμός κάθε βιβλιοθήκης λειτουργεί καλά έτσι:

exclude: ['aws-sdk', 'mysql2', '@middy']

Υπάρχει κάτι που μου ξέφυγε;

Ευχαριστώ.

Απάντηση #1

Το esbuild περιλαμβάνει αυτόματα τα node_modules. Αν δεν θέλετε να συμπεριληφθούν, μπορείτε να προσθέσετε το πρόσθετο esbuild-node-externals.

const { nodeExternalsPlugin } = require("esbuild-node-externals");

esbuild
    .build({
      entryPoints: [entryFile],
      outfile: outFile,
      minify: true,
      bundle: true,
      target: TARGET,
      plugins: [copyPlugin, nodeExternalsPlugin()],
      sourcemap: true,
      platform: "node",
      define,
      external: ["pg", "sqlite3", "tedious", "pg-hstore"],
    })
    .then((r) => {
      console.log(`Build ${entryFile} to ${outFile} succeeded.`);
    })
    .catch((e) => {
      console.log("Error building:", e.message);
      process.exit(1);
    });