# @raydeck/wml

> Replaces npm link with something that actually works!

Latest version **0.0.2** (published 2020-05-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install @raydeck/wml
pnpm add @raydeck/wml
yarn add @raydeck/wml
bun add @raydeck/wml
```

Provides the command `wml`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.2 |
| Published | 2020-05-21 |
| First published | 2020-05-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 10 |
| Unpacked size | 57.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 778 |
| Author | dutzi |
| Maintainers | raydeck |

## Links

- npm: https://www.npmjs.com/package/@raydeck/wml
- Repository: https://github.com/wix/wml
- Homepage: https://github.com/wix/wml#readme
- Issues: https://github.com/wix/wml/issues
- npm.io page: https://npm.io/package/@raydeck/wml

## Dependencies (10)

- [q](https://npm.io/package/q.md) ^1.4.1
- [yargs](https://npm.io/package/yargs.md) ^4.7.1
- [colors](https://npm.io/package/colors.md) ^1.1.2
- [extend](https://npm.io/package/extend.md) ^3.0.0
- [uuid-js](https://npm.io/package/uuid-js.md) ^0.7.5
- [fs-extra](https://npm.io/package/fs-extra.md) ^0.30.0
- [inquirer](https://npm.io/package/inquirer.md) ^1.2.3
- [is-there](https://npm.io/package/is-there.md) ^4.3.3
- [untildify](https://npm.io/package/untildify.md) ^3.0.2
- [fb-watchman](https://npm.io/package/fb-watchman.md) ^1.9.0

## Recent versions

- 0.0.2 (latest) — 2020-05-21
- 0.0.0 — 2020-05-21

## README

# <img src="media/logo.png" width="72">

> Tangible symlinks

Wml listens to changes in some folder (using [Watchman](https://facebook.github.io/watchman/)) and copies changed files into another folder.

## Why?

Let's face it, sometimes symbolic links just aren't enough. Github has more than [10K issues](https://github.com/search?utf8=✓&q=support+for+symlinks&type=Issues) with the words "support for symlinks" in them. 

Two examples I've encountered so far were: React Native's packager [lack of support for them](https://github.com/facebook/react-native/issues/637) and Webpack's [inability to find linked modules dependencies](http://webpack.github.io/docs/troubleshooting.html#npm-linked-modules-doesn-t-find-their-dependencies) (working around this has issues of its own). A lot of people resolve to working directly from the node_modules folder in these cases, but *a.* if your package is required by two projects on which you are working simultaneously, you're screwed, and *b.* it just feels wrong.

Wml makes use of Facebook's ultra-fast Watchman to watch for changes in your source folder and copy them (and only them) into your destination folder.

Wml is a CLI tool that works pretty much like `ln -s`. You first set up your links by using the `wml add` command and then run the wml service (`wml start`) to start listening. That's it!

Note that since Wml is based on Watchman it **does not support symlinks**. lol.

## Install

```sh
npm install -g wml
```

## Usage

```sh
# add the link to wml using `wml add <src> <dest>`
wml add ~/my-package ~/main-project/node_modules/my-package
# start watching all links added
wml start
```

## Commands

#### add

`wml add <src> <dest>` (or `wml a`)

Adds a link.

wml will not start listening to changes until you start it by running `wml start`.

Each link is given an unique id, you can see all links and their ids by running `wml list`.
Links are saved to `src/links.json` in your `wml` install directory, meaning that 
your configuration is specific to that `wml` install.

#### rm

`wml rm <linkId>`

Removes a link. Passing `all` as linkId removes all links.

#### start

`wml start` (or `wml s`)

Starts wml.

It first copies all watched files from source to destination folder and then waits for new changes to happen.

#### list

`wml list` (or `wml ls`)

Lists all links.

Shows each link's id, state and source/destination folders.

#### enable

`wml enable [linkId]` (or `wml en`)

Enables a link. Passing `all` as linkId enables all links.

If you don't specify a linkId wml will open in interactive mode.

#### disable

`wml disable [linkId]` (or `wml d`)

Disables a link. Passing `all` as linkId disabled all links.

If you don't specify a linkId wml will open in interactive mode.

Great for re-using old links without having to type them over and over again.

## Miscellaneous

#### Ignored folders

When adding a new link Wml will try to detect if your source folder is a git repository or an npm package, it will then offer to ignore the ".git" and "node_modules" folders for you.

If you want to add more folders to your ignored folders first create a file named `.watchmanconfig` in your source folder, this file should contain Watchman's configuration for this folder. See example below to learn how populate it or check out the [Watchman docs](https://facebook.github.io/watchman/docs/config.html) to learn more about Watchman configurations. 

In the following example we are ignoring the ".git" and "node_modules" folders:

```json
{
    "ignore_dirs": [
        ".git",
        "node_modules"
    ]
}
```

## Contributing

See the [Contributing page](CONTRIBUTING.md).

## License

Copyright (c) 2016 Wix. Licensed under the MIT license.

---
_Source: https://npm.io/package/@raydeck/wml · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
