TypeScript serverless-esbuild exclude "*"(完整node_modules)似乎不起作用



我在serverless Framework中使用无服务器层插件,所以我想从esbuild中排除node_modules目录。

根据官方文件,我可以设置"到serverless esbuild的exclude选项,以排除完整的nodemodule目录。

要从Lambda中排除的依赖项的数组。这将传递给esbuild外部选项。设置为*以禁用打包node_modules['aws-sdk']

但是,如果我在serverless.ts中设置它,它似乎不起作用
这是我的试验:

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

另一方面,指定每个库的工作原理如下:

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

我错过了什么吗?

谢谢。

esbuild自动包含node_modules。如果您不想包含它,可以添加esbuildnodeexternals插件。

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