首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在尝试编写一个bash脚本来更新package.json依赖项版本。

我正在尝试编写一个bash脚本来更新package.json依赖项版本。
EN

Stack Overflow用户
提问于 2020-10-23 05:37:38
回答 4查看 3.9K关注 0票数 6

这是我的package.json文件

代码语言:javascript
复制
{
    "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文件。

代码语言:javascript
复制
#!/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?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-10-29 17:47:11

(grep -o‘“页面-对象”:"^"’package.json \ grep -o '^"$')为我工作。谢谢您的帮助。

票数 -1
EN

Stack Overflow用户

发布于 2021-06-16 11:30:40

我也遇到了类似的问题,我不得不为我维护的库更新package.json版本。我所做的和你所做的很相似

代码语言:javascript
复制
#!/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
票数 4
EN

Stack Overflow用户

发布于 2020-10-23 07:01:54

Sed是一种高效的文本过滤和转换流编辑器。与其他编辑器不同,它具有很强的过滤管道中文本的能力。但是,考虑到package.json的内容,使用轻量级和灵活的命令行JSON处理器更为可取。例如,您可以使用临时文件(如下面所示)使用jq来获得就地替换编辑效果。它类似于JSON数据的sed --您可以使用它对结构化数据进行切片、过滤、映射和转换,就像sed、awk、grep和朋友让您玩文本一样容易。

代码语言:javascript
复制
tmp=$(mktemp)
jq '.dependencies."page-objects"="1.6.170"' package.json > "$tmp" && mv "$tmp" package.json

如果要避免硬编码版本,请通过jq参数传递正确的版本:

代码语言:javascript
复制
version="1.6.172"
tmp=$(mktemp)
jq --arg version "$version" '.dependencies."page-objects"=$version' package.json > "$tmp" && mv "$tmp" package.json

jq是用C编写的,没有运行时依赖关系,因此应该可以为几乎任何平台构建它。预构建的二进制文件可用于Linux、OS和Windows。如果您感兴趣,可以查看有关jq 这里的更多细节。如果您的机器上没有安装jq,您可以很容易地从这里获取它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64494438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档