ionic-team / ionic-team/ionic-cli
bug: "ionic serve" fails to detect vite in npm workspaces
- Lenguaje dominante
- TypeScript
- Estrellas
- 2k
- Forks
- 682
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
### Prerequisites
- [X] I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#creating-an-issue).
- [X] I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
- [X] I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already report this problem, without success.
### Ionic Framework Version
v7.x
### Current Behavior
In my ionic/react project, when I run "ionic serve" it gives the following error:
```
[INFO] Looks like vite isn't installed in this project.
This package is required for this command to work properly. The package provides a CLI utility, but the vite
binary was not found in your PATH.
```
The problem is that vite *is* installed, but ionic is unable to detect it. This happens because my project is a monorepo using npm workspaces - one of the packages (`packages/ui-ionic`) is my Ionic-basd application, generated from the template, while other subpackages represent libraries. Note that in every other way the project works, I'm able to run unit tests, and `vite dev` does what you would expect.
The `vite` can be found at `/node_modules`, however because my ionic app is in a subdirectory, I have to cd to that subdirectory to order to run the frontend. When I do this, `ionic serve` fails with the error message. I'm guessing that the `ionic` command is checking only the `node_modules` in the current directory, instead of searching upwards in the file hierarchy as per the standard node resolution algorithm.
Also note that installing vite explicitly as a dependency of the subpackage doesn't help, because npm still hoists it to the root level.
### Expected Behavior
The `ionic` command should check for the existence of vite using the standard node module resolution algorithm instead of assuming that it's in the node_modules in the current directory.
### Steps to Reproduce
1. Create a blank Ionic project using the wizard.
2. Move the src, public, index.html and vite.config.ts into a subdirectory named packages/test. Create a minimal package.json and tsconfig.json and place it in the same directory.
3. Add "workspaces": [ "./packages/*" ] to the top-level package.json.
4. Copy the "scripts" commands from the top-level package into the subpackage (you only need the ones that invoke Vite).
Now cd to packages/test and try to run the app. You should see the error message about Vite not being installed.
### Code Reproduction URL
_No response_
### Ionic Info
Ionic:
Ionic CLI : 7.1.1
Utility:
cordova-res : not installed globally
native-run : not installed globally
System:
NodeJS : v18.10.0
npm : 8.19.2
OS : macOS Monterey
### Additional Information
_No response_
Guía de contribución
Evaluación
Este issue todavía no se ha evaluado.