我还尝试将 aws-sdk 与 angular 2(生成的 angular cli)项目一起使用。我无法在浏览器中正确加载库。
根据角度文档,我正在导入 aws 库 (https://github.com/angular/angular-cli/wiki/3rd-party-libs#adding-underscore-library-to-your-project)。
看起来像这样:
编辑 package.json 以将 JS 文件从 NPM 加载到本地系统
{
...
"dependencies": {
"aws-sdk": "git://github.com/aws/aws-sdk-js.git#support/typescript"
},
...
}
编辑 angluar-cli-build.js 以在构建过程中将 aws JS 文件复制到 dist 的 vendor 文件夹
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
module.exports = function(defaults) {
return new Angular2App(defaults, {
vendorNpmFiles: [
...
'aws-sdk/**/*.js'
]
});
};
在 system-config.ts 中编辑映射部分以将命名空间映射到目标文件
const map: any = {
'aws-sdk': 'vendor/aws-sdk/dist/aws-sdk.js'
};
在我的打字稿文件中,我尝试导入 AWS 库。
...
import * as AWS from 'aws-sdk';
...
@Injectable()
export class MyService {
public myMethod() {
var s3 = new AWS.S3();
...
...
...
这对于 typescript 编译器来说没问题,源文件也在浏览器中加载,但会导致“S3 不是构造函数”之类的错误。
如果你调试这些东西,你会看到 AWS 的东西初始化得很好,但是在执行“import * as AWS from 'aws-sdk'”之后,var AWS 会被一些疯狂的对象初始化。
因此我的解决方案是:
编辑 package.json 以将 JS 文件从 NPM 加载到本地系统
{
...
"dependencies": {
"aws-sdk": "git://github.com/aws/aws-sdk-js.git#support/typescript"
},
...
}
编辑 angluar-cli-build.js 以在构建过程中将 aws JS 文件复制到 dist 的 vendor 文件夹
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
module.exports = function(defaults) {
return new Angular2App(defaults, {
vendorNpmFiles: [
...
'aws-sdk/**/*.js'
]
});
};
将脚本的导入添加到 index.html
<script src="/vendor/aws-sdk/dist/aws-sdk.js" type="text/javascript"></script>
最终在您的服务中使用它
// make AWS as 'any' available for typescript compiler
declare var AWS:any;
@Injectable()
export class MyService {
public myMethod() {
var s3= new AWS.S3();
...
...
...
这是一种混合方式。使用 Angluar 2 构建过程,使用 NPM 包管理但不使用 AWS typescript 类型定义。