NextJs template not building with Yarn
Describe the Bug
When using YARN instead of NPM on freshly created NextJS template (using create-sitecore-jss) it fails to build due to missing dependencies. Tested with 21.7.1.
missing modules @sitecore-feaas/clientside and others
To Reproduce
run
npx [email protected] nextjs
remove package-lock file
run yarn using yarn v1.22.x
run yarn start:connected
Expected Behavior
Yarn 1.x doesn't handle peerDependencies on imported packages and require them to be listed as dev or normal dependencies https://github.com/yarnpkg/yarn/issues/1503
NextJS Template should explicitly install all Peer Dependencies (as it was before in 21.6.3) OR all peerDependencies should be optional and not use require in bundled code. At the same time version of deps should be should be lenient. (https://nodejs.org/en/blog/npm/peer-dependencies).
Possible Fix
No response
Provide environment information
- Sitecore Version: 10.3
- JSS Version: 21.7.1
- Browser Name and version: N/A
- Operating System and version (desktop or mobile): Windows, yarn v1.22.21
- Link to your project (if available):
@SLTKA seems like this is related to a previously reported issue. Please refer to the last comment to work around this.
@SLTKA seems like this is related to a previously reported issue. Please refer to the last comment to work around this.
Hi @sc-addypathania thank you for the link. I'm not sure how this helps with yarn 1.x which always works as npm would with legacy-peer-deps flag and there is no option to change this.
One obvious solution would be to use npm instead of yarn and we would not have any issue. Or add missing things manually (which we did), but both approaches are not resolving the core issue on this bug report.
Below is just an opinion please don't read it as any guidance or desire for action:
Consumer (the sample projects) of packages need to ensure that they install all peer dependencies. Other dependencies should be TRULY optional and should not cause any issue (which is not the case now). On the other hand, peer dependencies can be still required (not optional), so possibly you need to consider including what is not optional into package.json's dependencies or devDependencies lists (like it was before, but "optimized" in recent versions) to ensure that those peers installed correctly.
In summary, peerDependancies of your package should be explicitly visible in consumer's package.json to ensure consumers well aware of versions they selected for them since you delegated control to them (by using peer and not default dependencies). What is not there should not demand installation and code should handle absence of the package safely.
The other way is to ignore people preferences on package manager and to clearly document that other (not npm) package manages are not supported with your solution.
@SLTKA I understand your concern now. I have added this to our backlog, we will soon make a decision on how to handle this issue with yarn.