# Best way to install node packages

**URL:** <https://forum.inductiveautomation.com/t/best-way-to-install-node-packages/94748>\
**Category:** Module Development\
**Tags:** ignition81, perspective\
**Created:** [August 16, 2024, 11:58am UTC](https://forum.inductiveautomation.com/t/best-way-to-install-node-packages/94748 "2024-08-16T11:58:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Benjamin\_Furlani](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/benjamin_furlani/32/66084_2.png) [@Benjamin\_Furlani](https://forum.inductiveautomation.com/u/Benjamin_Furlani)\
**Post date:** [August 16, 2024, 11:58am UTC](https://forum.inductiveautomation.com/t/best-way-to-install-node-packages/94748/1 "2024-08-16T11:58:27Z")

</div>

Just looking for a best practice tip.

What is the preferred or best way to go about installing node packages for perspective components?

I originally used the perspective-component SDK example from the IA GitHub and I have installed plenty of packages, but every time I install one with npm or yarn it seems I have to remove all node\_modules folders from web/ web/package/client and web/package/designer then run `yarn cache clean` in web/ and then `yarn --update-checksums` before I can build again. Typically when I install a new node module I go to web/packages/client and run `npm install somepackage\* but that appears to be my problem maybe?

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [August 16, 2024, 3:09pm UTC](https://forum.inductiveautomation.com/t/best-way-to-install-node-packages/94748/2 "2024-08-16T15:09:46Z")

</div>

I use the `com.github.node-gradle.node` plugin like the SDK example, but 1. disable the setup and install tasks:

```kotlin
tasks.nodeSetup {
    enabled = false
}
tasks.npmInstall {
    enabled = false
}

```

and 2. don’t treat the client and designer resources as separate packages, just separate outputs of the same build.

🤷‍♂️

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [August 16, 2024, 3:12pm UTC](https://forum.inductiveautomation.com/t/best-way-to-install-node-packages/94748/3 "2024-08-16T15:12:27Z")

</div>

Actually, your issue is probably workspace related.

> **[workspaces | npm Docs](https://docs.npmjs.com/cli/v7/using-npm/workspaces/)**
>
> Working with workspaces

The SDK example has the client and designer packages in separate workspaces.
