facebook/create-react-app

Follow-up work for compiling node_modules

gaearon opened this issue · 3 comments

Follow-up for #3776.

First thought: we should have an end-to-end test that depends on ES6 package (e.g. chalk@2.x). After the build, we can run ESLint in ES5 mode with no rules on the compiled bundle so that end-to-end test fails if we accidentally include ES6 code.

There may be more things we need to test. I’m not sure. Thoughts?


My original todos:

  • Consider opt-out heuristics (e.g. "too old" engines field that implies we don't need compilation)
  • Verify this doesn't break third-party code
  • Verify generators and async/await work in deps
  • Verify helpers for the above are being shared (e.g. runtime transform)
  • Verify .babelrc in packages gets ignored
  • Create end-to-end tests for these situations

A couple of considerations/questions:

  1. I propose we create a "fake" ES6 package crafted so that every main ES6+ syntax feature is certainly included.

  2. The "too old" heuristic is to be done on the node_modules if I understood that right?

  3. In order to verify it doesn't break third-parties, we could just add an integration test that relies on the "fake" ES6 package, similarly to what we already do.

  4. In order to verify that helpers are being shared, could a regex be sufficient? What if another dep ships with a copy of that helper?

I propose we create a "fake" ES6 package crafted so that every main ES6+ syntax feature is certainly included.

Yes please.

The "too old" heuristic is to be done on the node_modules if I understood that right?

Yes.

In order to verify it doesn't break third-parties, we could just add an integration test that relies on the "fake" ES6 package, similarly to what we already do.

Yep.

In order to verify that helpers are being shared, could a regex be sufficient? What if another dep ships with a copy of that helper?

I think it's okay to just verify this manually. I don't expect this to break once we make sure it works.

I don't think these are relevant?