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);
});