2017-04-24 84 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

这固定它! –