进一步概述是在 NodeJS 和 Monorepo(基于 Lerna)的背景下进行的。
我有 AWS 堆栈,其中通过 AWS CloudFormation 部署了多个 AWS Lambda。一些 lambda 很简单(单个小模块)并且可以内联:
https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Code.html#static-from-wbr-inlinecode https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Code.html#static-from-wbr-inlinecode
const someLambda = new Function(this, 'some-lambda', {
code: Code.fromInline(fs.readFileSync(require.resolve(<relative path to lambda module>), 'utf-8')),
handler: 'index.handler',
runtime: Runtime.NODEJS_12_X
});
有些没有依赖,打包如下:
const someLambda = new Function(this, 'some-lambda', {
code: Code.fromAsset(<relative path to folder with lambda>),
handler: 'index.handler',
runtime: Runtime.NODEJS_12_X
});
但据我了解,对于具有依赖性的相对较大的 lambda,我们唯一的打包方法(由 API 提出)是@aws-cdk/aws-lambda-nodejs
:
import * as lambdaNJS from "@aws-cdk/aws-lambda-nodejs";
export function createNodeJSFunction(
scope: cdk.Construct, id: string, nodejsFunctionProps: Partial<NodejsFunctionProps>
) {
const params: NodejsFunctionProps = Object.assign({
parcelEnvironment: { NODE_ENV: 'production' },
}, nodejsFunctionProps);
return new lambdaNJS.NodejsFunction(scope, id, params);
}
对于独立包,它运行良好,但对于 monorepo,它只是挂起synth
堆栈的。
我只是在寻找替代方案,因为我相信捆绑不是一个好主意(parcel
)是来源。