我将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文件?
答案 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个命令)