[GH-ISSUE #3818] [Feature Request] INI 转换到 TOML #3035

Closed
opened 2026-05-05 13:57:48 -06:00 by gitea-mirror · 13 comments
Owner

Originally created by @xqzr on GitHub (Nov 30, 2023).
Original GitHub issue: https://github.com/fatedier/frp/issues/3818

Describe the feature request

INI 格式 “一键”转换为 TOML 格式。形如:

frpc convert -c frpc.ini frpc.toml
frps convert -c frps.ini frps.toml

INI 已弃用,为现存用户 方便地 迁移到 TOML、YAML 和 JSON。

Describe alternatives you've considered

No response

Affected area

  • Docs
  • Installation
  • Performance and Scalability
  • Security
  • User Experience
  • Test and Release
  • Developer Infrastructure
  • Client Plugin
  • Server Plugin
  • Extensions
  • Others
Originally created by @xqzr on GitHub (Nov 30, 2023). Original GitHub issue: https://github.com/fatedier/frp/issues/3818 ### Describe the feature request INI 格式 “一键”转换为 TOML 格式。形如: ```sh frpc convert -c frpc.ini frpc.toml frps convert -c frps.ini frps.toml ``` INI 已弃用,为现存用户 **方便地** 迁移到 TOML、YAML 和 JSON。 ### Describe alternatives you've considered _No response_ ### Affected area - [ ] Docs - [ ] Installation - [ ] Performance and Scalability - [ ] Security - [X] User Experience - [ ] Test and Release - [ ] Developer Infrastructure - [ ] Client Plugin - [ ] Server Plugin - [X] Extensions - [ ] Others
Author
Owner

@fatedier commented on GitHub (Dec 1, 2023):

不倾向于在这个上面投入精力。

<!-- gh-comment-id:1835728957 --> @fatedier commented on GitHub (Dec 1, 2023): 不倾向于在这个上面投入精力。
Author
Owner

@vikii0210 commented on GitHub (Dec 11, 2023):

大神,照顾一下小白,这个配置,转换挺好的想法,先感谢感谢~~~

<!-- gh-comment-id:1849347454 --> @vikii0210 commented on GitHub (Dec 11, 2023): 大神,照顾一下小白,这个配置,转换挺好的想法,先感谢感谢~~~
Author
Owner

@fatedier commented on GitHub (Dec 15, 2023):

新旧配置不是完全一一对应,且 INI 仍然可以正常使用,所以目前不会做什么转换的事情,能保持兼容已经付出了比较高的成本做重构。

而且这样大概率会让很多人不仔细阅读文档,出现问题后,直接在 issue 里提很多奇奇怪怪的问题,实在没有精力跟进这一类问题。新版本中也加了配置文件的严格校验模式,来尽量避免配置错误的问题。建议需要切换格式时,通过仔细阅读和参考文档理解其中的配置编写。

此外,这个功能也不需要这个项目本身来实现,只要有一些开发能力的话应该都可以自己创建一个工具分享出来。

<!-- gh-comment-id:1857249100 --> @fatedier commented on GitHub (Dec 15, 2023): 新旧配置不是完全一一对应,且 INI 仍然可以正常使用,所以目前不会做什么转换的事情,能保持兼容已经付出了比较高的成本做重构。 而且这样大概率会让很多人不仔细阅读文档,出现问题后,直接在 issue 里提很多奇奇怪怪的问题,实在没有精力跟进这一类问题。新版本中也加了配置文件的严格校验模式,来尽量避免配置错误的问题。建议需要切换格式时,通过仔细阅读和参考文档理解其中的配置编写。 此外,这个功能也不需要这个项目本身来实现,只要有一些开发能力的话应该都可以自己创建一个工具分享出来。
Author
Owner

@superen7527 commented on GitHub (Dec 20, 2023):

直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的

<!-- gh-comment-id:1864178546 --> @superen7527 commented on GitHub (Dec 20, 2023): 直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的
Author
Owner

@vikii0210 commented on GitHub (Dec 22, 2023):

新旧配置不是完全一一对应,且 INI 仍然可以正常使用,所以目前不会做什么转换的事情,能保持兼容已经付出了比较高的成本做重构。

而且这样大概率会让很多人不仔细阅读文档,出现问题后,直接在 issue 里提很多奇奇怪怪的问题,实在没有精力跟进这一类问题。新版本中也加了配置文件的严格校验模式,来尽量避免配置错误的问题。建议需要切换格式时,通过仔细阅读和参考文档理解其中的配置编写。

此外,这个功能也不需要这个项目本身来实现,只要有一些开发能力的话应该都可以自己创建一个工具分享出来。

大神,理解你的意思了。 没关系,我已经根据文档全部换成新版了。 其实主要是使用惯性的问题,一些ini配置不能直接拿到toml这种格式里,主要几个点要注意

1.字符串要在前后加 ‘ , 新版配置文件中,类似字符串变量的,如ip地址要写成 '127.0.0.1' 的格式 ,但端口还是数字不要加‘
2.常用的变量形式 有 ab_cde 要写成 abCde 的形式
3.部分变量 由 token 变成了 auth.token 的形式
4.部分变量 修改 sk 变成了 secretKey 具体设置要注意新版文档说明
5.直接参考示例即可, 由 ini 的形式

接收端
[rd_win]
type = stcp
sk = test1234
local_ip = 127.0.0.1
local_port = 3389

换成 toml 的

proxies
name="rd_win"
type="stcp"
secretKey="test1234"
localIp="127.0.0.1"
localPort=3389

访问端

[rdwin_visitor]
type = stcp
role = visitor
server_name = rdwin
sk = test1234
bind_addr = 127.0.0.1
bind_port = 3390

visitors
name="rdwin_visitor"
type="stcp"
serverName="rdwin"
secretKey="test1234"
bindAddr="127.0.0.1"
bindPort=3390

我在两版配置踩坑最多的就是 第一条 字符串变量遗漏 ' ,尤其是配置很多的时候很容易犯错。

请各位转换配置文件的时候注意~

<!-- gh-comment-id:1867581248 --> @vikii0210 commented on GitHub (Dec 22, 2023): > 新旧配置不是完全一一对应,且 INI 仍然可以正常使用,所以目前不会做什么转换的事情,能保持兼容已经付出了比较高的成本做重构。 > > 而且这样大概率会让很多人不仔细阅读文档,出现问题后,直接在 issue 里提很多奇奇怪怪的问题,实在没有精力跟进这一类问题。新版本中也加了配置文件的严格校验模式,来尽量避免配置错误的问题。建议需要切换格式时,通过仔细阅读和参考文档理解其中的配置编写。 > > 此外,这个功能也不需要这个项目本身来实现,只要有一些开发能力的话应该都可以自己创建一个工具分享出来。 大神,理解你的意思了。 没关系,我已经根据文档全部换成新版了。 其实主要是使用惯性的问题,一些ini配置不能直接拿到toml这种格式里,主要几个点要注意 1.字符串要在前后加 ‘ , 新版配置文件中,类似字符串变量的,如ip地址要写成 '127.0.0.1' 的格式 ,但端口还是数字不要加‘ 2.常用的变量形式 有 ab_cde 要写成 abCde 的形式 3.部分变量 由 token 变成了 auth.token 的形式 4.部分变量 修改 sk 变成了 secretKey 具体设置要注意新版文档说明 5.直接参考示例即可, 由 ini 的形式 接收端 [rd_win] type = stcp sk = test1234 local_ip = 127.0.0.1 local_port = 3389 换成 toml 的 [[proxies]] name="rd_win" type="stcp" secretKey="test1234" localIp="127.0.0.1" localPort=3389 访问端 [rdwin_visitor] type = stcp role = visitor server_name = rdwin sk = test1234 bind_addr = 127.0.0.1 bind_port = 3390 [[visitors]] name="rdwin_visitor" type="stcp" serverName="rdwin" secretKey="test1234" bindAddr="127.0.0.1" bindPort=3390 我在两版配置踩坑最多的就是 第一条 字符串变量遗漏 ' ,尤其是配置很多的时候很容易犯错。 请各位转换配置文件的时候注意~
Author
Owner

@vikii0210 commented on GitHub (Dec 22, 2023):

直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的

你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。

<!-- gh-comment-id:1867582976 --> @vikii0210 commented on GitHub (Dec 22, 2023): > 直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的 你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。
Author
Owner

@superen7527 commented on GitHub (Dec 22, 2023):

直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的

你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。

笑了。我哪句话人身攻击了请问?说事实接受不了?而且我可没有对着你回复,你这么急着对号入座是多心虚?你哪里来的脸回我,我和你说话了吗?

看看你自己:

1.张嘴就是垃圾,丢人素质。你除了人身攻击还有什么?我看你才是垃圾吧。除了提要求和人身攻击你还说了哪些有建设性的话?装模作样写了个只有你自己会踩的坑然后就急着开始有底气人身攻击了?还负面情绪,就是看见你这种人张口就提要求张口就垃圾才有负面情绪,好心情看到你都会没了,你不想别人给你输出负面情绪那你就别给别人制造负面情绪,你是只会给别人制造要求和负面情绪吗?自己反思。

2.你提的issue就有价值了?你妈给你做了新衣服,和你说旧衣服还能穿,但是穿新衣服更好。然后你说:照顾一下你这种衣来伸手饭来张口的伸手党吧,你不会穿衣服,直接帮你把旧衣服脱了再帮你把新衣服穿上。这样你就不用动手了。你妈忙着给你做饭还要顾及你的感受回你几句。自己想想,作者充当了哪个角色,在这里回你是想告诉你什么。你换位思考作者什么感想?你妈还有法律义务作者和你有什么义务,就因为你用他的软件就得无偿给你负责?用别人的东西你自己都不愿意花时间指望别人替你花时间?

3.我也是新手,我还没什么时间,看着文档搞了好几天运行报错重新改才写好一个旧配置。新的配置我又自己对着改,虽然花了不少时间,但是我自己完成没有打扰别人,作者写教程软件还不辛苦难不成我这点小事情还要发个issue吗?怎么都是中国人看得懂中文,我就可以你就不行?人家花时间写模板教程你不愿意花时间看?是你的时间比作者宝贵还是没有自己动手的能力只会麻烦别人啊?屁大点事就开issue要求做东西给你用,开口就是垃圾。恕我直言我快人快语话糙理不糙,你才是完完全全从头到尾好吃懒做的没素质垃圾伸手党。不会看文档还不会做人,可悲。

被说了知道没人帮你才花时间对文档写找坑,你这不是有能力自己转化吗?早干嘛去了?你有能力做到还老是想着麻烦别人,是谁教你的做事先麻烦别人最后再麻烦自己的这种自私顺序?

你赶紧无视吧 别回我了,教育你这种人我都觉得恶心。一句大神小白出来就等着伸手,人家是欠你的还是有这个义务啊?说话文字都不爱听,看你这素质估计没什么人愿意教育你,今天花一小时给你上一课,等你被被社会上的人教育的时间你就知道我多温柔了。

<!-- gh-comment-id:1867676253 --> @superen7527 commented on GitHub (Dec 22, 2023): > > 直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的 > > 你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。 笑了。我哪句话人身攻击了请问?说事实接受不了?而且我可没有对着你回复,你这么急着对号入座是多心虚?你哪里来的脸回我,我和你说话了吗? 看看你自己: 1.张嘴就是垃圾,丢人素质。你除了人身攻击还有什么?我看你才是垃圾吧。除了提要求和人身攻击你还说了哪些有建设性的话?装模作样写了个只有你自己会踩的坑然后就急着开始有底气人身攻击了?还负面情绪,就是看见你这种人张口就提要求张口就垃圾才有负面情绪,好心情看到你都会没了,你不想别人给你输出负面情绪那你就别给别人制造负面情绪,你是只会给别人制造要求和负面情绪吗?自己反思。 2.你提的issue就有价值了?你妈给你做了新衣服,和你说旧衣服还能穿,但是穿新衣服更好。然后你说:照顾一下你这种衣来伸手饭来张口的伸手党吧,你不会穿衣服,直接帮你把旧衣服脱了再帮你把新衣服穿上。这样你就不用动手了。你妈忙着给你做饭还要顾及你的感受回你几句。自己想想,作者充当了哪个角色,在这里回你是想告诉你什么。你换位思考作者什么感想?你妈还有法律义务作者和你有什么义务,就因为你用他的软件就得无偿给你负责?用别人的东西你自己都不愿意花时间指望别人替你花时间? 3.我也是新手,我还没什么时间,看着文档搞了好几天运行报错重新改才写好一个旧配置。新的配置我又自己对着改,虽然花了不少时间,但是我自己完成没有打扰别人,作者写教程软件还不辛苦难不成我这点小事情还要发个issue吗?怎么都是中国人看得懂中文,我就可以你就不行?人家花时间写模板教程你不愿意花时间看?是你的时间比作者宝贵还是没有自己动手的能力只会麻烦别人啊?屁大点事就开issue要求做东西给你用,开口就是垃圾。恕我直言我快人快语话糙理不糙,你才是完完全全从头到尾好吃懒做的没素质垃圾伸手党。不会看文档还不会做人,可悲。 被说了知道没人帮你才花时间对文档写找坑,你这不是有能力自己转化吗?早干嘛去了?你有能力做到还老是想着麻烦别人,是谁教你的做事先麻烦别人最后再麻烦自己的这种自私顺序? 你赶紧无视吧 别回我了,教育你这种人我都觉得恶心。一句大神小白出来就等着伸手,人家是欠你的还是有这个义务啊?说话文字都不爱听,看你这素质估计没什么人愿意教育你,今天花一小时给你上一课,等你被被社会上的人教育的时间你就知道我多温柔了。
Author
Owner

@xqzr commented on GitHub (Dec 22, 2023):

直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的

你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。

而且我可没有对着你回复

那就是针对本 issue 回复了?

直接关闭吧 这是什么?

这可由不得你。如题,这是 功能请求

人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?

不知道你从哪得出,我不愿意付出时间查阅文档。

懒成这样就别用了,什么都要喂到嘴里?

这样的用户可不少 ,还有不会“张嘴”的呢

你知道写一个迁移配置多麻烦?

这确实不简单,不过,如果愿意的话,这将是动力

就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?

如果可以“一键”配置好,且不出现问题,谁不乐意呢

小白看不懂中文是吗?

如果遇到“术语”,未必能看懂。即使它是 能够理解的语言。

人家想的是怎么优化 加功能 还得给你们擦屁股?

本 issue 是 功能请求,而非“擦屁股“。

<!-- gh-comment-id:1867741252 --> @xqzr commented on GitHub (Dec 22, 2023): > > > 直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的 > > > > > > 你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。 > > 而且我可没有对着你回复 > 那就是针对本 issue 回复了? > 直接关闭吧 这是什么? > 这可由不得你。如题,这是 **功能请求**。 >人家写工具给你用,你连自己看文档迁移的时间都不愿意付出? > 不知道你从哪得出,我不愿意付出时间查阅文档。 >懒成这样就别用了,什么都要喂到嘴里? > 这样的用户可不少 ~~,还有不会“张嘴”的呢~~ >你知道写一个迁移配置多麻烦? > 这确实不简单,不过,如果愿意的话,这将是**动力**。 >就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看? > 如果可以“一键”配置好,且不出现问题,谁不乐意呢 >小白看不懂中文是吗? > 如果遇到“术语”,未必能看懂。即使它是 能够理解的语言。 >人家想的是怎么优化 加功能 还得给你们擦屁股? > 本 issue 是 **功能请求**,而非“擦屁股“。
Author
Owner

@superen7527 commented on GitHub (Dec 22, 2023):

直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的

你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。

而且我可没有对着你回复

那就是针对本 issue 回复了?

直接关闭吧 这是什么?

这可由不得你。如题,这是 功能请求

人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?

不知道你从哪得出,我不愿意付出时间查阅文档。

懒成这样就别用了,什么都要喂到嘴里?

这样的用户可不少 ,还有不会“张嘴”的呢

你知道写一个迁移配置多麻烦?

这确实不简单,不过,如果愿意的话,这将是动力

就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?

如果可以“一键”配置好,且不出现问题,谁不乐意呢

小白看不懂中文是吗?

如果遇到“术语”,未必能看懂。即使它是 能够理解的语言。

人家想的是怎么优化 加功能 还得给你们擦屁股?

本 issue 是 功能请求,而非“擦屁股“。

我对你发帖者没有恶意。我一样也没说对着你回复,我也没有对你的字眼引用回复。这只是个借楼行为,就像作者除了用issue回复发布者以外也是一种给大家看的表态声明。我说的是"你们"和"你"是一种泛指,意味着有我所说的这些伸手党行为的小白,无论有没有参与回复。你没有急急忙忙回复我就已经说明你不在其中了。而骂我的人自然感觉被戳中了痛点。

其次我说的关闭是对于本贴主题,是因为你这个帖子带动了这种人的出现。看到需求我就知道这是不可能的。果然作者也说不倾向于在上面花时间=很委婉的告诉你不会实现。这个需求不合理,既然你想开着也没问题。这是什么这句话其实是看到我是小白这句话的吐槽,这句话不是你说的,所以不是对你回复,是对对这种行为的不解。

一键配置:是一种只有使用者乐意而麻烦开发者的行为。我想"功能请求"应该是对于流量转发的功能,而非使用上偏于"工具"的服务性质功能。如果为了方便使用,为什么没有全套的ui界面而采用配置文件?就因为方便开发者加功能。而不用花时间做ui体验,那华而不实。虽然确实使用舒服,但是要求荒谬,可以让有意愿的大佬自发pr。

这样的用户不少:如果不出转化配置就不会用的用户,我想frp可能不适合这种用户,开发者也不是求着这些人用。

术语: 虽然有一些术语,但是在需要用到术语配置的时候就说明使用者是明白术语(比如你需要转发端口,那你肯定明白"端口"是什么)。而普通用户只是用简单转发几个端口我看了一下文档并没有什么高深术语。

ps:我对小白一样没有恶意,谁都是小白过来的。我只对用着小白做借口的伸手党有非常大的恶意。

<!-- gh-comment-id:1867760431 --> @superen7527 commented on GitHub (Dec 22, 2023): > > > > 直接关闭吧 这是什么?人家写工具给你用,你连自己看文档迁移的时间都不愿意付出?懒成这样就别用了,什么都要喂到嘴里?你知道写一个迁移配置多麻烦?就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看?小白看不懂中文是吗?人家想的是怎么优化 加功能 还得给你们擦屁股?惯的 > > > > > > > > > 你这种垃圾除了输出负面情绪,没有任何的价值的言论,下次我直接无视。 > > > > > > 而且我可没有对着你回复 > > 那就是针对本 issue 回复了? > > > 直接关闭吧 这是什么? > > 这可由不得你。如题,这是 **功能请求**。 > > > 人家写工具给你用,你连自己看文档迁移的时间都不愿意付出? > > 不知道你从哪得出,我不愿意付出时间查阅文档。 > > > 懒成这样就别用了,什么都要喂到嘴里? > > 这样的用户可不少 ~,还有不会“张嘴”的呢~ > > > 你知道写一个迁移配置多麻烦? > > 这确实不简单,不过,如果愿意的话,这将是**动力**。 > > > 就为了让你们这些伸手党一句小白,就可以一键配置文档都不用看? > > 如果可以“一键”配置好,且不出现问题,谁不乐意呢 > > > 小白看不懂中文是吗? > > 如果遇到“术语”,未必能看懂。即使它是 能够理解的语言。 > > > 人家想的是怎么优化 加功能 还得给你们擦屁股? > > 本 issue 是 **功能请求**,而非“擦屁股“。 我对你发帖者没有恶意。我一样也没说对着你回复,我也没有对你的字眼引用回复。这只是个借楼行为,就像作者除了用issue回复发布者以外也是一种给大家看的表态声明。我说的是"你们"和"你"是一种泛指,意味着有我所说的这些伸手党行为的小白,无论有没有参与回复。你没有急急忙忙回复我就已经说明你不在其中了。而骂我的人自然感觉被戳中了痛点。 其次我说的关闭是对于本贴主题,是因为你这个帖子带动了这种人的出现。看到需求我就知道这是不可能的。果然作者也说不倾向于在上面花时间=很委婉的告诉你不会实现。这个需求不合理,既然你想开着也没问题。`这是什么`这句话其实是看到`我是小白`这句话的吐槽,这句话不是你说的,所以不是对你回复,是对对这种行为的不解。 一键配置:是一种只有使用者乐意而麻烦开发者的行为。我想"功能请求"应该是对于流量转发的功能,而非使用上偏于"工具"的服务性质功能。如果为了方便使用,为什么没有全套的ui界面而采用配置文件?就因为方便开发者加功能。而不用花时间做ui体验,那华而不实。虽然确实使用舒服,但是要求荒谬,可以让有意愿的大佬自发pr。 这样的用户不少:如果不出转化配置就不会用的用户,我想frp可能不适合这种用户,开发者也不是求着这些人用。 术语: 虽然有一些术语,但是在需要用到术语配置的时候就说明使用者是明白术语(比如你需要转发端口,那你肯定明白"端口"是什么)。而普通用户只是用简单转发几个端口我看了一下文档并没有什么高深术语。 ps:我对小白一样没有恶意,谁都是小白过来的。我只对用着小白做借口的伸手党有非常大的恶意。
Author
Owner

@fatedier commented on GitHub (Dec 25, 2023):

就事论事,发言没必要过于情绪化,只是各自看待问题的角度不同,互相理解。

总的来说,精力有限,就和现在各个公司降本增效一样,尽量把有限的精力分配到更有“价值”的事情上。

这里的价值衡量并不只是对用户是否友好,而是包括了需求是否广泛,是否对大多数人有价值,是否有简单的替代方案,对开发者来说,这个功能是否有技术含量,是否有挑战性,对开发者的个人能力是否有提升,亦或是本身比较有意思。

这里的衡量标准也会随着个人的生活工作状态而变化,如果这个项目能让我不需要工作就能保证日常生活水平,那可能会考虑做一些对开发者来说没什么意思和价值,但是对用户来说更友好的功能。反之亦然。

顺带一提,像之前 xtcp 代理的 P2P 彻底重构,正常来说需要比较多的开发测试时间,是很难有精力持续推进。但是因为得到了一个企业的资助,所以才会持续在这个功能上投入时间。

<!-- gh-comment-id:1868690163 --> @fatedier commented on GitHub (Dec 25, 2023): 就事论事,发言没必要过于情绪化,只是各自看待问题的角度不同,互相理解。 总的来说,精力有限,就和现在各个公司降本增效一样,尽量把有限的精力分配到更有“价值”的事情上。 这里的价值衡量并不只是对用户是否友好,而是包括了需求是否广泛,是否对大多数人有价值,是否有简单的替代方案,对开发者来说,这个功能是否有技术含量,是否有挑战性,对开发者的个人能力是否有提升,亦或是本身比较有意思。 这里的衡量标准也会随着个人的生活工作状态而变化,如果这个项目能让我不需要工作就能保证日常生活水平,那可能会考虑做一些对开发者来说没什么意思和价值,但是对用户来说更友好的功能。反之亦然。 顺带一提,像之前 xtcp 代理的 P2P 彻底重构,正常来说需要比较多的开发测试时间,是很难有精力持续推进。但是因为得到了一个企业的资助,所以才会持续在这个功能上投入时间。
Author
Owner

@superen7527 commented on GitHub (Dec 25, 2023):

就事论事,发言没必要过于情绪化,只是各自看待问题的角度不同,互相理解。

总的来说,精力有限,就和现在各个公司降本增效一样,尽量把有限的精力分配到更有“价值”的事情上。

这里的价值衡量并不只是对用户是否友好,而是包括了需求是否广泛,是否对大多数人有价值,是否有简单的替代方案,对开发者来说,这个功能是否有技术含量,是否有挑战性,对开发者的个人能力是否有提升,亦或是本身比较有意思。

这里的衡量标准也会随着个人的生活工作状态而变化,如果这个项目能让我不需要工作就能保证日常生活水平,那可能会考虑做一些对开发者来说没什么意思和价值,但是对用户来说更友好的功能。反之亦然。

顺带一提,像之前 xtcp 代理的 P2P 彻底重构,正常来说需要比较多的开发测试时间,是很难有精力持续推进。但是因为得到了一个企业的资助,所以才会持续在这个功能上投入时间。

是的,赞同你的意思。谁也不想把时间浪费在没有什么意义的事情上面。最好的例子,就是上面自称小白的人,结果最后不也是一样能写出配置还总结出坑。说明它只是懒得花时间在这些它觉得没意义的事情上面,但是它却想一句大神就让你代劳替它做这些没意义的事情,它是做不到吗?很明显它做到了。能做到却总想着麻烦别人,就是这种态度才让我过于情绪化,怎么会有人这么以自我为中心?当然我有一些激动,应该向你学习。

<!-- gh-comment-id:1869045852 --> @superen7527 commented on GitHub (Dec 25, 2023): > 就事论事,发言没必要过于情绪化,只是各自看待问题的角度不同,互相理解。 > > 总的来说,精力有限,就和现在各个公司降本增效一样,尽量把有限的精力分配到更有“价值”的事情上。 > > 这里的价值衡量并不只是对用户是否友好,而是包括了需求是否广泛,是否对大多数人有价值,是否有简单的替代方案,对开发者来说,这个功能是否有技术含量,是否有挑战性,对开发者的个人能力是否有提升,亦或是本身比较有意思。 > > 这里的衡量标准也会随着个人的生活工作状态而变化,如果这个项目能让我不需要工作就能保证日常生活水平,那可能会考虑做一些对开发者来说没什么意思和价值,但是对用户来说更友好的功能。反之亦然。 > > 顺带一提,像之前 xtcp 代理的 P2P 彻底重构,正常来说需要比较多的开发测试时间,是很难有精力持续推进。但是因为得到了一个企业的资助,所以才会持续在这个功能上投入时间。 是的,赞同你的意思。谁也不想把时间浪费在没有什么意义的事情上面。最好的例子,就是上面自称小白的人,结果最后不也是一样能写出配置还总结出坑。说明它只是懒得花时间在这些它觉得没意义的事情上面,但是它却想一句大神就让你代劳替它做这些没意义的事情,它是做不到吗?很明显它做到了。能做到却总想着麻烦别人,就是这种态度才让我过于情绪化,怎么会有人这么以自我为中心?当然我有一些激动,应该向你学习。
Author
Owner

@geekidentity commented on GitHub (Dec 27, 2023):

这事没必要吵,最基础的只转换proxy,可以直接问ChatGPT。下面供参考

写个python脚本,读取文件内容如下
[alist]
type = tcp
local_ip = 127.0.0.1
local_port = 5244
remote_port = 5244

[homeassistant]
type = tcp
local_ip = 127.0.0.1
local_port = 8123
remote_port = 8123

转成如下格式

proxies
name = "alist"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5244
remotePort = 5244

proxies
name = "homeassistant"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8123
remotePort = 8123

下面是一个Python脚本,它可以读取上述格式的文件,并将其转换为指定的格式。假设原始文件名为config.ini,转换后的文件将保存为converted.toml

import re

def parse_config(filename):
    with open(filename, 'r') as file:
        content = file.read()

    # 使用正则表达式匹配节和键值对
    sections = re.findall(r'\[(.*?)\]\n(.*?)\n\n', content, re.DOTALL)
    
    proxies = []
    for section in sections:
        proxy = {'name': section[0]}
        for line in section[1].split('\n'):
            if line.strip() == '':
                continue
            key, value = line.split(' = ')
            # 将原始键转换为新格式的键
            new_key = {
                'type': 'type',
                'local_ip': 'localIP',
                'local_port': 'localPort',
                'remote_port': 'remotePort'
            }.get(key, key)
            proxy[new_key] = value
        proxies.append(proxy)
    
    return proxies

def convert_to_toml(proxies):
    toml_content = ''
    for proxy in proxies:
        toml_content += '[[proxies]]\n'
        for key, value in proxy.items():
            # 对于端口,不需要引号
            if 'Port' in key:
                toml_content += f'{key} = {value}\n'
            else:
                toml_content += f'{key} = "{value}"\n'
        toml_content += '\n'
    
    return toml_content.strip()

def main():
    input_filename = 'config.ini'
    output_filename = 'converted.toml'
    
    proxies = parse_config(input_filename)
    toml_content = convert_to_toml(proxies)
    
    with open(output_filename, 'w') as file:
        file.write(toml_content)
    
    print(f'Converted content written to {output_filename}')

if __name__ == '__main__':
    main()

确保将此脚本保存为.py文件,并且在同一目录下有一个名为config.ini的文件,其中包含了你提供的原始内容。运行脚本后,它将创建或覆盖名为converted.toml的文件,其中包含转换后的内容。

<!-- gh-comment-id:1870142891 --> @geekidentity commented on GitHub (Dec 27, 2023): 这事没必要吵,最基础的只转换proxy,可以直接问ChatGPT。下面供参考 写个python脚本,读取文件内容如下 [alist] type = tcp local_ip = 127.0.0.1 local_port = 5244 remote_port = 5244 [homeassistant] type = tcp local_ip = 127.0.0.1 local_port = 8123 remote_port = 8123 转成如下格式 [[proxies]] name = "alist" type = "tcp" localIP = "127.0.0.1" localPort = 5244 remotePort = 5244 [[proxies]] name = "homeassistant" type = "tcp" localIP = "127.0.0.1" localPort = 8123 remotePort = 8123 下面是一个Python脚本,它可以读取上述格式的文件,并将其转换为指定的格式。假设原始文件名为`config.ini`,转换后的文件将保存为`converted.toml`。 ```python import re def parse_config(filename): with open(filename, 'r') as file: content = file.read() # 使用正则表达式匹配节和键值对 sections = re.findall(r'\[(.*?)\]\n(.*?)\n\n', content, re.DOTALL) proxies = [] for section in sections: proxy = {'name': section[0]} for line in section[1].split('\n'): if line.strip() == '': continue key, value = line.split(' = ') # 将原始键转换为新格式的键 new_key = { 'type': 'type', 'local_ip': 'localIP', 'local_port': 'localPort', 'remote_port': 'remotePort' }.get(key, key) proxy[new_key] = value proxies.append(proxy) return proxies def convert_to_toml(proxies): toml_content = '' for proxy in proxies: toml_content += '[[proxies]]\n' for key, value in proxy.items(): # 对于端口,不需要引号 if 'Port' in key: toml_content += f'{key} = {value}\n' else: toml_content += f'{key} = "{value}"\n' toml_content += '\n' return toml_content.strip() def main(): input_filename = 'config.ini' output_filename = 'converted.toml' proxies = parse_config(input_filename) toml_content = convert_to_toml(proxies) with open(output_filename, 'w') as file: file.write(toml_content) print(f'Converted content written to {output_filename}') if __name__ == '__main__': main() ``` 确保将此脚本保存为`.py`文件,并且在同一目录下有一个名为`config.ini`的文件,其中包含了你提供的原始内容。运行脚本后,它将创建或覆盖名为`converted.toml`的文件,其中包含转换后的内容。
Author
Owner

@superen7527 commented on GitHub (Dec 27, 2023):

哥们 如果这么简单 我就不会说很复杂了。新版除了你说的这种格式转换,还有别的变量名变化 比如 控制台 dashboard的变量完全都变了。还有一些新的变量 为了完全兼容作者写了文档 所以希望使用者自己读一遍文档 根据自己的情况手动改也能知道更新了什么,而不是依赖一键工具。稍微有遗漏 又觉得工具不会有问题,又发issue问作者为什么报错,这也是作者担心的地方。

这事没必要吵,最基础的只转换proxy,可以直接问ChatGPT。下面供参考

写个python脚本,读取文件内容如下 [alist] type = tcp local_ip = 127.0.0.1 local_port = 5244 remote_port = 5244

[homeassistant] type = tcp local_ip = 127.0.0.1 local_port = 8123 remote_port = 8123

转成如下格式

proxies name = "alist" type = "tcp" localIP = "127.0.0.1" localPort = 5244 remotePort = 5244

proxies name = "homeassistant" type = "tcp" localIP = "127.0.0.1" localPort = 8123 remotePort = 8123

下面是一个Python脚本,它可以读取上述格式的文件,并将其转换为指定的格式。假设原始文件名为config.ini,转换后的文件将保存为converted.toml

import re

def parse_config(filename):
    with open(filename, 'r') as file:
        content = file.read()

    # 使用正则表达式匹配节和键值对
    sections = re.findall(r'\[(.*?)\]\n(.*?)\n\n', content, re.DOTALL)
    
    proxies = []
    for section in sections:
        proxy = {'name': section[0]}
        for line in section[1].split('\n'):
            if line.strip() == '':
                continue
            key, value = line.split(' = ')
            # 将原始键转换为新格式的键
            new_key = {
                'type': 'type',
                'local_ip': 'localIP',
                'local_port': 'localPort',
                'remote_port': 'remotePort'
            }.get(key, key)
            proxy[new_key] = value
        proxies.append(proxy)
    
    return proxies

def convert_to_toml(proxies):
    toml_content = ''
    for proxy in proxies:
        toml_content += '[[proxies]]\n'
        for key, value in proxy.items():
            # 对于端口,不需要引号
            if 'Port' in key:
                toml_content += f'{key} = {value}\n'
            else:
                toml_content += f'{key} = "{value}"\n'
        toml_content += '\n'
    
    return toml_content.strip()

def main():
    input_filename = 'config.ini'
    output_filename = 'converted.toml'
    
    proxies = parse_config(input_filename)
    toml_content = convert_to_toml(proxies)
    
    with open(output_filename, 'w') as file:
        file.write(toml_content)
    
    print(f'Converted content written to {output_filename}')

if __name__ == '__main__':
    main()

确保将此脚本保存为.py文件,并且在同一目录下有一个名为config.ini的文件,其中包含了你提供的原始内容。运行脚本后,它将创建或覆盖名为converted.toml的文件,其中包含转换后的内容。

<!-- gh-comment-id:1870181732 --> @superen7527 commented on GitHub (Dec 27, 2023): 哥们 如果这么简单 我就不会说很复杂了。新版除了你说的这种格式转换,还有别的变量名变化 比如 控制台 dashboard的变量完全都变了。还有一些新的变量 为了完全兼容作者写了文档 所以希望使用者自己读一遍文档 根据自己的情况手动改也能知道更新了什么,而不是依赖一键工具。稍微有遗漏 又觉得工具不会有问题,又发issue问作者为什么报错,这也是作者担心的地方。 > 这事没必要吵,最基础的只转换proxy,可以直接问ChatGPT。下面供参考 > > 写个python脚本,读取文件内容如下 [alist] type = tcp local_ip = 127.0.0.1 local_port = 5244 remote_port = 5244 > > [homeassistant] type = tcp local_ip = 127.0.0.1 local_port = 8123 remote_port = 8123 > > 转成如下格式 > > [[proxies]] name = "alist" type = "tcp" localIP = "127.0.0.1" localPort = 5244 remotePort = 5244 > > [[proxies]] name = "homeassistant" type = "tcp" localIP = "127.0.0.1" localPort = 8123 remotePort = 8123 > > 下面是一个Python脚本,它可以读取上述格式的文件,并将其转换为指定的格式。假设原始文件名为`config.ini`,转换后的文件将保存为`converted.toml`。 > > ```python > import re > > def parse_config(filename): > with open(filename, 'r') as file: > content = file.read() > > # 使用正则表达式匹配节和键值对 > sections = re.findall(r'\[(.*?)\]\n(.*?)\n\n', content, re.DOTALL) > > proxies = [] > for section in sections: > proxy = {'name': section[0]} > for line in section[1].split('\n'): > if line.strip() == '': > continue > key, value = line.split(' = ') > # 将原始键转换为新格式的键 > new_key = { > 'type': 'type', > 'local_ip': 'localIP', > 'local_port': 'localPort', > 'remote_port': 'remotePort' > }.get(key, key) > proxy[new_key] = value > proxies.append(proxy) > > return proxies > > def convert_to_toml(proxies): > toml_content = '' > for proxy in proxies: > toml_content += '[[proxies]]\n' > for key, value in proxy.items(): > # 对于端口,不需要引号 > if 'Port' in key: > toml_content += f'{key} = {value}\n' > else: > toml_content += f'{key} = "{value}"\n' > toml_content += '\n' > > return toml_content.strip() > > def main(): > input_filename = 'config.ini' > output_filename = 'converted.toml' > > proxies = parse_config(input_filename) > toml_content = convert_to_toml(proxies) > > with open(output_filename, 'w') as file: > file.write(toml_content) > > print(f'Converted content written to {output_filename}') > > if __name__ == '__main__': > main() > ``` > > 确保将此脚本保存为`.py`文件,并且在同一目录下有一个名为`config.ini`的文件,其中包含了你提供的原始内容。运行脚本后,它将创建或覆盖名为`converted.toml`的文件,其中包含转换后的内容。
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#3035
No description provided.