Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

lnk

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lnk

Create links between files cross-platform

  • 1.1.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

lnk Build Status Build status Coverage Status XO code style

Create links between files cross-platform

Why

  • Promise interface
  • Create hard links, directory junctions and symbolic links depending on the platform

Install

$ npm install lnk --save

Usage

$ tree
.
└── assets
    ├── favicon.ico
    └── style
        ├── app.css
        └── vendor.css

2 directories, 3 files
const lnk = require('lnk');

lnk(['assets/favicon.ico', 'assets/style'], 'dist')
	.then(() => console.log('done'));
$ tree
.
├── assets
│   ├── favicon.ico
│   └── style
│       ├── app.css
│       └── vendor.css
└── dist
    ├── favicon.ico              // hard link to assets/favicon.ico
    └── style -> ../assets/style // symlink; directory junction on windows

4 directories, 4 files

Glob support

lnk don't support globbing by itself, lnk supports arrays of targets and Promises which resolve to these though:

const lnk = require('lnk');
const globby = require('globby');  // npm install globby

lnk(globby('assets/*'), 'dist')
	.then(() => console.log('done'));

API

lnk provides a cross-platform convenience wrapper for the fs.link and fs.symlink functions.

lnk(targets, directory, [opts])

Returns a Promise.

lnk.sync (targets, directory, [opts])

Synchronous version of lnk.

targets

Type: string|string[]

Targets of the links. lnk() additionally supports Promise<string|string[]>.

directory

Type: string

Destination directory.

opts

Type: object

cwd

Type: string
Default: process.cwd()

The current working directory for targets and directory.

force

Type: boolean
Default: false

Overwrite existing files.

type

Type: string
Values: 'default', 'hard', 'symbolic', 'junction' or 'directory'
Default: 'default'

By 'default', lnk tries to create hard links, if this fails for a target because it is a directory lnk tries to create a directory junction (symbolic link on modern OSs) for this target.

parents

Type: boolean
Default: false

Use full source file name under directory.

// w/o parents:
lnk('assets/style/foo.css', 'dist/assets/style', ...);

// w/ parents:
lnk('assets/style/foo.css', 'dist', {parents: true}, ...);
rename

Type: string|object|function(object):(string|object)

Filepath or function mapping a path object to a filename or path object; used to modify the path of the link before creating.

Basic Example
$ tree
.
└── assets
    ├── favicon.ICO
    └── style
        ├── app.css
        └── vendor.css
const path = require('path');

Promise.all([
	lnk('assets/style', 'dist', {rename: 'css'}),
	lnk('assets/favicon.ICO', 'dist', {rename: pathOfLink => pathOfLink.base.toLowerCase()})
]).then(() => console.log('done'));
$ tree
.
├── assets
│   ├── favicon.ICO
│   └── style
│       ├── app.css
│       └── vendor.css
└── dist
    ├── css -> ../assets/style // symlink; directory junction on windows
    └── favicon.ico            // hard link to assets/favicon.ICO
Sophisticated Example
$ tree
.
└── assets
    ├── favicon.ico
    └── style
        ├── app.css
        └── vendor.css
const rename = pathOfLink => Object.assign(pathOfLink, {
	dir: path.join(pathOfLink.dir, '42'),
	base: `prefix-${pathOfLink.name}` + pathOfLink.ext.toLowerCase()
});

lnk(['assets/favicon.ico', 'assets/style'], 'dist', {rename})
	.then(() => console.log('done'));
$ tree
.
├── assets
│   ├── favicon.ico
│   └── style
│       ├── app.css
│       └── vendor.css
└── dist
    └── 42
        ├── prefix-favicon.ico                 // hard link to assets/favicon.ico
        └── prefix-style -> ../../assets/style // symlink; directory junction on windows
log

Type: function
Default: (level, prefix, message) => {}

A logger function, you may want to use console.log or npmlog.log, see npmlog documentation for details.

  • lnk-cli – CLI version of this project
  • globby – if you need glob support for multiple patterns
  • cpy – if you need to copy multiple files
  • del – if you need to delete files and folders

License

MIT © Michael Mayer

Keywords

FAQs

Package last updated on 07 Jan 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc