如何在我的 Aurelia 项目中本地使用 AWS SDK

How to use AWS SDK locally in my Aurelia Project

我想在我的 Aurelia 项目中本地使用来自 AWS-SDK 的 SQS 队列,但我遇到了问题。

如果我在 Index.ejs 中使用亚马逊 AWS-SDK link 的 live URL 那么它工作正常但是如果给本地脚本路径 link 然后面临错误。

我尝试了很多技术但都失败了。在 Live Link 中工作正常并且没有错误但是在本地路径 "Config" 中出现未定义错误。

实时路径

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.505.0.min.js"></script>

本地路径

 <script src="./src/assets/aws-sdk-2.505.0.min.js"></script> 

在 TS 文件上我声明了这个

const AWS = (window as any).AWS;

  AWS.config.credentials = {
      "accessKeyId": "xxxxxxx",
      "secretAccessKey": "xxxxxx",
      "region": "xxxx"
    };
    AWS.config.region = "xxxxxx";
    AWS.config.version = "xxxxx";
    this.queueURL = "xxxxxxx";
 }

我可以通过 NPM 安装来实现,但这会增加项目的大小,这就是我想在项目中本地使用的原因

如果捆绑包的大小是您的主要问题,aws-sdk 提供了仅包含您需要的服务的选项。 aws-sdk README 中对此有一些解释,您可以在其中对导入的 npm 包执行以下操作:

// option 1. import entire SDK
// this is big, indeed
import * as aws from 'aws-sdk';

// option 2a. import AWS object without services
// that's pretty basic
import * as aws from 'aws-sdk/global';

// option 2b. import individual service
// this might be just what you need, combined with option 2a.
import * as s3 from 'aws-sdk/clients/s3';

重要提示:我对导入做了一些改动,而不是 README 中的说明。仅仅是因为 TS 编译错误导致 aws-sdk 模块没有默认导出。

根据您的原始示例,可以显着减小输出包大小的完整示例为:

// only include the 'global' (core) and 's3' service
import * as aws from 'aws-sdk/global';
import * as s3 from 'aws-sdk/clients/s3';

export class App {
  public attached() {
    aws.config.credentials = {
      "accessKeyId": "xxxxxxx",
      "secretAccessKey": "xxxxxx"
    };

    aws.config.region = "xxxxxx";
    aws.config.apiVersion = "xxxxx";
  }
}

并非吹毛求疵,但您示例中的某些选项根本不起作用 - 因此这些已被删除。

不过,如果这还不够令人信服,您 可以 尝试恢复到将 CDN 包含在 index.ejs<head> 标记中并声明它在 class:

之上全局使用 var
var AWS = require('aws-sdk');

...但我不会那样做,我个人更喜欢更大的捆绑包而不是额外的远程 http 调用。