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
Do not put mutable state on the prototype. #386
Conversation
Note: I've also created ember-cli/ember-compatibility-helpers#36 to fix ember-compatibility-helpers so that they won't add the same plugin twice, but IMHO we should still land the fix here also. |
aa19c0b
to
809fb3c
Compare
Using a mutable object on the addon's prototype causes issues when ember-m3 is consumed by an addon as a direct dependency. The specific setup is: * `ember-m3` depends on ember-compatibility-helpers * `ember-m3` has the following in its `index.js`: ```js module.exports = { name: require('./package').name, options: { m3: true, babel: { loose: true, }, }, }; ``` * addon B depends on `ember-m3` (**not** a dev dep) In this scenario, `ember-m3` will be instantiated twice. Once for addon B's dummy app and again for addon B's direct dependency. Since `ember-m3` had a _mutable object_ on its prototype (yes, you know whats coming now) ember-compatibility-helpers adds a `plugins` array to it and pushes into it. Now that ember-m3 has updated to Babel 7, pushing the same babel plugin into the plugins array twice triggers an error (which is super annoying to debug): ``` Build Error (broccoli-persistent-filter:Babel > [Babel: ember-m3]) in ember-m3/factory.js Duplicate plugin/preset detected. If you'd like to use two separate instances of a plugin, they need separate names, e.g. plugins: [ ['some-plugin', {}], ['some-plugin', {}, 'some unique name'], ] Stack Trace and Error Report: /var/folders/mt/yt2qjpl93ls98lrkrs81rzch000pzv/T/error.dump.246a0987138182f85c209aed25484574.log ```
@rwjblue running into this in my app which has a big combination of internal addons and engines. How does one go about digging into this? Also, the documentation on the ember-cli-babel readme regarding the location of the babel config..
...imagine that plays a role? We need to be able to use all of our addons/engines individually as well a a part of the whole. Struggling pretty hard tracking some of this down |
@dbashford what is the "this" you are running into? If it's exactly the error that @rwjblue posted above from babel about "Duplicate plugin/preset detected." then there are two answers
You can add a debugger probably in Run your build in debugging mode with
And then connect by opening chrome at Print out all the items and you'll be able to see which specific plugins are duplicates.
Look for plugins that have the same alias and same name (keep in mind name may be An alternative approach is to break once you're in the then branch for
Once you know what plugin is conflicting |
Using a mutable object on the addon's prototype causes issues when ember-m3 is consumed by an addon as a direct dependency.
The specific setup is:
ember-m3
depends on ember-compatibility-helpersember-m3
has the following in itsindex.js
:ember-m3
(not a dev dep)In this scenario,
ember-m3
will be instantiated twice. Once for addon B's dummy app and again for addon B's direct dependency. Sinceember-m3
had a mutable object on its prototype (yes, you know whats coming now) ember-compatibility-helpers adds aplugins
array to it and pushes into it.Now that ember-m3 has updated to Babel 7, pushing the same babel plugin into the plugins array twice triggers an error (which is super annoying to debug):