如何使用aws cdk synth / deploy显示堆栈跟踪

时间:2020-01-29 14:29:31

标签: aws-cdk

所以我是cdk和typecipt初学者。 成功部署了两个堆栈后,cdk synth没有收到以下错误:Unexpected token export. Subprocess exited with error 1

我对解决此问题的兴趣不大,对堆栈跟踪的位置或有关该错误的任何其他信息更感兴趣。进行--trace-v并不能真正提供很多有用的信息。

有什么想法可以获取这些信息吗??

3 个答案:

答案 0 :(得分:1)

我认为这个问题是因为 npx 用于在引擎盖下运行 ts-node,而 npx 似乎按照 here 的描述吞噬了堆栈。

一种解决方法是添加一个 try/catch 块,例如

try {
  main()
} catch (e) {
  console.log(e)
  throw e
}

答案 1 :(得分:0)

幕后发生的事情是CDK转换为堆栈并转换为cloudformation模板并将其保存到S3-运行cdk bootstrap(更多信息here)时创建的S3存储桶。

运行cdk synth时,CDK尝试将代码(在您的情况下为打字稿)转换为cloudformation堆栈。此错误:Unexpected token export.可能是由于异步调用没有结束,此外,此错误意味着您的代码无法转移到cloudformation堆栈中,但这并不意味着您的“ cdk”代码已损坏。

运行cdk deploy cdk时,将传输的模板与S3模板进行比较。并仅部署差异。

更新

昨天DevopsStart发布了有关在vs代码中调试cdk的新文章。 这可能会有所帮助。

CDK Debugging in VSCode.

答案 2 :(得分:0)

所以我认为这是由于某些使用ESM导出语法的JavaScript(您的JavaScript或可能在导入的模块中)引起的。

这一开始让我有些困惑,因为我在整个项目中都使用了导入/导出语法,但是该项目是用打字稿编写的,这意味着它在执行之前就已被编译为javascript,并且很可能所有这些ESM语句以CJS语法发出。但是,我也使用lodash-es,因为我更喜欢导入语法。该模块在内部使用 javascript 中的ESM语法,因此,这由节点运行时直接解释。现代版本的节点可以使用ESM语法,但是只能在我所没有的特定软件包配置下使用。我的解决方案只是删除有问题的程序包,但是您可以朝另一个方向进行操作,并配置package.json以便在节点中启用ESM。这可能还需要更新您的tsconfig.json,以使打字稿编译器也发出ESM。

https://nodejs.org/api/esm.html