2016-11-10 2 views
0

Angular2 TypeScript2 앱에서 일부 요청에 서명하기 위해 aws4 package을 사용하려고합니다. 패키지를 설치했으며 node_modules입니다. 내가 웹팩과 함께 프로젝트를 빌드 할 때aws4를 Angular2 앱으로 가져 오기

import * as aws4 from 'aws4'; 

, 내 코드가 Cannot find module 'aws4'을 불평 : 내 component.ts 파일에서

, 나는 그것을 가져 오려고. 그러나 동일한 디렉토리에서 노드를 시작하고 require('aws4')을 실행하면 모듈이 설치되고 설치됩니다.

@types/aws4도 사용할 수 없습니다.

재미있는 점은 TypeScript가 aws4을 찾을 수 없다고 불평하지만 어쨌든 제대로 가져올 수 있습니다. 그러나 브라우저에서 다른 오류가 발생합니다 : querystring.escape is not a function. 나는 Webpack이 querystring과 같은 nodejs 의존성이 pollyfilled되도록 코드를 만들 것이라고 생각한다.

aws4을 제대로 사용하려면 TypeScript 코드 또는 Webpack에 추가해야 할 것이 있습니까?

+0

어떤 버전의 TypeScript입니까? – pe8ter

+0

@ pe8ter Typescript 2 –

답변

0

나는 당신의 타이핑 문제에 도움을 줄 수 있지만 당신의 shimming 내장 된 노드 모듈 문제는 : 당신이 그것을 제공해야하므로

는 TS 컴파일러는 aws4 모듈의 모양을 알 수 없습니다. 당신이 말했듯이, 그 모듈은 타이핑을 만들 필요가 있음을 의미하는 npm을 통해 사용할 수있는 타이핑을 가지고 있지 않습니다. /// <reference path="path/to/aws4.d.ts" />와 "component.ts"에서

declare module "aws4"; 

가져 오기 입력 : 당신이 필요로하는 최소이 한 줄에 "aws4.d.ts을"라는 이름의 파일입니다. "component.ts"와 같은 디렉토리에 타이핑을 넣으면 reference 비트를 건너 뛸 수 있습니다.

이 최소한의 타이핑은 실제로 TS에 라이브러리의 실제 모양을 알리지 않았더라도 컴파일러를 placates합니다.

참고 : TS 컴파일러에서 종속성을 찾을 수 없다고해서 코드에 import 문을 내 보내지 않는다는 의미는 아닙니다. 페이지가 여전히 aws4을로드하지만 나중에 querystring.escape을 참조하는 데 실패합니다.

관련 문제