How-to-lock-version

Stars
5

how to lock version ?

https://rsdoctor.dev/zh/blog/topic/duplicate-pkg-problem

Updated, moved to https://rsdoctor.dev/blog/topic/duplicate-pkg-problem


pnpm "workspace" ""

workspace

package.json hack

workspace react

{
  "name": "a",
  "dependencies": {
    "react": "18.2.0"
  }
}

`` node_modules

(overrides and .pnpmfile.cjs)

workspace

package.json

overrides pnpm "a>b":"" package.json

{
  "pnpm": {
    "overrides": {
      "[email protected]>loose-envify": "1.0.0", // 1
      "react>loose-envify": "1.0.0",        // 2
      "loose-envify": "1.0.0"               // 3
    }
  }
}

1. "[email protected]>loose-envify": "1.0.0"

"[email protected]" package.json loose-envify 1.0.0 "dependencies" "devDependencies"

2. "react>loose-envify": "1.0.0"

react@*>loose-envify

"react@*"(reactreact@16 react@17 react@18) package.json loose-envify 1.0.0

3. "loose-envify": "1.0.0"

*>loose-envify

package.json loose-envify 1.0.0 workspace ( monorepo )

** a>b>c **

lockfile workspace

pnpm peer Hack SoonIter/pnpm-peer-trick

// package.json
"overrides": {
  "react>loose-envify>js-tokens": "8.0.0", // 
  
  "react>loose-envify": "1.1.0",           // 
  "[email protected]>js-tokens": "8.0.0",
}

.pnpmfile.cjs , overrides

hooks.readPackage(pkg, context): pkg | Promise<pkg> Allows you to mutate a dependency's package.json after parsing and prior to resolution.

function readPackage(pkg, context) {
  if (pkg.name === 'react') {
    pkg.dependencies["loose-envify"] = "1.0.0";
  } 
  return pkg;
}
module.exports = {
  hooks: {
    readPackage,
  },
};

workspace resolve bundler

resolve.alias

react

{
  "name": "c",
  "dependencies": {
    "react": "18.2.0",
    "@babel/runtime": "7.21.0"
  },
  "license": "MIT"
}
const path = require('path');

module.exports = {
  //...
  resolve: {
    alias: {
      "@babel/runtime": path.resolve(__dirname, 'node_modules', '@babel/runtime'),
      "react": path.resolve(__dirname, 'node_modules', 'react'),
    },
  },
};