17611538698
webmaster@21cto.com

我的 PHP 开发工作设置

编程语言 0 494 2024-08-20 08:12:11

图片

目前,我的主要编程工作是:PHP、Javascript(包括 Node)、CSS、HTML 和 shell 脚本。我有时也会使用其他语言,但与这些主要语言相比,这种情况比较少见。

下面就是我的故事。

硬件


我就是在我的主力机器上写的本篇文章。它运行的是 Windows 11,这几乎完全是为了我自己的重要原因—游戏。


我所工作的公司为我配备了一台 MacBook Pro,我用它来处理诸如 VPN 访问等重要公司事务,并且因为它具有更好的视频会议体验。


但实际上,我只是进入它并将其用作 Docker 主机和网络代理。我并不喜欢 Apple 键盘,它其实是英国 ISO 和美国 ANSI 的混合体,感觉就像在儿童玩具上打字一样。我很喜欢触摸板和屏幕,它们都令人印象深刻。但我更喜欢使用鼠标。


因此,Macbook 被降级为我办公桌角落的第三块屏幕。


图片

这是一个好坏参半的事情。

我有一台笔记本电脑,偶尔在厨房餐桌上工作时会用到。它运行的是 ChromeOS,不过我可能会在某个时候切换成 Linux。ChromeOS 中的“开发者”模式为我提供了命令行和 shell 访问权限,因此我使用浏览器/cli 的工作流程基本相同。

操作系统


图片

我所做的所有工作都是通过 Windows 11 桌面上的 WSL 下的 Ubuntu、ChromeOS 笔记本电脑上的 SSH 或 MacBook Pro 上的 Barrier'd 进行的。

你可能觉得这听起来不切实际。但确实存在一些奇怪的问题,比如 Apple 的漏洞,你无法使用修改/etc/hosts中 IPv4 地址进行外部连接,因为系统防火墙会阻止它,但你可以使用 IPv6,即使你没有通过 IPv6 进行连接。哦哦,搞清楚这个破解方法的过程真的很有趣。

但是,尽管十年前的我从未想过这一点,但如今的 Windows Subsystem for Linux(特别是 WSL2)实际上相当不错。如果您安装了 X 服务器,您甚至可以运行 X 应用程序,而且有很多这样的应用程序可用。

不过,我并不将 X 用于任何用途。如果不是在浏览器中,我一般不会在意它,而且与使用本机浏览器相比,通过 X 使用 Linux 浏览器也没什么优点。

我禁不住使用 Windows ,似乎感到有点不雅,但是我把这种感觉深埋在心里并试图忽略它。

桌面 - Barrier


Barrier 是 Synergy 闭源前的一个分支。


图片

它自称是一种软件 KVM。但归根结底,我可以用它在不同的计算机之间移动鼠标,就像在我的 PC 上的两个显示器之间移动鼠标一样。如果我将鼠标从桌面显示器的右侧移开,它会出现在我的 Macbook 上,所有鼠标和键盘输入都会无缝传输到那里,就像它们是一个整体一台机器一样。


终端 - WezTerm


图片

我最近才开始使用 WezTerm。终端语言中的“最近”是指过去一两年,因为这个世界的发展速度很慢。除非有充分的理由,否则我将不会改变。


那么我的理由是什么呢?Windows Terminal/iTerm 2 有什么问题?好吧,因为WezTerm 是跨平台的,我可以在主机之间共享相同的配置 - 在 Lua!中。它不会做出奇怪的限制(例如 Suckless 永远不会支持选项卡),而且它可定制。


于定制,主要是字体、背景图像和配色方案。我通常在大多数情况下使用Gruvbox 1 Dark。


Shell-zsh

图片

我只所以选择了 zsh,因为它是 Mac 上的默认设置。我知道:我其实不怎么使用 Mac。但它几乎完全兼容 bash,适用于我关心的所有事情,而且在我使用的所有系统上都可以使用。

我尝试使我编写的每个脚本都符合 POSIX 标准,并且如果我使用了 BSD 和 GNU 之间的不同之处(例如sed -i),我会将其包装在条件中。

公平地说,Shell的选择其实并不重要。

所以,在您说任何话之前,我先说一句,我不使用 oh-my-zsh。它没有提供任何我关心的、无法用 zsh(或 bash)实现的功能。

哦,而且我几乎也不使用别名。

编辑器-Neovim


图片

我使用 Vi/Vim 已有很长时间了,但一两年前我换成了 neovim。我最初并不认为换用有什么意义,因为人们谈论的 neovim 的所有功能(他们确实在谈论它们!- 异步、LSP、嵌入式终端等)要么在最新版本的 Vim 中也有,要么我真的不感兴趣。我认为这些东西不属于编辑器。这些东西试图将 Vim 变成 Emacs。


好吧,我仍然有同样的想法,但我决定尝试一些 neovim“发行版”,只是为了看看有什么,最后还是坚持使用它。


当加载插件时,它肯定比 Vim 更容易出错,但对我来说它仍然是一款不错且舒适的编辑器 - 而且它更有前途,尤其是现在 Bram 已经离开了这个世界(RIP)。


生产率


Tmux


图片

Tmux 就像它一贯的介绍一样,是一个“终端多路复用器”,就像 GNU screen 一样。它允许您关闭终端会话并重新打开它而不会丢失您的工作,并且允许您同时运行多个终端会话。


这样做的结果是,我可以让我的工作在 MacBook 上运行,并通过 ssh 从其他机器连接,并且通过运行,tmux attach我就可以立即回到工作状态。我不需要每次都打开一堆会话,也不需要记住我所在的目录或正在运行的服务,一切都在那里。


Tmuxinator


tmuxinator 项目是 tmux 的包装器,它可以让您管理多个单独的 tmux 会话。

举个例子,下面是我目前在 macbook 上运行的项目列表:

❯ tmuxinator lstmuxinator projects:bc           biascan      ec           fabric       gce          ifpmaleith        leith-2023   msgan        chickenland  ngs          ngs-newods          ren          renaissance  scramble     sf           sf-cmssf-forms     sf-myplans   sgh          srn

这些项目都有些什么呢?嗯……它们都有很多细节,但归根结底,它们都与我随机挑选的这个项目类似:

windows:  - cms:    - ddev start  - storybook:      panes:        - watcher:          - cd web/storybook          - yarn watch  - middleware:    - workon mw8  - logs:      panes:        - cms:          - workon ngs          - docker exec -it ngs-cms-php drush -y --uri=ngs-cms.shore.signal.sh -r /shore_site/web ws --tail --full --extended --count=1        - new-cms:          - workon ngs-cms-2022          - docker exec -it ngs-cms-2022-app vendor/drush/drush/drush ws --extended        - middleware:          - workon mw8          - docker exec -it ngs-middleware-app vendor/drush/drush/drush ws --extended  - build-services:      panes:        - new-cms:          - workon ngs-cms-2022          - cd web/storybook          - yarn storybook

在这个例子中,我为 Drupal 7 项目配备了 tmux 窗口、它的 Drupal 10 重建、一些共享中间件、前端构建服务、故事书服务器和大量日志记录。

图片

我可以使用 来旋转这一切tmuxinator ,并使用 在其窗口集合之间切换,Ctrl-A 并通过点击 弹出菜单切换到任意数量的完全不同的项目Ctrl-A S。

Ddev

Ddev 是一款可以让你为项目创建容器化 (docker) 环境的工具。它适用于 PHP、Node 和(实验性的)Python。

图片

基本上它就是帮我们管理技术堆栈的东西。

我的公司过去常常使用自己开发的 docker-compose 包装器来实现这些,当时也没有太多选择。

不过,Ddev 确实很可靠,每次我必须处理遗留或继承的项目时,我都会在检查后立即将其转换为 Ddev。这通常不会花很长时间,而且这意味着我们有一种一致的工作方式。比如,它可以非常快速轻松地在 PHP 或 Node 版本之间切换。

对我来说,它的一些主要卖点如下:

  • 使用Mutagen作为文件系统,因此即使在 MacOS 上也运行很快(Docker 挂载速度非常慢)

  • 让你可以轻松重新配置 PHP 和 Node 版本

  • 了解大量第三方应用程序 - 例如,如果你有一个数据库 GUI 应用程序(如 TablePlus 或 DBeaver),你可以从命令行启动它

  • 支持社区维护的附加组件等。


是的,这些都挺好的。

作者:手扶拖拉斯基

评论