我最近遇到了一个我的同事在全球安装AWS CDK的情况:
npm install -g aws-cdk
我不怪任何这样做的人,因为官方的AWS文档及其讲习班正在促进以这种方式安装:https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html,
但是有一个捕获!ð«£
版本的不匹配
假设您最近加入了一个新项目,并且您没有注意到他们已经固定了特定版本的软件包版本。由于您一直在与AWS CDK合作,因此您在3个月前在全球安装了它。
您知道它已经安装在计算机上。因此,您盲目地运行cdk synth
This CDK CLI is not compatible with the CDK library used by your application. Please upgrade the CLI to the latest version. (Cloud assembly schema version mismatch: Maximum schema version supported is 6.0.0, but found 7.0.0)
ehm ...发生了什么事? ðρ
好吧,根据消息,您只需要更新npm install -g aws -cdk和解决问题。
AWS CDK社区发布得这么快(我认为每周发布一个版本)。这意味着如果您的最后一个CDK项目是在3个月前设立的,则您将包括12个版本,并且可能包括破坏更改。
此外,您全球安装的cdk
-版本可能与项目中的版本不符。因为如果您使用的是UNIX机器,系统将始终将全球安装的版本置于优先级(我不确定Windows)。
他们甚至在他们的troubleshooting page…上提到)
该项目的二进制位于node_modules
内部
作为回顾,将所有内容放入package.json
中,将作为依赖项下载。如果您使用CloudFlare工人,则将下载其CLI并将其放入node_modules/bin
。
当您想使用它时,可以在任何wrangler
命令之前运行npx
。那是运行./node_modules/bin
的别名。您还可以自定义package.json
内的script
-部分。例如
{
"scripts": {
"dev": "wrangler dev src/index.ts",
"deploy": "wrangler deploy --minify src/index.ts"
}
}
在这种情况下,它将始终从node_modules/bin
拿起CLI。
您可以使用CDK的情况 -
{
"scripts": {
"synth": "cdk synth",
"dev": "cdk watch",
"deploy": "cdk deploy"
}
}
如果您运行npm run synth
,它将从node_modules
中选择正确的CDK版本。
如果您想引导一个新的CDK项目,则应使用npx
引导它
npx cdk init app --language typescript
将在全球临时安装CDK CLI。
如果您查看其他Nodejs-(例如Wrangler,SST或Vite)等其他项目,则它们都不会要求您在全球上安装它。当然,有例外使用pnpm
结论
运行cdk
-cli时,您的操作系统正在尝试查看是否将CLI安装在bin
中的一个(全球)。
我一直在阅读和构建一些使用React,Astro,Vuejs,Svelte和Cloudflare工人的Nodejs/typeScript应用程序,它们都不要求您在全球安装某些东西。我不知道为什么AWS CDK会推广这一点,因为它会造成更多麻烦,并猜测所有问题都在全球删除aws-cdk
并重新安装
https://github.com/aws/aws-cdk/issues/11494
https://stackoverflow.com/questions/66565550/how-to-solve-cdk-cli-version-mismatch
https://github.com/aws/aws-cdk/issues/14738
如果您的终端说找不到它,那是一个谎言,因为您需要使用npx
将其指向node_modules
。它只是运行./node_modules/bin/cdk
的别名。
通常,您不应在全球安装NPM软件包,因为它可能在您的node_modules
中使用该项目的正确版本。
如果您找到了一个页面,它说要运行npm install -g
是一个陷阱。