2016-05-05 24 views
12

Tôi đang cố gắng tải ứng dụng Angular2 của mình để cho phép tôi đọc và ghi vào thùng s3 trên tài khoản AWS của mình.Sử dụng aws-sdk với angular2

Trong AngularJS (và hầu hết mọi thứ khác), chúng tôi đã sử dụng aws-sdk vì vậy tôi giả định rằng điều tương tự cũng có thể được thực hiện cho Angular2.

Vấn đề tôi đang gặp là nhận được aws-sdk để nhập chính xác vào dự án của tôi.

Tôi đã cài đặt nó thông qua npm install aws-sdk

Tôi đã cố gắng để import nó bằng lệnh

import * as AWS from 'aws-sdk/dist/aws-sdk', 
import * as AWS from 'aws-sdk', 
import AWS from 'aws-sdk' 
import AWS from 'aws-sdk/dist/aws-sdk' 

nhưng nó vẫn không ngừng nói với tôi rằng các mô-đun không tồn tại.

Dự án của tôi dựa trên hạt giống góc 2.

Tôi cũng đã cố cài đặt tệp đánh máy từ DefinitleyTyped bằng cách sử dụng typings install aws-sdk nhưng cũng không thành công.

Tôi không chắc chắn liệu mình có cần thêm bất kỳ thứ gì khác để nó hoạt động hay không.

Ngoài ra, tôi đang sử dụng các loại

Cảm ơn bạn đã dành thời gian và hỗ trợ.

+1

Bản đánh máy chính thức từ AWS sắp ra mắt ... hy vọng ... https://github.com/aws/aws-sdk-js/issues/994 –

Trả lời

6

Từ các tài liệu AWS-sdk trên NPM (https://www.npmjs.com/package/aws-sdk)

sử dụng cho phép nguyên cảo

Các AWS SDK cho JavaScript bó nguyên cảo định nghĩa các tệp để sử dụng trong các dự án TypeScript và để hỗ trợ các công cụ có thể đọc các tệp .d.ts. Mục tiêu của chúng tôi là giữ cho các tệp định nghĩa TypeScript này được cập nhật với mỗi bản phát hành cho bất kỳ api công khai nào.

Pre-kiện tiên quyết Trước khi bạn có thể bắt đầu sử dụng những định nghĩa nguyên cảo với dự án của bạn, bạn cần phải chắc chắn rằng dự án của bạn đáp ứng một vài trong số các yêu cầu:

Sử dụng nguyên cảo v2.x
Bao gồm các định nghĩa TypeScript cho nút. Bạn có thể sử dụng NPM để cài đặt này bằng cách gõ như sau vào cửa sổ terminal:

npm install --save-dev @types/node 

bạn tsconfig.json hoặc jsconfig.json bao gồm 'dom' và 'es2015.promise' dưới compilerOptions.lib. Xem tsconfig.json để biết ví dụ.

Trong Browser
Để sử dụng các tập tin định nghĩa nguyên cảo với đối tượng AWS toàn cầu trong một dự án front-end, thêm dòng sau vào phía trên cùng của tập tin typescript JavaScript của bạn hoặc nơi bạn có ý định sử dụng nó hoặc thêm nó vào tệp tsconfig 'types' hoặc Declarations của bạn:

/// <reference types="aws-sdk" /> 

Điều này sẽ hỗ trợ cho đối tượng AWS toàn cầu.

trả lời Previous
Tôi thấy rằng nếu tôi thêm

{ src: 'aws-sdk/dist/aws-sdk', inject: 'libs' } 

đến additional_deps trong project.config.ts (nếu bạn sử dụng angular2 hạt) hoặc chỉ cần thêm

<script src="/node_modules/aws-sdk/dist/aws-sdk.js"></script> 

vào index.html Sau đó, tôi có thể thêm

declare const AWS: any; 

Đối với bất kỳ tệp .ts nào tôi cần, tôi có quyền truy cập đối tượng AWS. Tuy nhiên, không chắc chắn đây có phải là giải pháp tốt hay không.

+0

tôi đang sử dụng angular-cli, tôi không thể tìm thấy tệp project.config.ts –

+0

nơi tôi có thể tìm thấy "tệp JavaScript đầu của bạn "... Tôi không có, bởi vì, tôi đang sử dụng TypeScript ... – genuinefafa

+0

Có thể đặt nó trong một tập tin kiểu chữ cũng có thể hoạt động tốt. –

2

Nhưng nó vẫn cho tôi biết rằng mô-đun không tồn tại.

TypeScript không biết về mô-đun và có vẻ như định nghĩa tốt không tồn tại. Quick Fix:

declare module 'aws-sdk' { 
    var foo:any; 
    export = foo; 
} 

Sau đó, bạn có thể làm

import * as AWS from 'aws-sdk', 
+0

Đối với sự hiểu biết của tôi, điều đó về cơ bản chỉ là việc đánh lừa các bản thảo rằng có một tập tin đánh máy aws-sdk để nhập khẩu (hoặc đúng hơn là bắt đầu tạo một tập tin đánh máy, nó sẽ không có bất cứ điều gì hữu ích cho aws-sdk thực tế khi nói đến việc sử dụng tiền tố và điều gì) –

+0

khai báo mô-đun 'aws-sdk' { var foo: bất kỳ; xuất = foo; } nơi để viết này? –

+0

bạn sẽ viết nó ở bất cứ đâu mà bạn khai báo định nghĩa kiểu. Trong nhiều trường hợp, nó sẽ là một tệp được tải vào mảng tệp tsconfig –

1

tôi cũng cố gắng sử dụng aws-sdk với dự án góc 2 (góc được tạo bởi cli). tôi không thể tải libs đúng trong trình duyệt.

theo tài liệu angluar i đã nhập khẩu các libaries aws (https://github.com/angular/angular-cli/wiki/3rd-party-libs#adding-underscore-library-to-your-project).

này trông như thế này:

chỉnh sửa package.json để tải tập tin JS từ NPM vào hệ thống địa phương

{ 
     ... 
     "dependencies": { 
     "aws-sdk": "git://github.com/aws/aws-sdk-js.git#support/typescript" 
     }, 
     ... 
} 

chỉnh sửa angluar-cli-build.js để sao chép các file AWS JS trong quá trình xây dựng để thư mục nhà cung cấp của quận

var Angular2App = require('angular-cli/lib/broccoli/angular2-app'); 

module.exports = function(defaults) { 
    return new Angular2App(defaults, { 
    vendorNpmFiles: [ 
     ... 
     'aws-sdk/**/*.js' 
    ] 
    }); 
}; 

chỉnh sửa bản đồ phần trong hệ thống config.ts để lập bản đồ không gian tên cho file đích

const map: any = { 
    'aws-sdk': 'vendor/aws-sdk/dist/aws-sdk.js' 
}; 

trong tệp bản thảo của tôi, tôi cố gắng nhập libS AWS.

... 
import * as AWS from 'aws-sdk'; 
... 

@Injectable() 
export class MyService { 

    public myMethod() { 
     var s3 = new AWS.S3(); 
     ... 
     ... 
     ... 

đây là tất cả tốt cho trình biên dịch bản ghi, tệp nguồn cũng được tải trong trình duyệt nhưng kết quả là lỗi như "S3 không phải là hàm tạo".

nếu bạn gỡ lỗi nội dung, bạn sẽ thấy rằng AWS công cụ được khởi tạo tốt nhưng sau khi "nhập * như AWS từ 'aws-sdk'" được thực thi, AW AWS được khởi tạo với một số đối tượng điên.

do giải pháp của tôi là:

chỉnh sửa package.json để tải tập tin JS từ NPM vào hệ thống địa phương

{ 
     ... 
     "dependencies": { 
     "aws-sdk": "git://github.com/aws/aws-sdk-js.git#support/typescript" 
     }, 
     ... 
} 

chỉnh sửa angluar-cli-xây dựng.js để sao chép các file AWS JS trong quá trình xây dựng cho nhà cung cấp thư mục của quận

var Angular2App = require('angular-cli/lib/broccoli/angular2-app'); 

module.exports = function(defaults) { 
    return new Angular2App(defaults, { 
    vendorNpmFiles: [ 
     ... 
     'aws-sdk/**/*.js' 
    ] 
    }); 
}; 

add nhập khẩu kịch bản index.html

<script src="/vendor/aws-sdk/dist/aws-sdk.js" type="text/javascript"></script> 

finaly sử dụng nó trong dịch vụ của bạn

// make AWS as 'any' available for typescript compiler 
declare var AWS:any; 

@Injectable() 
export class MyService { 

    public myMethod() { 
     var s3= new AWS.S3(); 
     ... 
     ... 
     ... 

này là một cách hỗn hợp. Sử dụng quá trình xây dựng Angluar 2, sử dụng quản lý gói NPM nhưng không sử dụng định nghĩa kiểu bản ghi AWS.

Các vấn đề liên quan