在与AWS CDK Toolkit交互的shell脚本中,我经常看到npx -- cdk
和npx -- aws-cdk
。显然,有两个npm包cdk
和aws-cdk
。这两者的区别是什么?
此外,在与这两个包交互时,我的观察结果令人困惑。
npx -- cdk --version # output: Need to install the following packages: cdk@2.32.1
npx -- aws-cdk --version # output: Need to install the following packages: aws-cdk@2.32.1
由于两个包都不是本地安装的,所以两个命令都希望安装相应的包,很好。
npm install -g cdk@2.32.0
npx -- cdk --version # output: 2.32.0 (build 00e0c2d)
npx -- aws-cdk --version # output: Need to install the following packages: aws-cdk@2.32.1
在本地安装cdk
后,npx -- cdk
执行本地包,npx -- aws-cdk
仍然要安装aws-cdk
,也很好。
npm install -g aws-cdk@2.32.0
npx -- cdk --version # output: 2.32.0 (build 00e0c2d)
npx -- aws-cdk --version # output: Need to install the following packages: aws-cdk@2.32.1
现在它变得令人困惑。虽然我们在本地安装了aws-cdk
而不是cdk
,但npx -- cdk
仍然执行一些本地包,npx -- aws-cdk
仍然想安装aws-cdk
。为什么?
aws-cdk
包提供了cdk
命令,这是AWS云开发工具包的入口点。
当你在node_modules/.bin
中安装aws-cdk
包时,安装了cdk
命令。这允许在package.json
脚本中使用cdk
命令。
cdk
命令也是唯一由aw -cdk添加到.bin
的命令。
根据所有的文档,为了从CLI与AWS CDK交互,应该使用cdk
命令。即使包的名称是aws-cdk
。
现在,npx
提供了一种方便的方式来从包中运行命令,而不管它是否已经安装。
当包名与其提供的命令名匹配时,这以最直接的方式工作。这不是aws-cdk
的情况。为了解决这个问题,并允许任何人运行npx cdk ...
, AWS CDK决定发布一个名为cdk
的包。这是一个围绕aws-cdk
包提供的cdk
命令的小包装器。