Skip to content
This repository has been archived by the owner on Aug 3, 2023. It is now read-only.

Gabbi/merge master in #562

Merged
merged 29 commits into from
Sep 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4f519fe
Remove link to docs for installation because they link back to wrangl…
EverlastingBugstopper Aug 30, 2019
4c3f30a
Merge branch 'master' into avery/update-readme
EverlastingBugstopper Sep 3, 2019
4cf3f83
Merge branch 'master' into avery/update-readme
EverlastingBugstopper Sep 6, 2019
404cb16
Merge branch 'master' into avery/update-readme
EverlastingBugstopper Sep 9, 2019
e9c94c8
Add environment documentation to build, preview, and publish sections…
EverlastingBugstopper Sep 10, 2019
e81e122
md formatting newline
EverlastingBugstopper Sep 10, 2019
c36493e
Fix ordering of subdomain registration steps
EverlastingBugstopper Sep 10, 2019
ced3387
Break up publish targets into separate subheadings
EverlastingBugstopper Sep 10, 2019
33dbedf
Update prose based on Victoria's comments
EverlastingBugstopper Sep 10, 2019
d8e645e
Add period to end of install sentence
EverlastingBugstopper Sep 10, 2019
359e9b0
Merge branch 'master' into avery/update-readme
EverlastingBugstopper Sep 10, 2019
b96728d
Merge pull request #494 from cloudflare/avery/update-readme
EverlastingBugstopper Sep 11, 2019
a77779d
Merge branch 'master' into avery/environments-docs
EverlastingBugstopper Sep 11, 2019
a96f58c
Add namespaces to environments documentation
EverlastingBugstopper Sep 11, 2019
9a30d01
Fix indentation and clarify environments wording
EverlastingBugstopper Sep 11, 2019
3142b97
Update kv namespaces configuration documentation
EverlastingBugstopper Sep 11, 2019
c77b950
Add environment heading
EverlastingBugstopper Sep 11, 2019
6d5f11d
standardize to KV Namespace
EverlastingBugstopper Sep 11, 2019
9d2d0ab
Remove option 2 from kv namespace config docs
EverlastingBugstopper Sep 11, 2019
a9d91c3
Remove option 2 from env kv namespace config docs
EverlastingBugstopper Sep 11, 2019
758d432
give `e.g.` newline
ashleymichal Sep 11, 2019
5175f88
Remove e.g. and replace w for example
EverlastingBugstopper Sep 11, 2019
dcaf43b
Remove e.g. and replace w for example
EverlastingBugstopper Sep 11, 2019
089d324
Merge pull request #556 from cloudflare/avery/kv-docs
EverlastingBugstopper Sep 11, 2019
0483ef5
Merge branch 'master' into avery/environments-docs
EverlastingBugstopper Sep 11, 2019
9f8422b
Gabbis comments
EverlastingBugstopper Sep 11, 2019
c60e68f
Merge pull request #544 from cloudflare/avery/environments-docs
EverlastingBugstopper Sep 11, 2019
61fca6c
fix merge conflict
gabbifish Sep 11, 2019
20b2e63
Update README.md
gabbifish Sep 12, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
254 changes: 139 additions & 115 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@ npm i @cloudflare/wrangler -g
cargo install wrangler
```

If you don't have `cargo` or `npm` installed, you will need to follow these [additional instructions](#additional-installation-instructions)

For more information on installation, click [here](https://workers.cloudflare.com/docs/quickstart/cli-setup/).
If you don't have `cargo` or `npm` installed, you will need to follow these [additional instructions](#additional-installation-instructions).

## Updating

Expand All @@ -41,169 +39,195 @@ General documentation surrounding workers development and using `wrangler` can b

- ### 👯 `generate`

Scaffold a project, including boilerplate for a Rust library and a Cloudflare Worker.
You can pass a name and template to this command optionally.
Scaffold a project, including boilerplate for a Rust library and a Cloudflare Worker.
You can pass a name and template to this command optionally.

```bash
wrangler generate <name> <template> --type=["webpack", "javascript", "rust"]
```
```bash
wrangler generate <name> <template> --type=["webpack", "javascript", "rust"]
```

All of the arguments and flags to this command are optional:
- `name`: defaults to `worker`
- `template`: defaults to the [`https://github.com/cloudflare/worker-template`](https://github.com/cloudflare/worker-template)
- `type`: defaults to "webpack"
All of the arguments and flags to this command are optional:

- `name`: defaults to `worker`
- `template`: defaults to the [`https://github.com/cloudflare/worker-template`](https://github.com/cloudflare/worker-template)
- `type`: defaults to "webpack"

- ### 🦀⚙️ `build`

Build your project. This command looks at your `wrangler.toml` file and runs the build steps associated
with the `"type"` declared there.
Build your project. This command looks at your `wrangler.toml` file and runs the build steps associated
with the `"type"` declared there.

Additionally, you can build different environments. This is useful if you have different builds for different environments, but typically isn't needed. For more information see the [environments documentation](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).
- ### 🔧 `config`
Configure your global Cloudflare user. This is an interactive command that will prompt you for your email and API key:
Configure your global Cloudflare user. This is an interactive command that will prompt you for your email and API key:
```bash
wrangler config
Enter email:
[email protected]
Enter api key:
...
```
```bash
wrangler config
Enter email:
[email protected]
Enter api key:
...
```
You can also [use environment variables](#using-environment-variables) to configure these values.
You can also [use environment variables](#using-environment-variables) to configure these values.
- ### ☁️ 🆙 `publish`
Publish your Worker to Cloudflare. This uses several keys in your `wrangler.toml` depending on whether
you are publishing to a workers.dev subdomain or your own domain, registered with Cloudflare.
Publish your Worker to Cloudflare. Several keys in your `wrangler.toml` determine whether you are publishing to a workers.dev subdomain or your own registered domain, proxied through Cloudflare.
```bash
wrangler publish
```
To use this command, the following fields are required in your `wrangler.toml`.
| Key | Value | Example |
| ---------- | ------------------------------------------------------------------------- | ------------------------------------------------- |
| name | the name of your worker | `name = "your-worker"` |
| type | build type (webpack, rust, or javascript) | `type = "webpack"` |
| account_id | your Cloudflare account ID, this can be found in the Cloudflare dashboard | `account_id = "a655bacaf2b4cad0e2b51c5236a6b974"` |
From here, you have two options, you can choose to publish to your own domain or you can choose to publish to [\<your-worker\>.\<your-subdomain\>.workers.dev](https://workers.dev).
#### Publishing to workers.dev
If you want to publish to [workers.dev](https://workers.dev), you will first need to have a [workers.dev](https://workers.dev) subdomain registered. You can register a subdomain by executing:
```bash
wrangler subdomain <name>
```
```bash
wrangler publish
```
After you have registered a subdomain, add `workers_dot_dev` to your `wrangler.toml`.
To use this command, you'll need to have the following keys in your `wrangler.toml`:
| Key | Value | Example |
| --------------- | ----- | ------------------------ |
| workers_dot_dev | true | `workers_dot_dev = true` |
- `name`
- `type`
- `account_id`
#### Publishing to your own domain
You'll also need to have a workers.dev subdomain registered. You can register a subdomain by using:
If you would like to publish to your own domain, you will need to specify these three fields in your `wrangler.toml`.
```bash
wrangler subdomain <name>
```
| Key | Value | Example |
| --------------- | ---------------------------------------------------------------------- | ---------------------------------------------- |
| workers_dot_dev | false | `workers_dot_dev = false` |
| route | The route you would like to publish to | `route = "example.com/my-worker/*"` |
| zone_id | Your Cloudflare zone ID, this can be found in the Cloudflare dashboard | `zone_id = "b6558acaf2b4cad1f2b51c5236a6b972"` |
A `--release` can be optionally passed to publish your worker to a domain you have registered with
Cloudflare. To use `--release` your `wrangler.toml` must include:
#### Publishing the same code to multiple places
- `name`
- `type`
- `account_id`
- `zone_id`
- `route`
If you would like to be able to publish your code to multiple places, please see the documentation for [environments](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).
- ### 🔬 `preview`
Preview your project using the [Cloudflare Workers preview service](https://cloudflareworkers.com/).
Preview your project using the [Cloudflare Workers preview service](https://cloudflareworkers.com/).
By default, `wrangler preview` will only bundle your project a single time. To enable live preview,
where Wrangler will continually update the preview service with the newest version of your project,
pass the `--watch` flag:
By default, `wrangler preview` will only bundle your project a single time. To enable live preview,
where Wrangler will continually update the preview service with the newest version of your project,
pass the `--watch` flag:
```bash
wrangler preview --watch
```
```bash
wrangler preview --watch
```
You can optionally pass `get` or `post` and a `body` to this command. This will send a request to your
worker on the preview service and return the response in your terminal. For example:
You can optionally pass `get` or `post` and a `body` to this command. This will send a request to your
worker on the preview service and return the response in your terminal. For example:
GET requests can be sent with
GET requests can be sent with
```bash
wrangler preview
```
```bash
wrangler preview
```
or
or
```bash
wrangler preview get
```
```bash
wrangler preview get
```
- ### 🗂️ `kv`
Interact with your Cloudflare Workers KV store. [Check out the docs.](./docs/content/kv)
POST requests can be sent with
```bash
wrangler preview post hello=hello
```
Additionally, you can preview different environments. This is useful if you have different builds for different environments (like staging vs. production), but typically isn't needed. For more information see the [environments documentation](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).

- ### 🗂️ `kv`
Interact with your Cloudflare Workers KV store. [Check out the docs.](./docs/content/kv)

## 🔩 Configuration

There are two types of configuration that `wrangler` uses: global user and per project.

- ### Global User

In Cloudflare's system, you have a User that can have multiple Accounts and Zones. As a result, your User
is configured globally on your machine. Your Account(s) and Zone(s) will be configured per project, but
will use your User credentials to authenticate all API calls. This config file is created in a `.wrangler`
directory in your computer's home directory.
In Cloudflare's system, you have a User that can have multiple Accounts and Zones. As a result, your User
is configured globally on your machine. Your Account(s) and Zone(s) will be configured per project, but
will use your User credentials to authenticate all API calls. This config file is created in a `.wrangler`
directory in your computer's home directory.

To set up `wrangler` to work with your Cloudflare user, use the following commands:
To set up `wrangler` to work with your Cloudflare user, use the following commands:

- 🔧 `config`: a command that prompts you to enter your `email` and `api` key.
- 🕵️‍♀️ `whoami`: run this command to confirm that your configuration is appropriately set up.
When successful, this command will print out your user information, including the type of plan you
are currently on.
- 🔧 `config`: a command that prompts you to enter your `email` and `api` key.
- 🕵️‍♀️ `whoami`: run this command to confirm that your configuration is appropriately set up.
When successful, this command will print out your user information, including the type of plan you
are currently on.

- #### Using environment variables

You can also configure your global user with environment variables. This is the preferred method for using Wrangler in CI:
You can also configure your global user with environment variables. This is the preferred method for using Wrangler in CI:

```bash
# e.g.
CF_API_KEY=superlongapikey [email protected] wrangler publish --release
# where
# $CF_API_KEY -> your Cloudflare API key
# $CF_EMAIL -> your Cloudflare account email
```
```bash
# e.g.
CF_API_KEY=superlongapikey [email protected] wrangler publish --release
# where
# $CF_API_KEY -> your Cloudflare API key
# $CF_EMAIL -> your Cloudflare account email
```

- ### Per Project

Your project will need to have several things configured before you can publish your worker. These values
are stored in a `wrangler.toml` file that `wrangler generate` will make for you. You will need to manually
edit this file to add these values before you can publish.
Your project will need to have several things configured before you can publish your worker. These values are stored in a `wrangler.toml` file that `wrangler generate` will make for you. You will need to manually edit this file to add these values before you can publish.

- `name`: This is the name of your project. It will be the name of your script.
- `type`: This key tells `wrangler build` how to build your project. There are currently 3 options, but we
expect there to be more as the community grows.
- `type`: This key tells `wrangler build` how to build your project. There are currently three options (`webpack`, `javascript`, and `rust`), but we expect there to be more as the community grows.
- `javascript`: This project contains a single JavaScript file, defined in `package.json`'s `main` key.
- `rust`: This project contains a Rust crate that uses `wasm-bindgen`. It will be built with `wasm-pack`.
- `webpack`: This project contains any number of JavaScript files or Rust/C/C++ files that compile to
WebAssembly. Rust files will be built with `wasm-pack`.
This project type uses webpack and webpack plugins in the background to build your worker.
- `zone_id`: This is the ID of the "zone" or domain you want to run your script on. This is optional if you
are using a workers.dev subdomain and is only required when `workers_dot_dev` is false, or excluded from an [environment](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).
- `account_id`: This is the ID of the account associated with your zone. You might have more than one account,
so make sure to use the ID of the account associated with the `zone_id` you provide, if you provide one.
- `zone_id`: This is the ID of the "zone" or domain you want to run your script on. This is optional if you are using a [workers.dev](https://workers.dev) subdomain and is only required when `workers_dot_dev` is false, or excluded from an [environment](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md) configuration.
- `account_id`: This is the ID of the account associated with your zone. You might have more than one account, so make sure to use the ID of the account associated with the `zone_id` you provide, if you provide one.
- `route`: This is the route you'd like to use your worker on. You need to include the hostname. Examples:

- `*example.com/*`
- `http://example.com/hello`

This key is optional if you are using a workers.dev subdomain and is only required when `workers_dot_dev` is false, or excluded from an [environment](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).
- `webpack_config`: This is the path to the webpack configuration file for your worker. This is optional and
defaults to `webpack.config.js`
- `workers_dot_dev`: This is an optional (but recommended due to impending deprecation of the `--release` flag boolean that specifies whether your worker should be deployed to `<your-project>.<your-subdomain>.workers.dev`. For more information, please read the [environments documentation](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).
- `[[kv-namespaces]]`: These specify any [Workers KV](https://workers.cloudflare.com/docs/reference/storage/) namespaces you want to access from
inside your Worker. Each namespace you include should have an entry in your wrangler.toml that includes:
This key is optional if you are using a [workers.dev](https://workers.dev) subdomain and is only required when `workers_dot_dev` is false, or excluded from an [environment](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).

- `webpack_config`: This is the path to the webpack configuration file for your worker. This is optional and defaults to `webpack.config.js`
- `workers_dot_dev`: This is a boolean flag that specifies if your worker will be deployed to your [workers.dev](https://workers.dev) subdomain. For more information, please read the [environments documentation](https://github.com/cloudflare/wrangler/blob/master/docs/environments.md).
- `kv-namespaces`: These specify any [Workers KV](https://workers.cloudflare.com/docs/reference/storage/) Namespaces you want to access from
inside your Worker. Each namespace you include should have an entry in your `wrangler.toml` that includes:

- `binding`: the name you want to bind to in your script
- `id`: the namespace_id assigned to your kv namespace upon creation.
e.g. (per namespace):
- `id`: the namespace_id assigned to your KV Namespace upon creation.

For example:

```toml
[[kv-namespaces]]
binding = "FOO"
id = "0f2ac74b498b48028cb68387c421e279"
kv-namespaces = [
{ binding = "FOO", id = "0f2ac74b498b48028cb68387c421e279" },
{ binding = "BAR", id = "068c101e168d03c65bddf4ba75150fb0" }
]
```
Note: Creating your KV Namespaces should be handled either via the [api](https://workers.cloudflare.com/docs/reference/storage/writing-data/) or via your Cloudflare dashboard.
#### Environments
Additionally, you can configure Wrangler to publish to multiple environments. This means that your same codebase can be deployed to multiple places on your [workers.dev](https://workers.dev) subdomain, across multiple accounts, zones, and routes. Read more [here](/docs/environments.md).
## Additional Installation Instructions
Expand All @@ -214,37 +238,37 @@ Wrangler can be installed both through [npm](https://www.npmjs.com/get-npm) and
1. If you don't already have npm on your machine, install it using [npm's recommended method](https://www.npmjs.com/get-npm), a node.js version manager.
If you have already installed npm with a package manager, it is possible you will run into an `EACCES` error while installing wrangler. This is related to how many system packagers install npm. You can either uninstall npm and reinstall using the npm recommended install method (a version manager), or use one of our other install methods.
If you have already installed npm with a package manager, it is possible you will run into an `EACCES` error while installing wrangler. This is related to how many system packagers install npm. You can either uninstall npm and reinstall using the npm recommended install method (a version manager), or use one of our other install methods.
2. Install Wrangler by running:
```bash
npm i @cloudflare/wrangler -g
```
```bash
npm i @cloudflare/wrangler -g
```
### Using `cargo`
1. Install `cargo`:
Rustup, a tool for installing Rust, will also install Cargo. On Linux and macOS systems, `rustup` can be installed as follows:
Rustup, a tool for installing Rust, will also install Cargo. On Linux and macOS systems, `rustup` can be installed as follows:
```bash
curl https://sh.rustup.rs -sSf | sh
```
```bash
curl https://sh.rustup.rs -sSf | sh
```
Additional installation methods are available [here](https://forge.rust-lang.org/other-installation-methods.html).
Additional installation methods are available [here](https://forge.rust-lang.org/other-installation-methods.html).
2. Install `wrangler`:
```bash
cargo install wrangler
```
```bash
cargo install wrangler
```
Installing wrangler on linux requires some [OpenSSL-related packages](https://docs.rs/openssl/0.10.24/openssl/#automatic) to be installed. If you don't want to deal with this, you can use vendored OpenSSL.
Installing wrangler on linux requires some [OpenSSL-related packages](https://docs.rs/openssl/0.10.24/openssl/#automatic) to be installed. If you don't want to deal with this, you can use vendored OpenSSL.
```bash
cargo install wrangler --features vendored-openssl
```
```bash
cargo install wrangler --features vendored-openssl
```
### Manual Install
Expand Down
Loading