参考文章:
https://swift.ctolib.com/imsnif-synp.html
https://segmentfault.com/a/1190000017239545?utm_source=tag-newest
一 、首先package.json 和 package-lock.json 是 npm管理 包依赖的配置文件。而 yarn.lock 是yarn 管理包依赖的文件。 npm和yarn是管理包的工具。
二 、 package.json 和 package-lock.json 的区别
这个是由于npm版本5.0前后版本改动所引起的。
语义版本控制 X,Y,Z,分别是主要版本,次要版本和补丁版本
例如:1.2.3,主要版本1,次要版本2,补丁3。
默认情况下,npm 安装最新版本,并预先插入版本号,例如 “^1.2.12”,这表示至少应该使用版本 1.2.12,但任何高于此版本的版本都可以,只要它具有相同的主要版本,由于次要版本和补丁编号仅代表错误修正和非破坏性添加, 你可以安全地使用任何更高版本的同一主要版本。
npm 5.0之前只要 package.json 就可以管理包依赖 。
npm5.0以后 还需要 pakge-lock.json管理包依赖, package.json 负责主要版本控制,pakge-lock.json负责次要版本和补丁版本的控制,这样项目所下载的依赖包都是相同的,不会出现问题。
三、yarn.lock和package-lock.json的作用相同,只是管理工具不同,格式不一样。
四、yarn.lock和package-lock.json的相互转换
首先安装 synp
npm install -g synp
1. yarn.lock => package-lock.json
yarn # be sure the node_modules folder dir and is updated
synp --source-file /path/to/yarn.lock
# will create /path/to/package-lock.json
2.package-lock.json => yarn.lock
npm install # be sure the node_modules dir exists and is updated
synp --source-file /path/to/package-lock.json
# will create /path/to/yarn.lock
3. 用代码的方式转换
const { npmToYarn, yarnToNpm } = require('synp')
const libPath = '/path/to/my/lib'
const stringifiedYarnLock = npmToYarn(libPath)
const stringifiedPackageLock = yarnToNpm(libPath)