Files
test-repo/website/versioned_docs/version-stable/browser.md
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

165 lines
5.7 KiB
Markdown
Raw Normal View History

---
id: browser
title: Browser
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
2021-05-10 00:00:41 +03:00
Run Prettier in the browser using its **standalone** version. This version doesn’t depend on Node.js. It only formats the code and has no support for config files, ignore files, CLI usage, or automatic loading of plugins.
2020-11-20 13:44:18 +09:00
The standalone version comes as:
2023-07-05 21:41:09 +09:00
- ES modules: `standalone.mjs`, starting in version 3.0 (In version 2, `esm/standalone.mjs`.)
2020-11-20 13:44:18 +09:00
- UMD: `standalone.js`, starting in version 1.13
2020-07-01 08:44:21 +02:00
The [`browser` field](https://github.com/defunctzombie/package-browser-field-spec) in Prettier’s `package.json` points to `standalone.js`. That’s why you can just `import` or `require` the `prettier` module to access Prettier’s API, and your code can stay compatible with both Node and the browser as long as webpack or another bundler that supports the `browser` field is used. This is especially convenient for [plugins](plugins.md).
### `prettier.format(code, options)`
2021-05-10 00:00:41 +03:00
Required options:
2021-05-10 00:00:41 +03:00
- **[`parser`](options.md#parser) (or [`filepath`](options.md#file-path))**: One of these options has to be specified for Prettier to know which parser to use.
2026-09-23 14:27:25 +08:00
- **`plugins`**: Unlike the `format` function from the [Node.js-based API](api.md#prettierformatsource-options), this function doesn’t load plugins automatically. The `plugins` option is required because all the parsers included in the Prettier package come as plugins (for reasons of file size). These plugins are files in [https://unpkg.com/browse/prettier@3.9.9/plugins](https://unpkg.com/browse/prettier@3.9.9/plugins). Note that `estree` plugin should be loaded when printing JavaScript, TypeScript, Flow, or JSON.
2020-12-13 05:10:59 +08:00
2021-05-10 00:00:41 +03:00
You need to load the ones that you’re going to use and pass them to `prettier.format` using the `plugins` option.
2020-12-13 05:10:59 +08:00
2021-05-10 00:00:41 +03:00
See below for examples.
2020-12-13 05:10:59 +08:00
## Usage
### Global
```html
2026-09-23 14:27:25 +08:00
<script src="https://unpkg.com/prettier@3.9.9/standalone.js"></script>
<script src="https://unpkg.com/prettier@3.9.9/plugins/graphql.js"></script>
2019-11-09 01:09:19 +01:00
<script>
2023-07-05 21:41:09 +09:00
(async () => {
const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql",
plugins: prettierPlugins,
});
})();
</script>
```
2020-07-01 08:44:21 +02:00
Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `package.json` points to `standalone.js`, that’s why `https://unpkg.com/prettier` can also be used instead of `https://unpkg.com/prettier/standalone.js`.
### ES Modules
2020-12-13 05:10:59 +08:00
```html
<script type="module">
2026-09-23 14:27:25 +08:00
import * as prettier from "https://unpkg.com/prettier@3.9.9/standalone.mjs";
import * as prettierPluginGraphql from "https://unpkg.com/prettier@3.9.9/plugins/graphql.mjs";
2023-07-05 21:41:09 +09:00
const formatted = await prettier.format("type Query { hello: String }", {
2020-12-13 05:10:59 +08:00
parser: "graphql",
plugins: [prettierPluginGraphql],
2020-12-13 05:10:59 +08:00
});
</script>
```
### AMD
```js
define([
2026-09-23 14:27:25 +08:00
"https://unpkg.com/prettier@3.9.9/standalone.js",
"https://unpkg.com/prettier@3.9.9/plugins/graphql.js",
2023-07-05 21:41:09 +09:00
], async (prettier, ...plugins) => {
const formatted = await prettier.format("type Query { hello: String }", {
2020-12-13 05:10:59 +08:00
parser: "graphql",
plugins,
});
});
```
### CommonJS
```js
const prettier = require("prettier/standalone");
2026-06-27 18:23:17 +08:00
const prettierPluginGraphql = require("prettier/plugins/graphql");
2023-07-05 21:41:09 +09:00
(async () => {
const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql",
2026-06-27 18:23:17 +08:00
plugins: [prettierPluginGraphql],
2023-07-05 21:41:09 +09:00
});
})();
```
2020-07-01 08:44:21 +02:00
This syntax doesn’t necessarily work in the browser, but it can be used when bundling the code with browserify, Rollup, webpack, or another bundler.
### Worker
<Tabs groupId="worker-type">
<TabItem value="module" label="Module worker">
```js
2026-09-23 14:27:25 +08:00
import * as prettier from "https://unpkg.com/prettier@3.9.9/standalone.mjs";
import * as prettierPluginGraphql from "https://unpkg.com/prettier@3.9.9/plugins/graphql.mjs";
const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql",
plugins: [prettierPluginGraphql],
});
```
</TabItem>
<TabItem value="classic" label="Classic worker">
```js
importScripts(
2026-09-23 14:27:25 +08:00
"https://unpkg.com/prettier@3.9.9/standalone.js",
"https://unpkg.com/prettier@3.9.9/plugins/graphql.js",
);
2023-07-05 21:41:09 +09:00
(async () => {
const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql",
plugins: prettierPlugins,
});
})();
```
2021-05-10 00:00:41 +03:00
</TabItem>
</Tabs>
2021-05-10 00:00:41 +03:00
## Parser plugins for embedded code
If you want to format [embedded code](options.md#embedded-language-formatting), you need to load related plugins too. For example:
```html
<script type="module">
2026-09-23 14:27:25 +08:00
import * as prettier from "https://unpkg.com/prettier@3.9.9/standalone.mjs";
import * as prettierPluginBabel from "https://unpkg.com/prettier@3.9.9/plugins/babel.mjs";
import * as prettierPluginEstree from "https://unpkg.com/prettier@3.9.9/plugins/estree.mjs";
2021-05-10 00:00:41 +03:00
console.log(
2023-07-05 21:41:09 +09:00
await prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
2021-05-10 00:00:41 +03:00
parser: "babel",
plugins: [prettierPluginBabel, prettierPluginEstree],
2021-05-10 00:00:41 +03:00
}),
);
// Output: const html = /* HTML */ `<DIV> </DIV>`;
</script>
```
The HTML code embedded in JavaScript stays unformatted because the `html` parser hasn’t been loaded. Correct usage:
```html
<script type="module">
2026-09-23 14:27:25 +08:00
import * as prettier from "https://unpkg.com/prettier@3.9.9/standalone.mjs";
import * as prettierPluginBabel from "https://unpkg.com/prettier@3.9.9/plugins/babel.mjs";
import * as prettierPluginEstree from "https://unpkg.com/prettier@3.9.9/plugins/estree.mjs";
import * as prettierPluginHtml from "https://unpkg.com/prettier@3.9.9/plugins/html.mjs";
2021-05-10 00:00:41 +03:00
console.log(
2023-07-05 21:41:09 +09:00
await prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
2021-05-10 00:00:41 +03:00
parser: "babel",
plugins: [prettierPluginBabel, prettierPluginEstree, prettierPluginHtml],
2021-05-10 00:00:41 +03:00
}),
);
// Output: const html = /* HTML */ `<div></div>`;
</script>
```