Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUGFIX lts] Force building Ember bundles when targets.node is defined #19397

Merged
merged 1 commit into from
Feb 12, 2021

Conversation

mansona
Copy link
Member

@mansona mansona commented Feb 11, 2021

This is my first attempt at fixing the issue described in #19353

This does not follow @pzuraq's recommendation in #19353 (comment) because it would essentially mean that the prebuilt dev bundle would have Node v10 as the lowest common denominator for all modern browser features, which means that we will not be able to make use of native optional chaining until Node v10 is EOL in April (and going forward this is likely going to cause the dev bundles to be a little bit behind constantly)

Instead this is opting out of using the pre-built bundle when you have node: "current" or really anything listing node in your targets file. This will obviously make the build slower for anyone using fastboot but really we need to make a decision here because the current out-of-the box fastboot experience is very broken since optional chaining was added to the ember.js codebase (e.g. https://github.com/emberjs/ember.js/blob/v3.24.0/packages/%40ember/-internals/runtime/lib/mixins/array.js#L1350 )

Let me know if you have any questions 👍

Comment on lines +287 to +288
// if node is defined in targets we can't reliably use the prebuilt bundles
!targetNode
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is only true if we are also using ember-cli-fastboot or fastboot, we can further narrow this down.

Copy link
Member Author

@mansona mansona Feb 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so... I think you are probably right, in that it wouldn't make much sense in having node: "current" or any sort of node target in your targets file if you are not using ember-cli-fastboot or fastboot, but I think the code as written is "more correct".

Essentially we are pre-building the ember files for certain targets, and if our actual targets are outside that set then we need to revert to providing the tree rather than the pre-built bundle. It just so happens that we don't target node in our pre-built bundles and this is an instant opt out because of that.

Another thing we could explore is to just hash the full targets (not just the browsers) in some way and compare that to the hash of the targets that the pre-built files were built with. This would have the same effect since it will likely never have node in the full targets file.

Thoughts?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we discussed this in the Fastboot meeting and have agreed that it is probably fine to go ahead with. I have confirmed that the concern @rwjblue had about the potential performance impact of this change is not actually an issue. I mentioned in the meeting that it seemed the same speed to build, but that was without any data so I did a quick comparison:

Linked to the version from this PR:

➜  ember-website git:(master) time ember build

Missing symlinked npm packages:
Package: ember-source
  * Specified: ~3.24.0
  * Symlinked: 3.27.0

Environment: development
cleaning up...
Built project successfully. Stored in "dist/".
ember build  24.98s user 7.98s system 112% cpu 29.295 total

Using the latest release of ember (at the time):

time ember build
Environment: development
cleaning up...
Built project successfully. Stored in "dist/".
ember build  25.77s user 7.59s system 122% cpu 27.223 total

Those build times are within the margin of error 👍

@pzuraq
Copy link
Contributor

pzuraq commented Feb 12, 2021

Because it would essentially mean that the prebuilt dev bundle would have Node v10 as the lowest common denominator for all modern browser features, which means that we will not be able to make use of native optional chaining until Node v10 is EOL in April (and going forward this is likely going to cause the dev bundles to be a little bit behind constantly)

Just curious, what's the motivation here exactly? Is it easier to debug native optional chaining/other non-transpiled features? Is it better for performance?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants