打字新手。我正在做一个cdk项目。我有一个类(堆栈)正在变得越来越庞大。所以我想把一些方法卸载到其他文件中,以保持它的可管理性。
这是可行的:
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda'; // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';
const TAG = "sn-v1-";
export class SnProdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Lambda: Get stuff from Sigfox API
// ---------------------------------
const testLambda = new lambda_nodejs.NodejsFunction(this, 'sigfox-get', {
runtime: lambda.Runtime.NODEJS_12_X,
entry: 'lambda/sn-prod/sigfox-get.js',
handler: 'handler',
functionName: TAG + 'sigfox-get',
description: 'Get all devices from Sigfox API.',
memorySize: 256,
timeout: cdk.Duration.seconds(360)
});
}
}但我想做这样的事情:
// class file
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda'; // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';
import { genSigfoxGetLambda } from './sn-prod/api-gw';
export class SnProdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const testLambda = this.genSigfoxGetLambda;
}
}
// method file
import { SnProdStack } from '../sn-prod-stack';
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda'; // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';
const TAG = "sn-v1-";
export function genSigfoxGetLambda(this: SnProdStack) {
const testLambda = new lambda_nodejs.NodejsFunction(this, 'sigfox-get', {
runtime: lambda.Runtime.NODEJS_12_X,
entry: 'lambda/sn-prod/sigfox-get.js',
handler: 'handler',
functionName: TAG + 'sigfox-get',
description: 'Get all devices from Sigfox API.',
memorySize: 256,
timeout: cdk.Duration.seconds(360)
});
return testLambda;
}这是一个极小的可重现的例子。整个代码是巨大的,每件事都有10到20个。我的计划是对我需要进行的每种类型的绑定使用工厂方法,并传入一个options对象。现在,问题是我写的代码什么也不做。
发布于 2021-02-25 11:34:52
要导出函数,我们需要添加export指令,并使其可用于其当前文件夹之外的其他文件。
您已经在使用export关键字,所以现在需要做的就是在每个文件夹中放置一个index.ts文件。
例如,如果我们有这样的目录结构...
.
├── main.ts
└── module
├── a.ts
└── index.ts...and我们希望从a.ts中导出一个函数并在main.ts中使用它,然后该函数必须使用export关键字,并且index.ts必须从module/中导出它。
// a.ts
export const foo = () => { return 'bar'; };// index.ts
export * from './a';然后,我们可以导入函数。
// main.ts
import { foo } from './module';发布于 2021-02-26 17:30:46
从你的主堆栈中尝试类似这样的东西
import cdk = require("@aws-cdk/core");
import { MyFirstStack } from "../lib/my-first-stack";
import { StepFunctionStack } from "../lib/step-function-stack";
const app = new cdk.App();
const myFirstStack = new MyFirstStack(app, "stackName");
const stepFunctionStack = new StepFunctionStack(app, "stepFunctionStackName");
// If you need to add a dependency on one of your stacks
myFirstStack.addDependency(stepFunctionStack);然后,您可以从上面的位置导入其他堆栈,在我的示例中是它的back1文件夹和lib文件夹。
下面是其中一个堆栈的样子
import { Construct, Stack, StackProps } from "@aws-cdk/core";
export class MyFirstStack extends Stack {
constructor(scope: App, id: string, props?: StackProps) {
const properties: StackProps = {
env: {
region: "us-east-1",
account: <account>,
},
};
super(scope, id, properties);
const lambda = create_lambda()
create_lambda(){
// code to create lambda etc.
}https://stackoverflow.com/questions/66359911
复制相似问题