Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nicojs/node-link-parent-bin
A tool to link the bins of the your npm dependencies to child packages in a node multi-package repository
https://github.com/nicojs/node-link-parent-bin
Last synced: about 2 months ago
JSON representation
A tool to link the bins of the your npm dependencies to child packages in a node multi-package repository
- Host: GitHub
- URL: https://github.com/nicojs/node-link-parent-bin
- Owner: nicojs
- Created: 2017-04-12T06:43:29.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-08T19:33:45.000Z (almost 2 years ago)
- Last Synced: 2024-04-14T20:05:42.472Z (9 months ago)
- Language: TypeScript
- Homepage:
- Size: 594 KB
- Stars: 43
- Watchers: 3
- Forks: 11
- Open Issues: 8
-
Metadata Files:
- Readme: readme.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
[![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fnicojs%2Fnode-link-parent-bin%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/nicojs/node-link-parent-bin/master)
![CI](https://github.com/nicojs/node-link-parent-bin/workflows/CI/badge.svg)# Link parent bin
Link the bins of parent (dev) dependencies to the child packages in a multi-package [lerna](https://lernajs.io/)-like project. Stuff just works as expected.
**NOTE: This package is no longer needed and thus deprecated. Since recent NPM releases, any parent directory's "node_modules/.bin" is automatically added to the PATH when using `npm run`.**
## About
Let's say your repo looks like this:
```
root/
package.json
packages/
package-1/
package.json
package-2/
package.json
```Well... you're probably managing your `devDependencies` at root level only. For example: you have one `mocha` installed at root with `npm i -D mocha`.
Now if you add an npm script in `package-1/package.json`:
```json
"scripts": {
"test": "mocha"
}
```And run:
```bash
$ npm run test> [email protected] test /package-1
> mocha'mocha' is not recognized as an internal or external command
npm ERR!
```...thats not so nice. You're basically forced to run all npm scripts from the root level. *But* after running `link-parent-bin`:
```bash
$ npm run test> [email protected] test /package-1
> mochalinked from parent...
√ and it worked!
```## Getting started
Install the package in the **root** of your multiple packages repository.
```bash
npm i -D link-parent-bin
```Add the following npm script in your root `package.json`:
```json
"scripts": {
"link-parent-bin": "link-parent-bin"
}
```Run it with `npm run link-parent-bin`.
```bash
npm run link-parent-bin[INFO] ParentBinLinker - Linking dependencies ["mocha"] under children ["package-1", "package-2"]
```And your done.
## Improve your workflow
Since you're probably not releasing your parent module anyway, it might be better to add the linking to the post-install step:
```json
"scripts": {
"postinstall": "link-parent-bin"
}
```*-or if you're using lerna*
```json
"scripts": {
"postinstall": "lerna bootstrap && link-parent-bin"
}
```This way, other developers don't have to run this script manually.
## Command line options
```bash
$ node_modules/.bin/link-parent-bin --helpUsage: link-parent-bin [options]
Options:
-V, --version output the version number
-c, --child-directory-root The directory that hosts the child packages relative to the parent root. (default: "packages")
-d, --link-dev-dependencies Enables linking of parents `devDependencies`. Defaults to: true (default: true)
-s, --link-dependencies Enables linking of parents `dependencies`. Defaults to: false (default: false)
-o, --link-local-dependencies Enables linking of parents `localDependencies`. Defaults to: false (default: false)
-l, --log-level Set the log level (default: "info")
--filter Specify a [minimatch](https://www.npmjs.com/package/minimatch) glob pattern to specify which child packages under the child packages directory should receive symlinks. (default: "*")
-h, --help display help for command
```## Use programmatically
```js
const { ParentBinLinker } = require('link-parent-bin');
const linker = new ParentBinLinker({ childDirectoryRoot: 'packages', linkDevDependencies: true, linkDependencies: false, linkLocalDependencies: false });
linker.linkBinsToChildren()
.then(() => console.log('done'))
.catch(err => console.error('Error Linking packages', err));
```Type declaration files are included for the TypeScript developers out there.