Have ideas to improve npm?Join in the discussion! »

    lnk

    1.1.0 • Public • Published

    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.

    Related

    • 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

    Install

    npm i lnk

    DownloadsWeekly Downloads

    1,047

    Version

    1.1.0

    License

    MIT

    Last publish

    Collaborators

    • avatar