Zoeken op website

aws lambda - TypeScript serverless-esbuild uitsluiten "*" (volledige node_modules) lijkt niet te werken


Ik gebruik de serverless-layers plugin in Serverless Framework, dus ik wil de node_modules map uitsluiten van esbuild.

Volgens het officiële document kan ik "*" instellen bij de exclude-optie van serverless-esbuild om de volledige node_modules directory uit te sluiten.

Een array van afhankelijkheden om uit de Lambda uit te sluiten. Dit wordt doorgegeven aan de externe optie van esbuild. Stel in op * om het verpakken van node_modules uit te schakelen ['aws-sdk']

Het lijkt er echter niet op te werken als ik het instel in serverless.ts.
Hier waren mijn pogingen:

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

Aan de andere kant werkt het specificeren van elke bibliotheek zo goed:

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

Is er iets dat ik gemist heb?

Dank je.

Antwoord #1

esbuild neemt automatisch node_modules op. Als je dat niet wilt opnemen, kun je de esbuild-node-externals plugin toevoegen.

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