这是我的package.json文件
{
"name": "project-1",
"version": "1.0.0",
"description": "TestCafe project",
"main": "index.js",
"scripts": {
"ci:build": "npm ci",
"test": "testcafe",
"precise-commits": "precise-commits"
},
"repository": {
"type": "git",
"url": "http://github.com/dev/test/testcafe-test"
},
"author": "Tom",
"license": "ISC",
"devDependencies": {
"precise-commits": "^1.0.2",
"prettier": "^1.16.4",
"random-words": "^1.1.0",
"testcafe": "^1.8.0"
},
"dependencies": {
"page-objects": "1.6.169"
}
}我需要将页面对象版本从1.6.169更新到1.6.170,并且当我们更改页面对象版本时,这就是我编写的bash文件。
#!/bin/bash
PROJECT=${1?Error: No test project directory passed}
NEW_VERSION=${2?Error: Pass new version}
echo "Updating page object version for ${PROJECT} project"
cd ~/git/master/test/${PROJECT}
CURRENT_VERSION=$(node -p "require('./package.json').version") # here it gives me the
# version of json which is 1.0.0 but i need 1.6.169
sed -i '' "s/${CURRENT_VERSION}/${NEW_VERSION}/" package.json
echo $CURRENT_VERSION
#npm i我怎么能拿到1.6.69?
发布于 2020-10-29 17:47:11
(grep -o‘“页面-对象”:"^"’package.json \ grep -o '^"$')为我工作。谢谢您的帮助。
发布于 2021-06-16 11:30:40
我也遇到了类似的问题,我不得不为我维护的库更新package.json版本。我所做的和你所做的很相似
#!/bin/bash
NEW_VERSION=${1?Error: Pass new version}
CURRENT_VERSION=$(node -p "require('./package.json').version")
sed -i '' "s/${CURRENT_VERSION}/${NEW_VERSION}/" package.json
cat package.json发布于 2020-10-23 07:01:54
Sed是一种高效的文本过滤和转换流编辑器。与其他编辑器不同,它具有很强的过滤管道中文本的能力。但是,考虑到package.json的内容,使用轻量级和灵活的命令行JSON处理器更为可取。例如,您可以使用临时文件(如下面所示)使用jq来获得就地替换编辑效果。它类似于JSON数据的sed --您可以使用它对结构化数据进行切片、过滤、映射和转换,就像sed、awk、grep和朋友让您玩文本一样容易。
tmp=$(mktemp)
jq '.dependencies."page-objects"="1.6.170"' package.json > "$tmp" && mv "$tmp" package.json如果要避免硬编码版本,请通过jq参数传递正确的版本:
version="1.6.172"
tmp=$(mktemp)
jq --arg version "$version" '.dependencies."page-objects"=$version' package.json > "$tmp" && mv "$tmp" package.jsonjq是用C编写的,没有运行时依赖关系,因此应该可以为几乎任何平台构建它。预构建的二进制文件可用于Linux、OS和Windows。如果您感兴趣,可以查看有关jq 这里的更多细节。如果您的机器上没有安装jq,您可以很容易地从这里获取它。
https://stackoverflow.com/questions/64494438
复制相似问题