{"id":16663867,"url":"https://github.com/jonathanj/emusym","last_synced_at":"2026-04-16T13:37:25.417Z","repository":{"id":57225016,"uuid":"374994289","full_name":"jonathanj/emusym","owner":"jonathanj","description":"Emulate symlinks (for node_modules)","archived":false,"fork":false,"pushed_at":"2021-09-01T15:11:43.000Z","size":67,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-06T08:53:19.915Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonathanj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-08T12:04:12.000Z","updated_at":"2021-09-01T19:54:17.000Z","dependencies_parsed_at":"2022-08-24T11:01:07.395Z","dependency_job_id":null,"html_url":"https://github.com/jonathanj/emusym","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanj%2Femusym","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanj%2Femusym/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanj%2Femusym/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanj%2Femusym/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonathanj","download_url":"https://codeload.github.com/jonathanj/emusym/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243307333,"owners_count":20270256,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T10:42:21.688Z","updated_at":"2025-12-28T13:13:44.428Z","avatar_url":"https://github.com/jonathanj.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"emusym: Emulate symlinks\n========================\n\n\n[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)\n[![Version](https://img.shields.io/npm/v/emusym.svg)](https://npmjs.org/package/emusym)\n[![Downloads/week](https://img.shields.io/npm/dw/emusym.svg)](https://npmjs.org/package/emusym)\n[![License](https://img.shields.io/npm/l/emusym.svg)](https://github.com/jonathan/emusym/blob/master/package.json)\n\nThis tool emulates symlinks by watching source packages for changes, copying\nchanged distribution files (as seen in `npm pack`) into the destination\npackage's `node_modules`.\n\nWhen doing local development on dependencies, `npm link` (or `yarn link`) is a\nvery convenient workflow tool. Unfortunately in some cases build tools do not\nsupport symlinks in `node_modules`, most (in)famously [React Native's Metro bundler](https://github.com/facebook/metro/issues/1).\n\nWhat this tool does _not_ do is create the changes to sync, that is left up to\neach package to produce via the most suitable mechanism. Most build tools offer\nsomething like a `--watch` flag that will incrementally build new output.\n\n\u003c!-- toc --\u003e\n* [Usage](#usage)\n* [Commands](#commands)\n\u003c!-- tocstop --\u003e\n\n\n# Usage\n```sh-session\n## Install the tool as a dev dependency\n$ yarn add -D emusym   # Or `npm install --save-dev emusym` if using npm.\n\n## Link a source package (`other-package`) to the current package.\n$ yarn emusym link ../my/other-package\n✔  success      📦 ../my/other-package → other-package\n✔  success      🔗 other-package → .\n\n## Start watching and syncing changes…\n$ yarn emusym start\n[other-package] › ℹ  info         ☔️  Preserving existing module\n[other-package] › ℹ  info         Linking ../my/other-package → .\n[other-package] › ▲  add:file     package.json\n[other-package] › ▲  add:dir      src\n[other-package] › ▲  add:file     src/index.js\n[other-package] › ●  change:file  src/index.js\n[other-package] › ▲  add:file     src/new.js\n[other-package] › ●  change:file  src/new.js\n[other-package] › ▼  del:file     src/new.js\n```\n\n\n# Commands\n\u003c!-- commands --\u003e\n* [`emusym help [COMMAND]`](#emusym-help-command)\n* [`emusym link [PATH...]`](#emusym-link-path)\n* [`emusym start`](#emusym-start)\n\n## `emusym help [COMMAND]`\n\ndisplay help for emusym\n\n```\nUSAGE\n  $ emusym help [COMMAND]\n\nARGUMENTS\n  COMMAND  command to show help for\n\nOPTIONS\n  --all  see all commands in CLI\n```\n\n_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.2/src/commands/help.ts)_\n\n## `emusym link [PATH...]`\n\nLink a local package by path.\n\n```\nUSAGE\n  $ emusym link [PATH...]\n\nOPTIONS\n  --force        Allow overwriting existing source links.\n  --scope=scope  Add an npm scope to the destination package name.\n\nDESCRIPTION\n  Multiple paths can be provided to link several packages in a single command.\n\nEXAMPLES\n  $ emusym link /somewhere/else/my_thing\n  $ emusym link /somewhere/else/my_*\n```\n\n_See code: [src/commands/link.ts](https://github.com/jonathanj/emusym/blob/v0.1.1/src/commands/link.ts)_\n\n## `emusym start`\n\nStart watching and syncing linked packages.\n\n```\nUSAGE\n  $ emusym start\n\nDESCRIPTION\n  Packages previously linked with the 'link' command will be watched and changes\n  synced back to ./node_modules. Only pack files (npm pack) from the source\n  packages will be synced, meaning each package is responsible for producing its\n  own changes to be synced.\n```\n\n_See code: [src/commands/start.ts](https://github.com/jonathanj/emusym/blob/v0.1.1/src/commands/start.ts)_\n\u003c!-- commandsstop --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonathanj%2Femusym","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonathanj%2Femusym","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonathanj%2Femusym/lists"}