如何在我的 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 调用。
我想在我的 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 AWS = require('aws-sdk');
...但我不会那样做,我个人更喜欢更大的捆绑包而不是额外的远程 http 调用。