diff --git a/deno.json b/deno.json index 062b8d1..f366d5b 100644 --- a/deno.json +++ b/deno.json @@ -2,7 +2,7 @@ "tasks": { "test": "deno test -A && deno check --config=www/deno.json www/main.ts www/dev.ts && deno check init.ts", "fixture": "deno run -A --watch=static/,routes/ tests/fixture/dev.ts", - "www": "deno run -A --watch=static/,routes/ www/dev.ts", + "www": "deno run -A --watch=www/static/,www/routes/,docs/ www/dev.ts", "screenshot": "deno run -A www/utils/screenshot.ts" }, "importMap": "./.vscode/import_map.json", diff --git a/docs/concepts/updating.md b/docs/concepts/updating.md new file mode 100644 index 0000000..3792a3e --- /dev/null +++ b/docs/concepts/updating.md @@ -0,0 +1,122 @@ +--- +description: | + Fresh regularly releases new versions of the framework. This page explains how to update your project. +--- + +Fresh constists of multiple pieces which are independently versioned and +released. + +- Fresh (https://deno.land/x/fresh) +- Preact (https://esm.sh/preact) +- preact-render-to-string (https://esm.sh/preact-render-to-string) + +Some plugins also have their own dependencies that can be updated independently. + +- Twind (https://esm.sh/twind) (for the twind plugin) + +For the most part these pieces can be updated independently. Certain versions of +Fresh may require a minimum version of a given dependency. This is documented +below. + +| Fresh version | Preact | preact-render-to-string | Deno | +| ------------- | ---------------- | ----------------------- | --------- | +| 1.0.0-1.0.2 | >=10.8.1 <11.0.0 | >=5.2.0 <6.0.0 | >= 1.23.0 | +| 1.1.0 | >=10.8.1 <11.0.0 | >=5.2.0 <6.0.0 | >= 1.25.0 | + +## Updating dependencies + +To update your dependencies, you have two options: + +- Run the fresh updater to update your project dependencies. +- Manually update the dependency versions in your `import_map.json` file. + +### Auto updater + +The auto updater is a command line tool that will update your project's +`import_map.json` file to the latest versions of Fresh and its dependencies. It +may also contain code mods for your project that will update your code to the +latest recommended patterns for Fresh projects. + +To run the auto updater, run the following command from the root of your +project: + +```bash +$ deno run -A https://fresh.deno.dev/update . +``` + +You will be prompted to confirm the changes that will be made to your project. + +### Manual update + +To manually update your project's dependencies, you can edit the +`import_map.json` file in the root of your projects directory. Dependency +versions are encoded into the URLs in this file. For example, here is how to +update a project from Fresh 1.0.2 to 1.1.0, and update Preact to the latest +version: + +```diff + { + "imports": { +- "$fresh/": "https://deno.land/x/fresh@1.0.2/", ++ "$fresh/": "https://deno.land/x/fresh@1.1.0/", + +- "preact": "https://esm.sh/preact@10.8.1", +- "preact/": "https://esm.sh/preact@10.8.1/", ++ "preact": "https://esm.sh/preact@10.10.6", ++ "preact/": "https://esm.sh/preact@10.10.6/", + +- "preact-render-to-string": "https://esm.sh/*preact-render-to-string@5.2.0", ++ "preact-render-to-string": "https://esm.sh/*preact-render-to-string@5.2.2", + + "twind": "https://esm.sh/twind@0.16.17", + "twind/": "https://esm.sh/twind@0.16.17/" + } + } +``` + +## Code mods + +Code mods are small scripts that can be run to update your project's code to +match the latest recommended patterns for Fresh projects. Code mods can be run +through the auto updater. Sometimes the code mod can not cover all cases, so you +may need to manually update some code. This section explains the code mods +currently available. + +### Classical JSX -> Automatic JSX + +> This code mod is only available in Fresh 1.1.0 and above. + +The classical JSX transform that relies on a `/** @jsx h */` pragma is no longer +the recommended way to use JSX in Fresh projects. Instead, starting with version +1.1.0, Fresh projects should use the automatic JSX transform that requires no +JSX pragma or preact import. + +```diff +- /** @jsx h */ +- import { h } from "preact"; + + export default function Page() { + return