refactor(cli): Schematic runner should use node require mechanism #899
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #898
PR Checklist
Please check if your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
What is the current behavior?
Issue Number: #898
When running schematics, the current code tries to read a directory like
node_modules/.bin/schematics
and execute the script in it. This fails on Yarn PnP because there is nonode_modules
.What is the new behavior?
Uses
require.resolve
which is the standard way to locate scripts in node and works across all package managers.Additionally, the script needs to be started using
spawn("node", [scriptPath, ...otherArgs])
in order forPnP
to properly work because theschematics.js
script may be inside a zip file on Yarn v2. Running it withnode
ensures that theNODE_OPTIONS
environment variable is passed through and that the execution succeeds.You can test the changes in this PR on yarn v2 with PnP mode like this:
Does this PR introduce a breaking change?
Other information
I had to remove the tests for this feature because
jest
does not allow mockingrequire.resolve
: jestjs/jest#9543However, since the functionality is now straight forward and uses standard node functionality I don't think tests are critical.