2017-04-24 42 views
1

我正在使用Angular 4與Office.js。該項目由Angular CLI創建。找不到名字'Office'

代碼很簡單:

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

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

Cannot find name 'Office'.

我已經做了錯誤npm install --save-dev @types/office-js

我tsconfig.json文件:

{ 
    "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" 
    ] 
    } 
} 

更新1:

繼@MahmoodSajjadi建議,npm install --save @microsoft/office-js後,用

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

得到這個錯誤:

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

在的package.json,實際上它是"@microsoft/office-js": "0.0.0",不知道這是一個正確的方案。


更新2:

基於邁克爾的回答,似乎NPM的版本還沒有準備好,我會留在CDN版本第一。感謝大家的幫助!

+0

您需要聲明Office或導入它(作爲您的代碼註釋) –

+0

@MahmoodSajjadi如何正確導入?我嘗試從'office-js'導入{Office};'但是不起作用。 –

+0

包'@ type/office-js'只是打包包而不是實際的'office.js',你需要'npm i @ microsoft/office-js' –

回答

2

現在,Office.js不作爲NPM包使用,而是作爲CDN參考使用。這是typings/d.ts 來自@types,但不是它的實際代碼。

我建議您看看最近發佈的工具Script Lab,以及使用Angular 4的開放源代碼展示樣本,您可以藉此獲取靈感。一些基礎技術也在podcast about the project中討論。

+0

所以,我很好奇npm:office-js包是否被棄用? –

+1

更多的是相反的:它尚未完全啓動。我們正在考慮轉向讓我們的CDN下降,但是有一些過程涉及到實現這一目標。 | (至少現在),Store需要CDN引用來存儲任何Store-bound插件。如果您有反饋意見,說明您爲什麼寧願通過NPM軟件包託管文件,而不是參考官方CDN,請考慮將您的推理內容添加到https://officespdev.uservoice.com/forums/224641/suggestions/573756,這樣它可以被路由到適當的團隊。 –

+0

非常感謝您的回覆。它使情況非常清楚。其實,我很關心我對這個問題的答案的準確性。我不想提出不好的建議,但這是我會爲嘗試使用軟件包的任何人提供的一般建議。也就是說,如果我要使用這個API,我想直接安裝它。 –

0

的完美以下工作(注意包名)

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

然後使用它,因爲它宣佈全球。

Office.initialize(0); 

注意辦公室JS是不是一個模塊,它是一個全球性的。因此我們不從它導入。相反,封裝可以在環境中使用。

如果我們希望用進口的方式加載辦公室JS在運行時,我們可以添加

import 'office-js'; 

在這種情況下,我們也不能從中導入任何東西,因爲沒有什麼進口但是我們表示依賴於它的執行,其副作用是創建全局變量window.Office

請注意,在您的評論中,您提到了一個@ microsoft/office-js包。在寫這篇文章時,這樣的軟件包存在但是完全是空的,它的入口點指定了一個甚至不存在的文件,所以我懷疑這是你打算使用的軟件包。

無關請注意,請考慮在您的tsconfig中明確指定您的模塊格式。json文件:

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

這是一個最重要的設置。

+0

的位置的模塊說明符中導入我做了'npm install --save office -js @ types/office-js',但仍然出現同樣的錯誤'Can not find name'Office' .'嘗試添加'「模塊」:「commonjs」',但仍然一樣。 –

+0

確保您的TypeScript是最新的(> = 2.2.2)。我嘗試了一個空的項目。工作正常。 –

2

看起來您仍然需要指定應使用office-js類型。打開src/tsconfig.app.json並添加office-js的類型數組,那麼這應該是這樣的,如果它以前是空數組:

"types": [ 
    "office-js" 
] 

接下來,你需要嘗試建立之前,從你的項目目錄中運行命令tsc -p tsconfig.json該項目再次。

+0

這固定它! –