UNPKG

local-package-publisher

Version:

A utility app for publishing your npm packages locally for testing

124 lines (75 loc) 5.08 kB
# local-package-publisher A utility app for publishing your npm packages locally for testing, which works !! [![npm Package](https://img.shields.io/npm/v/local-package-publisher.svg)](https://www.npmjs.com/package/local-package-publisher) [![License](https://img.shields.io/npm/l/local-package-publisher.svg)](https://github.com/debashish2014/local-package-publisher/blob/master/LICENSE) # About You have created this awesome npm package and you want to test it locally, before publishing to [NPM repository](https://www.npmjs.com). What are the options you have? Well, below are some of the possible options, but each of them has some caveat, and as a result, it found out need for this project. 1. **Symbolic Linking** : At the root directory of your npm package under test, run the command `npm link`. It would create a symbolic link to the entire folder to the global namespace. So, a folder will be created in the directory where global packages are stored with the name that is same as that of the value of `name` property in `package.json`. To test/consume this package, at the root of the target project, run `npm link [name]`, where `[name]` is the value of `name` property in `package.json` which is being consumed. **Cons**: Every file in the directory gets linked, which can create problems and can interfere with the build process if the linked package is consumed in another project. 2. **Local NPM Repository** : You can publish the package under test to a local npm repository hosted using these awesome projects like [CNPM](https://cnpmjs.org/),[Sinopia](https://github.com/rlidwka/sinopia), [Verdaccio](https://verdaccio.org/), [local-npm](https://github.com/local-npm/local-npm) etc. **Cons**: You will need to change the registry which npm is pointing to by running `npm set registry http://localhost:[port]`. For most of us this might not be a feasible option due to several reasons, but if it does then it is indeed an option worth considering. 3. **Manual Process** : You can first run `npm pack` command at the root directory of the project under test. It will generate a tar file with the name `[package-name]-[version].tgz`. Then, unzip the tar file content to a directory, separate from your project. Go, to this new directory where the tar contents have been extracted, and run `npm link` from the directory root. Rest of the steps are same as option 1. **Cons**: The process is a bit cumbersome and involves a lot of steps. I have found out the third option i.e. **Manual Process** to be most elegant, even though it requires more steps since it relies on `npm pack` and it ensures that the content it packs will be same as that of when it will be actually published to NPM repository. ### This project is an effort to automate this manual process. # Installation npm install --save-dev local-package-publisher To install the package locally to the project or npm install -g local-package-publisher To install the package globally # Usage Say, you have created a project with the name `my-awesome-new-package` To publish this package, go to root directory of the project and run below command: ``` local-package-publisher -p ``` or ``` local-package-publisher --publish ``` Once you run this command it will give you below success message. ### `my-awesome-new-package` package published successfully to global This command will publish the package globally. It will also create a directory .local-pack with a setings.json file in it, in your project. Please do not delete it. You can safely add below line to `.gitignore` as well. ``` .local-pack ``` **Thats it !!** Now whenever you do any modification in the project and you want to publish the changes, just run the `local-package-publisher -p` command again. # Now, to consume this published package, just go the root directory of the project where you want to consume it, and run below command. It needs to be done only once. ``` npm link my-awesome-new-package ``` **Note**: No need to run above command again and again. # Once, you are done and you want to remove the published package from global, run below command in the root directory of `my-awesome-new-package` project: ``` local-package-publisher -u ``` or ``` local-package-publisher --unpublish ``` Once you run this command it will give you below message. ### `my-awesome-new-package` package has been removed from global # Credit `local-package-publisher` wouldn't be possible without using the modules from the following authors: - [Sindre Sorhus](https://github.com/sindresorhus) - [Josh Junon](https://github.com/qix-) - [JP Richardson](https://github.com/jprichardson) - [TJ Holowaychuk](https://github.com/tj) - [Moxystudio](https://github.com/moxystudio) - [Forbes Lindesay](https://github.com/ForbesLindesay-Unmaintained) - [KARASZI István](https://github.com/raszi) # License Licensed under [MIT](http://www.opensource.org/licenses/mit-license.php) Copyright (c) 2019-2020 [Debashish Pal](https://github.com/debashish2014)