2016-11-16 9 views
0

Ich möchte ein npm-Modul für einen Authentifizierungsdienst schreiben, den ich in mehreren Apps verwende. Ich sah mir andere Pakete an, konnte aber keinen großen Unterschied feststellen.Angular2 custom npm package

Mein Modul Abschnitt ::

mein Package.json:

{ 
"name": "myApi-services", 
"version": "1.0.0-11", 
"main": "index.js", //referring to the compiled js file from index.ts 
"dependencies": { 
"@angular/common": "2.1.0", 
"@angular/core": "^2.1.0", 
"@angular/http": "^2.1.0", 
"@angular/platform-browser": "^2.1.0", 
"angular2-jwt": "^0.1.25", 
"rxjs": "5.0.0-beta.12", 
"zone.js": "^0.6.21" 
} 
} 

mein Index.ts

export { MyAuthService} from "./authenticate" 

meine Authentifizieren Klasse

import { Http, Headers } from '@angular/http'; 
import { Config } from './config' 

export class Authenticate { 

constructor(private http:Http, private authUrl:string) { 
    this.authUrl = Config.authUrl; 
} 

public login(username:string, password:string): void { 
    let headers = new Headers(); 
    headers.append('Authorization', 'Basic ' + btoa(username + ':' + password)); 
    headers.append('Accept', 'application/json'); 
    this.http.post(this.authUrl, {}, { headers: headers }) 
     .subscribe(
      response => { 
       this.storeToken(response.json().token); 
      }, 
      err => console.log(err), 
      () => console.log('Request Complete') 
     ); 
} 

private storeToken(token: string):void{ 
    localStorage.setItem('apiservices_token', token); 
    console.log(localStorage.getItem('apiservices_token')) 
} 
} 

Mein Import Abschnitt ::

package.json

"depenencies":{ 
    "MyApi-services": "file:/// .... " 
} 

Der Import funktioniert das Modul importes zum node_modules Ordner

app.module.ts bekommt

import { Authenticate } from 'myApi-services' 
@NgModule({ 
    imports:[ Authenticate ] 
}) 

app.component.ts

import { Authenticate } from 'myApi-services' 

... 

constructor(private auth: Authenticate){} 

private login():void{ 
    auth.login('me', '12345'); 
} 

.... 

Einer der Fehler, die durch den Browser geworfen:

Uncaught Error: Unexpected value 'Authenticate' declared by the module 'AppModule' 

Dieser Fehler wird durch imorting das Modul verursacht. Die Angabe als Provider funktioniert auch nicht. Der Fehler ist der gleiche.

Weiß jemand, wie man eigene kundenspezifische Plugins für angular2 erstellt und wie man sie richtig einspritzt?

+1

Versuchen Sie, Authentifizierung in Providern nicht zu importieren, Import ist hauptsächlich für Moduldeklarationen. –

+0

Es wirft die gleiche Ausnahme. Kann es ein Problem sein, Klassenvariablen im Konstruktor des Moduls zu deklarieren? – marcel

Antwort

0

Das Problem der Konstruktorparameter in meinem Modul waren:

constructor(
    private http:Http, 
    private authUrl:string) { 
    this.authUrl = Config.authUrl; 

}

Als ich sie direkt in der Klasse deklariert, das Modul gearbeitet:

export class Authenticate { 
     http: Http; 
     authUrl:strin; 

     constructor(){ 
      console.log("constructor without params"); 
     } 
} 

A angular2 npm Module scheinen im Konstruktor keine Params zu mögen.

Furter (wie Michał sagte): Das Modul muss bei den Providern platziert werden, nicht bei den Importen.

Verwandte Themen