Different approaches to testing your own packages: local files
Tags: npm, beginners, node, tutorial
Published: 2022-12-22 15:23:27

##Introduction 
Let’s say you’re developing a new package; it doesn’t matter if it’s a really cool library of React components or a great new set of utils for NodeJS based projects. We all know that the first step to making sure that it will be compatible with different node versions and will work smoothly and without errors is having a proper set of tests. 

However, perhaps you also want to test it locally in one of your projects before publishing it to [npm](https://www.npmjs.com) / [yarn](https://yarnpkg.com) so everyone can start using it. And thinking wider, not only focus on the first release but also take into account new updates that you want to try before publishing them. 

In this series of posts, we’ll describe four alternatives you can use to achieve this purpose. They are sorted by difficulty, but that’s not the only factor to take into account, because the most advanced ones also offer a set of utils that the easier ones don’t have. So, it’s up to you to decide which one fits best for your use case. 

We’ll briefly explain how to use these techniques and the benefits of:
> 1. **Linking local files**
> 2. [npm link](https://dev.to/one-beyond/different-approaches-to-testing-your-own-packages-locally-npm-link-4hoj)
> 3. [npm yalc](https://dev.to/one-beyond/different-approaches-to-testing-your-own-packages-locally-npm-yalc-3l97)
> 4. [Verdaccio](https://dev.to/one-beyond/different-approaches-to-testing-your-own-packages-locally-verdaccio-5hd8)
> 5. [Relative deps](https://dev.to/one-beyond/different-approaches-to-testing-your-own-packages-locally-relative-deps-2c17)

So, let’s start with the first approach! 

##Local files
There is an extremely easy way to add a package to our project from a local dependency, and those are the steps. 

First of all, let’s imagine we have our projects structured as in the following image 

![Folder filesystem with two projects at same level](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1wwk23vdgrx8oh3zefxh.png)

*  Go to the root project of your library, install the package and build the library of the local package: 
``` 
$ cd my-fancy-library 
$ npm i && npm run build 
```

*  As the next step we must move the project to where we need to use our fancy library as a local package and install it 
```
$ cd my-awesome-project 
$ npm i –-save ../my-fancy-library 
```
This command will create a link between the two projects, adding the library as dependency 


![package.lock entry with relative route to a my fancy library folder](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfk1wfs0tn1ucdug2uz3.png)


And create a link inside the `node_modules/@ks` folder 

![my fancy library folder with sym link](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tgq5murstxmfz81gl9fn.png)

*  Now every time we modify the local package, we must rebuild the library to allow our project to detect the changes and rebuild it, or.... we can update the package.json file and add a new command to watch and rebuild the library on every change: `"build:watch": "rollup -c --watch && copyfiles -f ./src/**/assets/* ./dist/assets"`