在 monorepo 设置上自动增加 package.json 版本

Blu*_*ret 2 npm angular

我有一个 Angular 6 应用程序设置为 monorepo,其中有一个项目需要发布到 NPM 和一个演示应用程序。我想使用npm version.

我的结构是这样的:

| MyFolder/
| -- package.json   <= "Demo App" package file
| -- src/
| -- projects/
     | -- mylibrary/
          | -- package.json   <= My Angular Library package file
Run Code Online (Sandbox Code Playgroud)

当我npm version在 MyFolder 根目录上运行时,它只更新演示应用程序的版本号,而不是我希望它使用新版本更新演示应用程序和库的 package.json 文件。

我知道我可以只运行 npm version 命令两次,但我宁愿把这一步都做一遍,以免忘记做一个或另一个。

有没有办法可以使用单个命令更新多个 package.json 文件?

pas*_*etz 5

我正在使用一个小的 nodejs 脚本来实现这一点。

const mainPackageJson = require('../package.json');
const glob = require('glob');
const fs = require('fs');

glob.sync('./projects/**/package.json')
   .forEach(location =>
      fs.writeFileSync(location, JSON.stringify({
         ...JSON.parse(fs.readFileSync(location)),
         version: mainPackageJson.version
      }, null, 3))
   );
Run Code Online (Sandbox Code Playgroud)

我在 package.json 中的“版本”脚本期间调用此脚本。这在 npm 设置新版本之后但在提交到 git 之前执行。之后,我将文件添加到 git(您不需要提交,因为 npm 会处理这些):

包.json:

{
   "name": "my-name",
   "version": "1.0.0",
   "scripts": {
      "version": "run-s version:bump-all version:add-all",
      "version:bump-all": "node ./build_utils/bump-version.js",
      "version:add-all": "git add \"*/package.json\"",
   },
   "devDependencies": {
      "npm-run-all": "^4.1.3",
      "glob": "^7.1.3",
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用“glob”库通过 glob 模式获取子文件夹中的 package.json 文件。此外,我使用 npm-run-all 来避免使用“&&”来链接 package.json 脚本中的命令(run-s 来自 npm-run-all 并按顺序运行 2 个命令)