Search code examples
node.jsnpmpackage.jsonyarnpkg

sync yarn.lock back into package.json and lock


I have package.json and yarn.lock files. yarn.lock has versions locked in, I would like to sync, and lock (without the ^) all the versions in yarn.lock, back into package.json.

Is there any easy way to do that?

In the end, I would like to not have "^" in my package.json at all as it leads to too many troubles, and I would like to upgrade packages specifically and not unknowingly when I run a fresh yarn install.

Is there any tool or way to quickly replace the versions in package.json with those exsisting inside yarn.lock?


Solution

  • I ended up making something myself:

    sync-yarnlock-into-packagejson

    its a tiny utility that can sync existing package.json with yarn.lock.

    syncyarnlock

    Syncs yarn.lock versions into an exsisting package.json file, removing dynamic numbers such as with ^, keeping static versions intact.

    Install

    YARN

    yarn global add syncyarnlock

    or

    NPM

    npm install -g syncyarnlock

    Usage

      Usage: syncyarnlock [options]
    
      Sync `yarn.lock` package versions, into package.json
      Options:
    
        -V, --version                output the version number
        -d, --dir <path>             directory path where the yarn.lock file is located (default to current directory)
        -p, --dirPackageJson <path>  directory of project with target package.json, if not set, -d will be used
        -s, --save                   By default don't override the package.json file, make a new one instead package.json.yarn
        -k, --keepUpArrow            By default the ^ or any other dynamic numbers are removed and replaced with static ones.
        -g, --keepGit                By default direct git repositories are also replaced by the version written in yarn.
        -l, --keepLink               By default direct link: repositories are also replaced by the version written in yarn.
        -a, --keepVariable <variable>By default everything is converted to yarn version, write a part of the type you wish not to convert, seperate by comma if more than one, to not replace git and link you would use +,link:
        -h, --help                   output usage information
      Transforms yarn.lock files to JSON
      
      Examples:
      //perform inside a directory with yarn.lock and package.json, will output package.json.yarn in the same directory.
      syncyarnlock