GithubHelp home page GithubHelp logo

ajwcontreras / cloudflare-workers-svelte Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jpwilliams/cloudflare-workers-svelte

0.0 0.0 0.0 224 KB

A template for a Svelte site with TypeScript support hosted on Cloudflare Workers Sites.

Home Page: https://svelte.jpwilliams.dev

CSS 12.82% HTML 5.88% JavaScript 36.75% TypeScript 35.21% Svelte 9.34%

cloudflare-workers-svelte's Introduction

Cloudflare Workers Svelte Template

This is a super-simple template for deploying a Svelte site with TypeScript support to Cloudflare Workers Sites. It includes automated deployment using GitHub Actions, the configuration for which can be found at .github/workflows/deploy.yaml.

An example of this exact repository is hosted at svelte.jpwilliams.dev.

A version without TypeScript can be found at the js branch.

Making it your own

  1. Add your Cloudflare account_id and zone_id to wrangler.toml.
  2. (Optional) For automated deployments, add a CF_API_TOKEN secret to your GitHub repository which should be a Cloudflare API Token with the "Edit Cloudflare Workers template.

Use

  • npm install to install dependencies
  • npm run dev to start a dev server
  • npm run format to format your code
  • wrangler publish to deploy

Expansion

To pad out your app with more complex features, take a look at the following files, repositories, and sites:

The template explained

I usually hate using template repositories that aren't my own for no other reason than I have no idea what's going on; they're often bloated and starting a project with one feels like setting yourself up for a trap.

For your sake (and mine in 6 months' time) I'll explain what's actually going on in this repository and how it all stitches together.


This is an amalgamation of sveltejs/template and a generic Workers Sites repository created using cloudflare/wrangler. This results in a project with two faces: the main Svelte project in the root and a Workers Sites project inside the workers-sites directory.

Atfer that, I've added:

  • Automated deployments
  • Prettier for both projects
  • TypeScript for both projects

Automated deployments

A simple deploy.yaml file has been specified at .github/workflows/deploy.yaml that will run npm ci to install dependencies, npm run build to build the Svelte project, and finally use cloudflare/wrangler-action to essentially run wrangler build and wrangler publish.

The automated deployments can be removed completely by deleting the file (or just not using GitHub), or can be configured further by editing it.

Prettier

I don't like Prettier. It's my opinion that it farts out ugly code. I'm a hipster dev and I like my own rules and I like coding without semi-colons. Thing is, it doesn't matter what I like; with Prettier, everyone writes the same way, and I like that better.

Both projects have the prettier dev dependency added as well as a format script that can be used via npm run format. You could add a pre-commit hook to run this, perhaps. The Svelte project also has sveltejs/prettier-plugin-svelte so we can format .svelte files too.

TypeScript

For this, there are two tsconfig.json files. One at the root and one at workers-sites/tsconfig.json. Two are required here because the two projects, though they're deployed as one, need to parse the TypeScript differently with different types. The Workers Sites project requires WebWorker types, for example, whereas the Svelte project needs to understand TypeScript inside .svelte files.

Svelte

Here, the following dev dependencies have been added:

  • tslib and typescript for actually parsing TypeScript.
  • @rollup/plugin-typescript for parsing all TypeScript for RollUp.
  • svelte-preprocess for parsing TypeScript inside .svelte files with <script lang="typescript">.
  • @pyoner/svelte-ts-preprocess for helping code editors to understand the parsing in .svelte files.

On top of this, @rollup/plugin-typescript and svelte-preprocess have been added to our rollup.config.js file to make sure it makes use of them. Also, a svelte.config.js file has been added which uses @pyoner/svelte-ts-preprocess to help with code editor parsing.

Finally, a very simple tsconfig.json has been added. The only notable property here is that we've added the svelte types to the compilterOptions block.

Workers Sites

Workers Sites use Webpack internally to build and deploy code. Because of this, you can manually specify a webpack.config.js file to use for this, meaning you can customise the build process as needed.

The following dev dependencies have been added:

  • typescript for actually parsing TypeScript.
  • ts-loader for loading .ts files with Webpack.
  • webpack and webpack-cli for our custom build.

webpack.config.js inside workers-sites contains the simple Webpack config. It loads any .ts or js files, transpiles them and outputs the whole lot to dist/worker.js which gets uploaded to Cloudflare when wrangler publish is run.

Wrangler doesn't pick up this config automatically, so we have to manually point to it by adding a webpack_config entry to wrangler.toml at the root of the project.

cloudflare-workers-svelte's People

Contributors

jpwilliams avatar renovate-bot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.