2016-11-10 4 views
0

Ich versuche, die aws4 package zu verwenden, um einige Anforderungen in einer Angular2 TypeScript2 App zu signieren. Ich habe das Paket installiert und es ist in node_modules.Importieren von aws4 in eine Angular2 App

In meiner component.ts Datei, ich versuche es zu importieren mit:

import * as aws4 from 'aws4'; 

Als ich das Projekt mit webpack bauen, mein Code klagt Cannot find module 'aws4'. Im selben Verzeichnis, wenn ich den Knoten starte und require('aws4') starte, funktioniert es, also ist das Modul dort und wurde installiert.

@types/aws4 ist ebenfalls nicht verfügbar.

Die interessante Sache ist, dass, obwohl TypeScript beschwert, dass es aws4 nicht finden kann, scheint es immer noch ordnungsgemäß importiert zu werden. Allerdings bekomme ich einen anderen Fehler im Browser: querystring.escape is not a function. Ich würde denken, dass Webpack den Code so bauen würde, dass Knoten-Abhängigkeiten wie querystring pollyfilled werden.

Gibt es etwas, das ich meinem TypeScript-Code oder Webpack hinzufügen muss, um aws4 richtig zu verwenden?

+0

Welche Version von TypeScript? – pe8ter

+0

@ pe8ter Typoskript 2 –

Antwort

0

kann ich mit der Eingabe Problem helfen, aber nicht Ihr Shim Einbau-Knotenmodul Problem:

Die TS-Compiler nicht wissen, um die Form des aws4 Modul, so dass Sie es liefern müssen. Wie du sagst, dieses Modul hat keine Typings über npm verfügbar, was bedeutet, dass du dafür Typen schreiben musst. Die Mindest Sie brauchen, ist eine Datei mit dem Namen „aws4.d.ts“ mit dieser Linie:

declare module "aws4"; 

Importieren Sie die Eingabe in „component.ts“ mit /// <reference path="path/to/aws4.d.ts" />. Wenn Sie die Eingabe im selben Verzeichnis wie "component.ts" ablegen, können Sie das Bit reference überspringen.

Diese minimale Eingabe beschwichtigt den Compiler, obwohl Sie TS nicht wirklich über die wahre Form der Bibliothek informiert haben.

Hinweis: Nur weil der TS-Compiler die Abhängigkeit nicht finden kann, heißt das nicht, dass die Importanweisung nicht in den Code ausgegeben wird. Aus diesem Grund lädt Ihre Seite immer noch aws4, scheitert später jedoch beim Referenzieren querystring.escape.

Verwandte Themen