About the NPM package
The NPM package for Office.js is a copy of what gets published to the official "evergreen" Office.js CDN, at https://appsforoffice.microsoft.com/lib/1/hosted/office.js.
While the Office.js CDN contains all currently available Office.js APIs at any moment in time, each version of the NPM package for Office.js contains only the Office.js APIs that were available at the point in time when that version of the NPM package was created.
The NPM package for Office.js is intended as a way for you to obtain your own (non-CDN) copy of the Office.js files, which you can then statically serve from your own site instead of using the CDN. This NPM package is primarily provided to address the following scenarios:
If you are developing an add-in behind a firewall, where accessing the Office.js CDN is not possible.
If you need offline access to the Office.js APIs (for example, to facilitate offline debugging).
Best practices for using the Office.js NPM package include:
Refresh your NPM package periodically (to gain access to new APIs and/or bug fixes that may not have been available in your current version of the package).
Use the NPM package according to the instructions in Using the NPM package; do not try to import the NPM package as you might commonly do with other NPM packages.
Do not use the NPM package in an add-in that you submit for publication to AppSource. Add-ins that are published to AppSource must use the Office.js CDN.
Use TypeScript definitions for Office.js as described in IntelliSense definitions.
Installing the NPM package
To install "office-js" locally via the NPM package, run the following command:
npm install @microsoft/office-js --save
Using the NPM package
Installing the NPM package locally creates a set of static Office.js files in the
node_modules\@microsoft\office-js\dist folder of the directory where you ran the
npm install command. To use the NPM package, do the following:
Either manually or as part of a build script (e.g.,
CopyWebpackPluginif you're using Webpack), have the files get served from a destination of your choosing (e.g., from the
/assets/office-js/directory of your web server).
Reference that location in a
<script>tag within the HTML file in your add-in project.
For example, if you add the contents of the
dist folder to the
assets/office-js directory of your project, then you'd add the following
<script> tag to your HTML file:
TypeScript definitions for Office.js are available.
For latest RELEASE version of Office.js:
- DefinitelyTyped: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/office-js/index.d.ts
@types/office-js. (Acquire as
npm install @types/office-js --save-dev)
For any version (including RELEASE, but also including BETA, etc.):
- Inside of the NPM package, under
- In this repo: dist/office.d.ts
- Inside of the NPM package, under
Using TypeScript definitions with the NPM package
If you are using the Office.js NPM package for the firewall scenario and want a d.ts file that precisely matches the JS contents, use the d.ts file that is located within the
/dist/office.d.tsfolder of the NPM package. You can achieve this by using a triple-slash reference.
- Tip: If you create a
references.tsfile at the root of the project, you can simply point the reference to
- Tip: If you create a
If you are using the Office.js NPM package for beta, follow the guidance outlined in the preceding point (#1), but make sure to update often.
If neither of these points applies to your scenario, you can just obtain the TypeScript definitions by using
@types/office-js and reference the Office.js CDN at https://appsforoffice.microsoft.com/lib/1/hosted/office.js -- in which case, you don't need to use the Office.js NPM package.
Enabling IntelliSense in Visual Studio
office-vsdoc.js is available alongside the
office.js file. As long as you have a
Scripts/_references.js file in your VS project, and as long as you substitute the existing triple-slash reference (
/// <reference path="https://.../office.js" />) with the new location (the
-vsdoc part gets substituted automatically, so use it just as you would in a
Accessing the NPM files via a CDN
In addition to downloading the files locally, you can also use them via an external service like https://unpkg.com, which provides best-effort (no uptime guarantees) CDN hosting for npm packages. This is especially useful for trying out alpha or beta builds. To do so, simply change the script reference to:
You can see the different versions of the NPM package listed in the dropdown on the top right at https://unpkg.com/@microsoft/office-js/. This provides the alpha and beta versions as well.
To view the latest version numbers for each of the tags, you can also run the following command on the command-line:
npm view @microsoft/office-js dist-tags --json
When you have a version number, can use it as follows with https://unpkg.com: (appending
@<version-#> right after
Production vs. Beta vs. Private versions
The NPM package and the repo branches assume the following structure.
|GitHub branch name||NPM tag name||Description|
||The latest of the released publicly-available APIs.
This should be identical with what is currently on https://appsforoffice.microsoft.com/lib/1/hosted/office.js
||Forthcoming APIs, not necessarily ready for public consumption yet (and may still change...), but likely available on Insider Fast (and maybe Insider Slow) builds.
This should be identical to what is currently on https://appsforoffice.microsoft.com/lib/beta/hosted/office.js
||A forthcoming update the the "release" branch (typically a couple weeks ahead of "release")|
||A forthcoming update the the "beta" branch (typically a couple weeks ahead of "beta")|
||Any flavor of a release, but deployed for a very specific need (e.g., try out something experimental) or for a specific partner. Unlike the other tags, successive versions of this tag are not necessarily cumulative updates; it is possible to have a
To use a version of the NPM package with Script Lab, substitute the CDN reference and the
@types/office-js reference with the NPM package name and version. [Note: Script Lab uses https://unpkg.com for resolving the package names, so it's very similar guidance as above].
For example, to use a
1.1.2-beta-next.0 version, use the following references: