This issue is intended to outline a the short and long term planning of the project for review and consensus gathering. It is broken down into the following milestones as part of the discovery done as part of the NoNo POC and the work to port that to Greenwood here in #417.
This will also serve as a way to update current GitHub Issues, Projects, Milestones
This is work needed to accomplish the bulk of the work necessary to get #355 merged without much disruption to existing users. Merged into an ongoing release/1.0.0 release branch and tracked in the Architecture Digest Project / MVP Milestone.
Will want to validate these using an rc or next branch release before merging into master
Main thing here should be ensure that performance improves significantly and a number of existing issues in the backlog can be resolved. Each of the below numbered items would be a PR and tracked in the release branch PR.
PR and associated TODOs from #417
Refactor serve.js into plugin based architecture bring done as part of #185
SPA support - delegated to #354
(how to) handle strict / ssg optimization in greenwood.config.js
Test more dependencies to ensure proper handling of CJS vs ESM based - tracked in #429
Publish to next branch and test in critical consumer projects - #485
Roadmap to 1.0 by 12/31/2021
Things we should try and complete by end of year to achieve a 1.0. The aim is to complete low effort features that introduce / exercise new APIs, rounds out certain key features needed as part of the Feature Parity work.
[x] Noticed that the CSS puppeteer (and whitespace from us?) puts into an index.html page is almost 10KB!!! This may be causing style collisions colliding with styles š ? Either way, we should control the HTML output. If want to support inlining CSS great, but then we also shouldn't ship it over the network either. One or the other. Will make an issue to track this specific issue of junk in the trunk, and another to track optimizing for inlining CSS (may not work "work" for CSS-in-JS or else you get the FOUC thought...). - see #453 for more context
will leave this the way it is for now
[x] Right now we have to process everything twice to support the user's PostCSS / Babel (once in serve and again in bundle / rollup since we read from file, not the server) in Rollup . It would be nice if Rollup could start from the processed output of the serve lifecycle so we don't have to re-run userland PostCSS again. In general, Rollup is doing a lot of inefficient work, would be great to refactor the whole thing from top to bottom. - see #453 for more context
not sure what exactly would was actionable here so not sure anything is needed here. I think by disabling pre-rendering as part of #518 , this duplication concern would be avoided.
not sure what exactly would was actionable here, assuming the input for Rollup could just point to src/>. Nothing worth tracking for now, IMO.
[x] Query Sorting / Filtering - do this server side and inject current page for grapqhl side / slimmer fetching? do this through the client instead (filter out the "dead pages" at the response level)?'
I think this was meant to be along the lines of a getServerSideProps type thing from NextJS. I think this is better captured as a 2.0 discussion topic instead of window.location.
[x] need to ensure a clear distinction between when file extensions are / aren't needed when using import as the spec says they should always be there but for now, will make it so _nodemodules can be bare, and can make an issue to add support for bare module specifier as a plugin - https://github.com/ProjectEvergreen/greenwood/issues/536
@rollup/plugin-replace: 'preventAssignment' currently defaults to false. It is recommended to set this option to `true`, as the next major version will default this option to `true`.
[x] Should create an issue to track determining best optimization settings based on mode setting (at least by default). Not all scripts are created equally, preload vs prefetch. Router and GraphQL should probably use prefetch. - https://github.com/ProjectEvergreen/greenwood/discussions/545
[x] Should make an issue to tracking adding per <link> / <script> overrides for inline and static optimization settings
[x] For partial route filename hashing, might require a refactoring of how HTML optimization happens, since when doing it during serialization, you only assume that that one individual page has been built (since we are in a loop), and not the entire set, which means you can't use the graph to operate on the whole group to generate the same <routes for all pages. Saved a WIP branch here and will track as a follow up discussion. https://github.com/ProjectEvergreen/greenwood/issues/547
[x] Start a discussion about how to scale and apply a consistent design system over time to the website on pace for 1.0 release, to account for new features intended to be added that can be incorporated - https://github.com/ProjectEvergreen/greenwood/discussions/503
These are tasks that can be worked on in the normal course of maintaining Greenwood and shouldn't require introducing any breaking changes. Really valuable features should have the Post 1.0 Milestone assigned so that contributors can get some visibility into where help could be applied. Post 1.0, we would probably moved to quarterly time boxed projects to track our status.
Maybe when we get to this point, we can all pick a couple tasks and start from there? We can keep this list flexible.
1, Image loading plugin
This issue is intended to outline a the short and long term planning of the project for review and consensus gathering. It is broken down into the following milestones as part of the discovery done as part of the NoNo POC and the work to port that to Greenwood here in #417.
This will also serve as a way to update current GitHub Issues, Projects, Milestones
Questions
<meta>
component / package still needed? - yes! have some react-helmet like featuresFeature Parity (relatively) by 12/31/2020
This is work needed to accomplish the bulk of the work necessary to get #355 merged without much disruption to existing users. Merged into an ongoing
release/1.0.0
release branch and tracked in the Architecture Digest Project / MVP Milestone.Will want to validate these using an
rc
ornext
branch release before merging intomaster
Main thing here should be ensure that performance improves significantly and a number of existing issues in the backlog can be resolved. Each of the below numbered items would be a PR and tracked in the release branch PR.
PR and associated TODOsfrom #417Refactor serve.js into plugin based architecturebring done as part of #185SPA support- delegated to #354optimization
in greenwood.config.jsGraphQL as a package, or something simpler@data/client
instead offetch
Handle loading prismjs- delegated to #427How to handle user context options / default CLI templates/- tracked in #428Refactor serve.js into middleware based design- #519create JSON and CSS plugins using- see #185import.meta.url
Smarter handling of- deferred to #304<title></title>
tag, takes a function?!Restore Polyfill and Google Plugins- will be deferred to #185Babel / PostCSS / Browserslist support- created #426Enable / get all specs passing- tracked in #428Rollup refactoring- tracked #428figure out why I can't use pages/blog/index.htmlfixed by #417confirm- see #433body[unresolved]
is still an issueconfirm#485import-map
support shim needed (for local dev)handling paths in templates, e.g. ./, ../, normalize everything to- tracked in #435/
?, also associated with route misses with using /Revisit all documentationtracked in #430Test more dependencies to ensure proper handling of CJS vs ESM based- tracked in #429Publish to next branch and test in critical consumer projects- #485Roadmap to 1.0 by 12/31/2021
Things we should try and complete by end of year to achieve a 1.0. The aim is to complete low effort features that introduce / exercise new APIs, rounds out certain key features needed as part of the Feature Parity work.
10KB
!!! This may be causing style collisions colliding with styles š ? Either way, we should control the HTML output. If want to support inlining CSS great, but then we also shouldn't ship it over the network either. One or the other. Will make an issue to track this specific issue of junk in the trunk, and another to track optimizing for inlining CSS (may not work "work" for CSS-in-JS or else you get the FOUC thought...). - see #453 for more contextinput
for Rollup could just point to src/>. Nothing worth tracking for now, IMO.window.location
.import
, also(node:82640) ExperimentalWarning: The fs.promises API is experimental
_nodemodules[(https://twitter.com/pikapkg/status/1306643472804278272).
npx
(0CJS - zero config JS) - confirmed as part of #499serve
task from the CLIoptions.ecmaVersion
is required. warning messagenetlify analytics<script>
and<style>
tags fordevelop
(andprod
, of course). Not sure if this can wait until post 1.0, but putting it on this roadmap for now. - https://github.com/ProjectEvergreen/greenwood/issues/534@apollo/client
in client.js - https://github.com/ProjectEvergreen/greenwood/issues/535import
as the spec says they should always be there but for now, will make it so _nodemodules can be bare, and can make an issue to add support for bare module specifier as a plugin - https://github.com/ProjectEvergreen/greenwood/issues/536importMaps
like in plugin-babel /regenerator-runtime
- https://github.com/ProjectEvergreen/greenwood/issues/537import
on NodeJS code - https://github.com/ProjectEvergreen/greenwood/issues/532importMap
androllupAlias
- https://github.com/ProjectEvergreen/greenwood/issues/538server.stop
handling onprocess
end - https://github.com/ProjectEvergreen/greenwood/issues/539createCache
round-robin? š¦ - https://github.com/ProjectEvergreen/greenwood/issues/541- done!eject
functionality<title>
/<meta>
tags (bug) - https://github.com/ProjectEvergreen/greenwood/issues/530build
? (for npx) - discussion - https://github.com/ProjectEvergreen/greenwood/discussions/528mode
setting (at least by default). Not all scripts are created equally,preload
vsprefetch
. Router and GraphQL should probably useprefetch
. - https://github.com/ProjectEvergreen/greenwood/discussions/545<link>
/<script>
overrides forinline
andstatic
optimization settings<link>
/<script>
overrides for preload or prefetch hints - https://github.com/ProjectEvergreen/greenwood/issues/546<routes
for all pages. Saved a WIP branch here and will track as a follow up discussion. https://github.com/ProjectEvergreen/greenwood/issues/547HydrateElement
or looking into things like Declarative Shadow DOM - https://github.com/ProjectEvergreen/greenwood/discussions/548item.item
in children query? - https://github.com/ProjectEvergreen/greenwood/issues/552Post 1.0
These are tasks that can be worked on in the normal course of maintaining Greenwood and shouldn't require introducing any breaking changes. Really valuable features should have the Post 1.0 Milestone assigned so that contributors can get some visibility into where help could be applied. Post 1.0, we would probably moved to quarterly time boxed projects to track our status.
Maybe when we get to this point, we can all pick a couple tasks and start from there? We can keep this list flexible. 1, Image loading plugin