在monorepo设置上自动碰撞package.json版本

时间:2018-05-23 15:54:11

标签: angular npm

我将Angular 6 app设置为monorepo,需要将项目发布到NPM和演示应用程序。我想使用 SELECT r.id , r.url FROM recipes r WHERE NOT EXISTS ( SELECT 1 FROM recipe_ingredients s1 WHERE s1.fk_recipe = r.id AND s1.fk_ingredient = 307 ) AND EXISTS ( SELECT 1 FROM recipe_ingredients s2 WHERE s2.fk_recipe = r.id AND s2.fk_ingredient = 42 ) 来突破应用和项目的版本。

我的结构是这样的:

npm version

当我在MyFolder root上运行| MyFolder/ | -- package.json <= "Demo App" package file | -- src/ | -- projects/ | -- mylibrary/ | -- package.json <= My Angular Library package file 时,它只更新演示应用程序的版本号,而我希望它用新版本更新演示应用程序和库的package.json文件。

我知道我可以两次运行npm version命令,但我宁愿一步到位,以免忘记做其中一个。

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

1 个答案:

答案 0 :(得分:3)

我正在使用一个小的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))
   );

我正在package.json的“版本”脚本中调用此脚本。这是在npm设置新版本之后但在提交git之前执行的。然后,我将文件添加到git中(您无需提交,因为npm可以解决该问题):

package.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",
   }
}

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