ES Modules

Open
#284 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Stale
Tech stack
javascript
Domain
web-dev

Research direction

Review the current *.modern.js distribution and existing <script src="hyperscript.js"> usage. Compare the browser behavior described for local .html files, CORS, and type="module". Done is a maintainer decision on whether to document or pursue an ES-module distribution or naming change.

Written by the indexing model from the issue text.

Description

Feel free to convert this into a Github Discussion.

Hello, you may be stumbling upon this thinking "why isn't the ES Module the main form of distribution for hyperscript?"

I want to have a public thread of the pitfalls for this as it will likely become re-occurring as other libraries experiment with this while hyperscript grows in popularity.

ES Modules are not a drop-in replacement for classic modules, and bring their own barriers to entry:

  1. ES Modules require a server environment setup because of CORS.
    1. Right now, hyperscript just works -- You can run plain .html files directly off your local disk. No server setup requirement. This is a competitive advantage and makes us an easy recommendation to newcomers of web development.
    2. Playing with real hyperscript is IMHO the quickest way to make a new user. Getting to that point needs to be friction free: the language is already different enough! Someone from reddit or the orange site can download a mindblowing example like hyperwordle.html and tweak it straight away.
    3. It will be bad for growth of the language for users to get hung up on advanced topics like CORS-- We want them to see how awesome hyperscript is without putting immediate stumbling blocks in the way.
  2. ES Modules will break all sites currently using hyperscript: <script src="hyperscript.js"></script> 👀 (modern browsers fail with an error unless you add type="module")
    1. It's worth noting this gotcha and import are extra knowledge not always known to newcomers outside of Node or Deno in general...

Personally I think it'd be smart to rename *.modern.js to *.module.js or *.mjs (or another standard), because its current form is misleading- and will lead to many fun "lets go to es modules" tickets in the future.

I love that Node / Deno got ES Modules in the browser (and its great when working in those stacks), but they are not a drop in replacement as implemented in the standard as of 2022.

Dominant language
JavaScript
Stars
3.8k
Forks
171
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from bigskysoftware/_hyperscript

All issues in bigskysoftware/_hyperscript

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.