aws lambda - TypeScript serverless-esbuild exclude "*" (gesamtes node_modules) scheint nicht zu funktionieren
Ich verwende das serverless-layers Plugin im Serverless Framework, daher möchte ich das Verzeichnis node_modules von esbuild ausschließen.
Laut dem offiziellen Dokument kann ich "*" in der Ausschlussoption von serverless-esbuild einstellen, um das gesamte Verzeichnis node_modules auszuschließen.
Ein Array von Abhängigkeiten, die von der Lambda ausgeschlossen werden sollen. Dies wird an die externe Option von esbuild übergeben. Auf * setzen, um das Verpacken von node_modules zu deaktivieren ['aws-sdk']
Es scheint jedoch nicht zu funktionieren, wenn ich es in serverless.ts einstelle.
Hier waren meine Versuche:
exclude: ['*']
exclude: '*'
exclude: ['./node_modules/*']
Andererseits funktioniert es gut, jede Bibliothek so anzugeben:
exclude: ['aws-sdk', 'mysql2', '@middy']
Habe ich etwas verpasst?
Danke.
Antwort #1
esbuild schließt automatisch node_modules ein. Wenn Sie nicht möchten, dass dies eingeschlossen wird, können Sie das Plugin esbuild-node-externals hinzufügen.
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);
});