0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-16 21:46:22 -05:00
The web framework for content-driven websites. ️ Star to support our work!
Find a file
Matthew Phillips d9084ff4ad
Implement fallback capability (#44)
* Implement fallback capability

This makes it possible for a dynamic component to render fallback content on the server.

The mechanism is a special `static` prop passed to the component. If `static` is true then the component knows it can render static content.

Putting aside the word `static`, is this the right approach? I think giving components the flexibility to make the decision themselves *is* the right approach.

However in this case we have a special property that is passed in non-explicitly. I think we have to do it this way because if the caller passes in a prop it will get serialized and appear on the client. By making this something we *add* during rendering, it only happens on the server (and only when using `:load`).

Assuming this is the right approach, is `static` the right name for this prop? Other candidates:

* `server`

That's all I have!

* Use `import.meta.env.astro` to tell if running in SSR mode.

* Run formatter
2021-03-31 16:10:27 -04:00
.github Extract Astro styles to external stylesheets (#43) 2021-03-31 13:04:18 -06:00
.vscode Scaffold language server (#25) 2021-03-25 10:38:17 -05:00
examples Implement fallback capability (#44) 2021-03-31 16:10:27 -04:00
src Implement fallback capability (#44) 2021-03-31 16:10:27 -04:00
test Implement fallback capability (#44) 2021-03-31 16:10:27 -04:00
vscode Scaffold language server (#25) 2021-03-25 10:38:17 -05:00
.eslintrc.cjs Extract Astro styles to external stylesheets (#43) 2021-03-31 13:04:18 -06:00
.gitignore Scaffold language server (#25) 2021-03-25 10:38:17 -05:00
.prettierrc.json Annoying Lint PR™ (#3) 2021-03-16 12:37:45 -06:00
astro.mjs Add a proper cli 2021-03-15 15:26:23 -04:00
LICENSE Bring compiler into Astro (#4) 2021-03-16 16:08:11 -04:00
package-lock.json Implement fallback capability (#44) 2021-03-31 16:10:27 -04:00
package.json Implement fallback capability (#44) 2021-03-31 16:10:27 -04:00
README.md Convert CSS Modules to scoped styles (#38) 2021-03-30 10:11:21 -06:00
snowpack-plugin.cjs Extract Astro styles to external stylesheets (#43) 2021-03-31 13:04:18 -06:00
tsconfig.json initial commit 2021-03-15 13:22:05 -04:00

👩‍🚀 Astro

A next-generation static-site generator with partial hydration. Use your favorite JS framework and ship bare-minimum JS (or none at all!).

🔧 Setup

npm install astro

TODO: astro boilerplate

🧞 Development

Add a dev npm script to your /package.json file:

{
  "scripts": {
    "dev": "astro dev ."
  }
}

Then run:

npm run dev

💧 Partial Hydration

By default, Astro outputs zero client-side JS. If you'd like to include an interactive component in the client output, you may use any of the following techniques.

  • MyComponent:load will render MyComponent on page load
  • MyComponent:idle will use requestIdleCallback to render MyComponent as soon as main thread is free
  • MyComponent:visible will use an IntersectionObserver to render MyComponent when the element enters the viewport

💅 Styling

If youve used Sveltes styles before, Astro works almost the same way. In any .astro file, start writing styles in a <style> tag like so:

<style>
.scoped {
  font-weight: bold;
}
</style>

<div class="scoped">Im a scoped style</div>

Sass

Astro also supports Sass out-of-the-box; no configuration needed:

<style lang="scss">
@use "../tokens" as *;

.title {
  color: $color.gray;
}
</style>

<h1 class="title">Title</h1>

Supports:

  • lang="scss": load as the .scss extension
  • lang="sass": load as the .sass extension (no brackets; indent-style)

Autoprefixer

We also automatically add browser prefixes using Autoprefixer. By default, Astro loads the default values, but you may also specify your own by placing a Browserslist file in your project root.

🚀 Build & Deployment

Add a build npm script to your /package.json file:

{
  "scripts": {
    "dev": "astro dev .",
    "build": "astro build ."
  }
}

Then run:

npm run build

Now upload the contents of /_site_ to your favorite static site host.