Website-Suche

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