Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/danielkucal/symlink-resolver

Simple tool for replacing symlinks by real files and vice versa. Created for #nativescript builds.
https://github.com/danielkucal/symlink-resolver

build-tool nativescript symlink symlink-alternative symlinks

Last synced: 3 months ago
JSON representation

Simple tool for replacing symlinks by real files and vice versa. Created for #nativescript builds.

Awesome Lists containing this project

README

        

# Symlink Resolver
This tool allows to replace symbolic links by real files in given directory and revert the changes back to symlinks. All the magic in a simple cli command!

### Installation
```
npm install symlink-resolver --save-dev
```
[Node.js](https://nodejs.org/) v6.4+ and [POSIX](https://en.wikipedia.org/wiki/POSIX#POSIX-certified)-standarized operating system are required.

To your `package.json` `scripts` section add the following rule:
```
"scripts": {
"symlink-resolver": "symlink-resolver",
}
```

## Basic Usage
For fast usage you can simply run:
+ `npm run symlink-resolver build ./symlinks/path` to **replace** symlinks by real files in ./symlinks/path
+ `npm run symlink-resolver clear ./symlinks/path` to **restore** all symlinks

First command will create `./symlinks/path/.symlinks.json` file which contains changes that have been made in this directory. It will be removed by the second command, however you can still add to your `.gitignore` the following rule: `.symlinks.json`

##### How to create a symlink?
Use `ln -s target source` command, i.e.:
```
ln -s ../../source/path/linked-dir ./project/src/linked-dir
```

### Advanced usage
If you need this feature to make a build, then I strongly recommend to automatize your building process:
```
"scripts": {
"symlink-resolver": "symlink-resolver",
"prebuild": "npm run symlink-resolver build ./symlinks/path",
"postbuild": "npm run symlink-resolver clear ./symlinks/path",
"build": "your build command should be under this name"
}
```
This way you will be able to make a build and edit your files without worries.

However, in some cases like emulating a device, the "post" script will not be executed. If this is also your case then take a look at example workaround for NativeScript:
```
"scripts": {
"symlink-resolver": "symlink-resolver",
"prens-bundle": "npm run symlink-resolver build ./symlinks/path",
"delay-clear": "sleep 22 && npm run symlink-resolver clear ./symlinks/path",
"ns-bundle": "npm run delay-clear | ns-bundle",
"start-android-bundle": "npm run ns-bundle --android --start-app",
"start-ios-bundle": "npm run ns-bundle --ios --start-app",
"build-android-bundle": "npm run ns-bundle --android --build-app",
"build-ios-bundle": "npm run ns-bundle --ios --build-app"
},
```

#### Advanced configuration
You can adjust `Config` to your needs.
- Want to use custom symlinks file name? No problem, just set `Config.symlinksFile` to whatever you want.
- Need some custom behavior? Simply extend `SymlinkHelper` class and set `Config.helperClass` to yours.
```
export interface ConfigInterface {
rootDir: string;
symlinksFile: string;
helperClass: typeof SymlinkHelper;
}
```

##### Happy developing!