2017-04-24 2 views
1

Ich verwende Angular 4 mit Office.js. Das Projekt wird von Angular CLI erstellt.Name nicht gefunden 'Büro'

Der Code ist einfach:

// declare const Office: any; 
// With the line above, the app runs perfect 

Office.initialize = function() { 
    platformBrowserDynamic().bootstrapModule(AppModule); 
}; 

ich den Fehler bekam

Cannot find name 'Office'.

ich schon npm install --save-dev @types/office-js

Meine tsconfig.json Datei tat

{ 
    "compileOnSave": false, 
    "compilerOptions": { 
    "outDir": "./dist/out-tsc", 
    "baseUrl": "src", 
    "sourceMap": true, 
    "declaration": false, 
    "moduleResolution": "node", 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "target": "es5", 
    "typeRoots": [ 
     "node_modules/@types" 
    ], 
    "lib": [ 
     "es2016", 
     "dom" 
    ] 
    } 
} 

UPDATE 1:

@MahmoodSajjadi Vorschlag, nach npm install --save @microsoft/office-js Nach und verwenden

import { Office } from '@microsoft/office-js'; 

diesen Fehler Got:

ERROR in /my-app/src/main.ts (3,24): File '/my-app/node_modules/@types/office-js/index.d.ts' is not a module.

ERROR in ./src/main.ts Module not found: Error: Can't resolve 'office-js' in '/my-app/src'

@ ./src/main.ts 3:0-35
@ multi webpack-dev-server/client? http://localhost:4200 ./src/main.ts

In package.json, es tatsächlich ist "@microsoft/office-js": "0.0.0", nicht sicher, das ist ein richtiges Paket.


UPDATE 2:

Basierend auf Michaels Antwort scheint NPM Version nicht bereit ist, habe ich zunächst mit CDN-Version bleiben. Danke für die Hilfe von allen!

+0

Sie müssen Office deklarieren oder importieren (als Code-Kommentar) –

+0

@MahmoodSajjadi Wie kann ich richtig importieren? Ich habe 'import {Office} von 'office-js' versucht;' funktioniert aber nicht. –

+0

das Paket '@ type/office-js' ist nur Typ Paket und nicht eine tatsächliche' office.js', brauchen Sie 'Npm ich @ microsoft/office-js' –

Antwort

2

Derzeit wird Office.js nicht als NPM-Paket, sondern als CDN-Referenz verwendet. Es ist typings/d.ts do kommen von @types, aber nicht seinen tatsächlichen Code.

Ich empfehle Ihnen einen Blick auf Script Lab, ein kürzlich angekündigtes Tool und auch Open-Source-Vitrine Probe, die Angular 4 verwendet, und die Sie zur Inspiration verwenden können. Ein Teil der zugrunde liegenden Technologie wird auch in einer podcast about the project diskutiert.

+0

Also, ich bin neugierig, ist das 'npm: office-js 'Paket veraltet? –

+1

Es ist eher das Gegenteil: Es ist noch nicht vollständig gestartet. Wir denken darüber nach, NPM-Tropfen von unserem CDN zu nehmen, aber es gibt einen Prozess, der dafür verantwortlich ist. | And (zumindest für jetzt), der Store erfordert CDN-Verweise für alle Store-gebundene Add-Ins. Wenn Sie Feedback dazu haben, warum Sie die Dateien lieber über ein NPM-Paket hosten möchten, anstatt auf das offizielle CDN zu verweisen, denken Sie bitte daran, Ihre Überlegungen zu https://officespdev.uservoice.com/forums/224641/suggestions/573756 hinzuzufügen dass es an das entsprechende Team weitergeleitet werden kann. –

+0

Vielen Dank für Ihre Antwort. Es macht die Situation sehr deutlich. Eigentlich bin ich besorgt um die Richtigkeit meiner Antwort auf diese Frage. Ich möchte keinen schlechten Rat geben, aber es ist der allgemeine Rat, den ich jedem geben würde, der versucht, ein Paket zu konsumieren. Wenn ich diese API verwenden möchte, möchte ich sie direkt installieren. –

0

Die folgende funktioniert perfekt (die Paketnamen beachten)

npm install --save office-js @types/office-js 

verbrauchen sie dann als globale es erklärt.

Office.initialize(0); 

Beachten Sie, dass Büro-js kein Modul ist, ist es ein global. Deshalb importieren wir nicht daraus. Stattdessen wird das Paket verfügbar verfügbar.

Wenn wir Import als Mittel verwenden möchten Büro-js zur Laufzeit zu laden, können wir

import 'office-js'; 

In diesem Fall sind wir fügen auch nichts von ihm zu importieren, da es nichts zu importieren aber wir sagen eine Abhängigkeit von seiner Ausführung aus, ein Nebeneffekt davon ist, die globale Variable window.Office zu erzeugen.

Hinweis in Ihren Kommentaren erwähnen Sie eine @ Microsoft/Office-js Paket. Zum Zeitpunkt des Schreibens ist ein solches Paket vorhanden, aber es ist vollständig leer, sein Eingangspunkt gibt eine Datei an, die nicht einmal existiert, also bezweifle ich, dass es das Paket ist, das Sie verwenden wollen.

Beachten Sie in einem nicht verwandten Hinweis, das Modulformat explizit in Ihrem tsconfig anzugeben.JSON-Datei:

{ 
    "compilerOptions": { 
    "module": "commonjs" 
    } 
} 

Es ist eine sehr wichtige Einstellung.

+0

Ich habe 'npm installiert --save office-js @ types/office-js', aber immer noch denselben Fehler' Name kann nicht gefunden werden 'Office' .' Und versuchte "' module "hinzuzufügen:" commonjs "', aber immer noch gleich. –

+0

Stellen Sie sicher, dass Ihr TypeScript auf dem neuesten Stand ist (> = 2.2.2). Ich habe es in einem leeren Projekt versucht. Funktioniert gut. –

2

Offenbar müssen Sie noch angeben, dass die Typen office-js verwendet werden sollen. Öffnen Sie src/tsconfig.app.json und fügen office-js auf die Typen Array, das dann wie folgt aussehen sollte, wenn es vorher ein leeres Array war:

"types": [ 
    "office-js" 
] 

Als nächstes müssen Sie den Befehl tsc -p tsconfig.json aus Ihrem Projektverzeichnis laufen, bevor Sie bauen das Projekt wieder.

+0

Das hat es behoben !!! –

Verwandte Themen