博客

  • 利用Query Monitor插件调试WordPress并提高网站性能

    Query Monitor

    想象一下这种情况:您正在处理WordPress开发项目并安装了十几个或更多插件。但是,您的网站并没有像您希望的那样嗡嗡作响。您已经排除了所有常见的疑点:托管已经足够,没有明显的JavaScript或PHP错误,也没有其他明显的错误。您怀疑您安装的一个或多个插件是罪魁祸首,但您如何确定是哪个插件导致了问题?

    识别麻烦插件的常用方法是逐个停用插件,直到您尝试解决的行为停止。但是,安装正确的插件后,您可以更快、更准确地查明和调试WordPress问题。这是Query Monitor旨在解决的那种场景。

    什么是Query Monitor?

    Query Monitor是一个免费的WordPress调试和开发插件。您可以使用它来识别和调试缓慢的数据库查询、AJAX调用、REST API请求等等。此外,该插件还会报告网站详细信息,例如脚本依赖项和依赖项、在页面生成期间触发的WordPress钩子、托管环境详细信息、当前页面满足的条件查询标签等等。

    WordPress插件-Query Monitor

    WordPress插件-Query Monitor

    该插件由John Blackbourn开发,他是WordPress的核心提交者,目前是Human Made的一名开发人员,之前受雇于WordPress.com VIP — 换句话说,他是真正了解WordPress的人。Query Monitor于2013年被添加到WordPress插件目录中,目前拥有超过10,000次活动安装——对于开发插件来说,这是一个令人印象深刻的总数。该插件的用户评分为五颗星,这有助于解释它在开发人员中的受欢迎程度。

    Query Monitor有什么作用?

    很多。

    我们不会花时间列出Query Monitor提供的每个功能,但如果您想深入了解细节,请查看GitHub上的Query Monitor。在高层次上,Query Monitor所做的是在生成WordPress网页的同时监视服务器上或服务器与访问者浏览器之间发生的每个WordPress事务。然后,它将报告附加到网页的页脚,详细说明它收集的所有信息。它适用于每个页面,包括 /wp-admin/ 页面,因此您可以使用它调试任何前端或后端页面。

    该插件以核心功能命名:数据库查询监控。每个查询都受到监控、计时,并绑定到生成它的函数。因此,您可以根据查询的处理时间对查询进行排序,并查明有问题、加载缓慢的查询。

    Query Monitor还跟踪并列出生成页面的WordPress钩子和条件标签应用程序。作为开发人员,您可以使用此信息来确定添加新插件或主题功能时要使用的正确挂钩或条件标签。

    Query Monitor提供了很多附加信息。处理Query Monitor生成的所有内容的最佳方法是将其安装在测试站点上并查看报告。

    如何使用Query Monitor

    使用您喜欢的方法安装Query Monitor:它位于GitHub上,也可从WordPress插件目录获得。安装插件后,您会注意到的第一件事是管理栏中添加了一个新菜单项:

    Query Monitor管理栏

    Query Monitor管理栏

    新项目上的标签显示了一些指标:

    • 页面生成时间,
    • PHP内存使用高峰,
    • 数据库查询时间,以及
    • 进行的数据库查询总数。

    将鼠标悬停在管理栏上,将出现一个下拉菜单。Query Monitor生成的所有数据都包含在添加到页面底部并分为多个部分的单个报告中。单击下拉菜单中的任何项目以转到查询监视器报告的相应部分。例如,下面是页面上运行的整体“queries”的屏幕截图。

    Query Monitor查询

    Query Monitor查询

    如果发生任何PHP错误,或者任何查询花费的时间过长,其他项目将添加到下拉菜单中,突出显示这些问题。单击它们以查看更多详细信息。

    您可能会注意到列表中的最后几项从一页更改为下一页。这些以绿色显示的项目是当前页面满足的条件查询标签。

    滚动整个报告以查看Query Monitor生成的大量数据。花点时间尝试可用于过滤报告中包含的数据的下拉菜单以及包含“+”符号的框,可用于查看有关许多报告详细信息的更多数据。

    如果您想从Query Monitor中获取更多数据,请查看第三方Query Monitor附加组件,以查看是否存在可生成所需调试信息的插件。

    如何以注销用户的身份查看查询监控数据

    当您以管理员身份登录时查看WordPress网站时,该网站包含一个管理栏和其他脚本,注销的访问者看不到这些。Query Monitor可以在注销时查看站点并且仍然可以访问调试信息。但是,第一次使用此功能可能会有些棘手。

    要以注销的访问者身份查看Query Monitor数据,请执行以下步骤:

    • 以管理员身份登录时转到WordPress管理区域,然后单击管理栏中的查询监视器项。
    • 滚动报告数据的最底部并查找显示Set authentication cookie的链接。请注意,您必须在管理区域才能看到链接。如果您在前端页面上查找链接,您将找不到它。
    • 单击该链接会将身份验证cookie添加到您的浏览器。这样,即使您未登录,Query Monitor也会知道显示测试结果。
    • 设置身份验证cookie后,退出站点或使用User Switching等插件切换到非管理员用户配置文件。
    • 导航到要查看调试信息的页面并滚动到页面底部。在那里,您将看到Query Monitor报告的精简版本。单击任何项​​目以展开报告。

    小结

    作为WordPress开发人员,拥有合适的工具可以让您的工作更轻松。Query Monitor是一款免费工具,有可能为您节省大量时间。您可以将其用于:

    • 查明慢查询和触发它们的函数,
    • 生成WordPress生成页面时遇到的WordPress钩子列表,
    • 确认哪些条件标签适用于当前页面或帖子,
    • 识别JavaScript资源之间的关系,
    • 查看服务器配置详细信息,以及
    • 更多

    如果您尝试使用Query Monitor,它很有可能会立即成为您的WordPress开发环境的永久补充。

  • WordPress Salts是什么及如何使用它们

    WordPress Salts是什么

    从深层次上讲,WordPress Salts是一种通过帮助安全地存储和验证站点用户密码来确保WordPress站点安全的方法。

    在本文中,您将了解到:

    1. 什么是WordPress alts?
    2. WordPress Salts位于何处?
    3. WordPress Salts是如何工作的
    4. 您需要更改WordPress Salts和安全密钥吗?
    5. 如何更改WordPress Salts(两种方法)

    什么是WordPress Salts?

    WordPress Salts及其配套的安全密钥是一种加密工具,可帮助保护您的WordPress站点登录。

    具体来说,Salts和安全密钥可以保护WordPress用于登录的cookie中的信息。

    看,一旦您登录WordPress,您就可以选择保持登录状态,这样您就无需每次都输入用户名和密码。为此,WordPress将您的登录信息保存在cookie中,而不是使用PHP会话。

    这对用户来说非常方便,但如果有人能够劫持您浏览器的cookie ,它也会带来安全问题的可能性。

    为避免这种情况,WordPress使用Salts和安全密钥来保护您的登录信息,以便恶意主体无法对其进行任何操作。把它们想象成你网站的“额外”密码,恶意行为者几乎不可能猜到。

    由于它们的重要性,您永远不应该与任何人分享您的 WordPress 盐和安全密钥。

    WordPress Salts位于何处?

    默认情况下,WordPress带有自己的Salts和安全密钥。它们位于您站点的wp-config.php文件中。您应该总共看到八个键:

    • 前四个条目是您的安全密钥。
    • 最后四个条目是您的WordPress Salts。

    wp-config.php文件中的Salts示例

    wp-config.php文件中的Salts示例

    WordPress Salts是如何工作的?

    假设您的WordPress网站的密码是“mypassword”(这是一个可怕的密码,但它符合我们的目的)。

    要登录,请输入您的用户名和密码。然后,WordPress将该信息存储在两个浏览器cookie中,以便您保持登录状态(此信息也存储在您站点的数据库中)。

    但是,如果WordPress像这样存储您的密码 – “mypassword” – 那么它就在那里,恶意行为者可以看到。这称为以明文形式存储密码,在安全性方面这是一个很大的禁忌。

    安全密钥和盐通过共同合作将明文密码加密地转换为随机混乱的字符来避免这个问题,如果没有访问您的密钥和Salts某人就不可能进行逆向工程。

    因此,即使您输入“mypassword”进行登录,WordPress 也会将您的密码转换为“hsd78q34%7832$4jkhkjsfd78782^^429nsdf”之类的内容进行存储。

    除非有人可以访问您的Salts和安全密钥,否则他们不可能将随机的混乱字符转换为您的实际密码。

    您需要更改WordPress Salts和安全密钥吗?

    默认情况下,新的 WordPress 安装带有自己的一组密钥和Salts,因此您的WordPress站点已经是安全的,而无需您执行任何操作。

    但是,有一些理由需要考虑定期更改Salts和密钥。

    基本概念是,通过定期更改您的密钥和Salts,您可以使恶意行为者更难获得您的盐。

    此外,更改您的盐将自动注销您站点上所有已登录的用户并强制他们重新登录,这是另一个潜在的好处。例如,如果您不小心登录了公共计算机并忘记退出,这将允许您强制退出该帐户以确保没有人可以访问。

    如何更改WordPress Salts(两种方法)

    如果您想更改WordPress中的Salts,您有两个主要选择:

    以下是使用这两种方法的方法:

    如何手动更改WordPress Salts

    要手动更改站点的Salts,您需要通过 FTP 连接到站点的服务器并编辑wp-config.php文件。

    连接后,前往官方WordPress.org提供的Salts生成器。该页面会为您随机生成Salts和安全密钥,就像您在上面看到的那样。它应该生成四个安全密钥和四个Salts(总共八个):

    WordPress.org可以帮助您生成新的密钥和Salts

    WordPress.org可以帮助您生成新的密钥和Salts

    然后,删除wp-config.php文件中的现有密钥,并通过粘贴来自 WordPress.org的Salts生成器的密钥来替换它们:

    如何在wp-config.php中更改Salts

    如何在wp-config.php中更改Salts

    完成后,它看起来应该和以前完全一样——只是随机字符串会有所不同。

    确保保存您的更改并在需要时重新上传您的wp-config.php文件。

    如何使用插件更改WordPress Salts

    作为上述手动方法的替代方法,您还可以使用插件来更改站点的盐。

    Salt Shaker插件是一个优势手动方法流行的自由选择:

    您可以将其设置为按照您定义的时间表自动更改Salts。或者,您也可以仅使用它来手动更改Salts。

    安装并激活插件后,转到Tools → Salt Shaker

    如果您想立即手动更改Salts,只需单击“Change Now按钮。

    或者,您也可以使用Scheduled Change功能按照以下计划之一自动更改Salts:

    • 日常的
    • 每周
    • 每月
    • 每季度(每三个月)
    • 每半年(每六个月)

    如何使用Salt Shaker插件

    如何使用Salt Shaker插件

    一些WordPress安全插件,特别是iThemes Security,还包括可以轻松更改WordPress Salts的功能。

    小结

    WordPress Salts和安全密钥有助于保护您网站的登录过程和WordPress用于验证用户身份的cookie。

    默认情况下,您的站点带有自己的一组Salts和键,因此您无需设置任何内容即可从Salts中受益。

    但是,定期更改您的Salts分使恶意行为者更难访问它们具有安全优势。

    要更改Salts,您可以使用WordPress.org的Salts生成器并手动编辑您的wp-config.php文件,或者您可以使用免费插件,如 Salt Shaker。

  • 40个最常用的Linux命令行大全

    40个最常用的Linux命令行大全

    在撰写本文时,Linux在台式机上的全球市场份额为2.68%,但超过90%的云基础设施和托管服务都在该操作系统中运行。仅出于这个原因,熟悉流行的Linux命令就至关重要。

    根据2020年StackOverflow调查,Linux是专业开发人员使用最多的操作系统,拥有令人印象深刻的55.9%的市场份额。这不仅仅是巧合。Linux是免费的、开源的,比竞争对手具有更好的安全性,并且拥有强大的命令行,使开发人员和高级用户更加高效。

    无论您是经验丰富的系统管理员还是Linux新手,都可以利用本指南。

    1. 什么是Linux命令?
    2. 最常用的Linux命令
    3. Linux命令备忘单

    什么是Linux命令?

    Linux命令是在命令行上运行的程序或实用程序。命令行是一个界面,它接受文本行并将其处理为计算机的指令。

    任何图形用户界面(GUI)都只是命令行程序的抽象。例如,当您通过单击“X”关闭窗口时,该操作后面会运行一个命令。

    标志(flag)是我们可以向您运行的命令传递选项的一种方式。大多数Linux命令都有一个帮助页面,我们可以使用-h标记调用该页面。大多数情况下,标志是可选的。

    argumentparameter是我们给命令的输入,以便它可以正常运行。在大多数情况下,参数是一个文件路径,但它可以是您在终端中键入的任何内容。

    可以使用连字符 (-) 和双连字符 (--)调用标志,而参数的执行取决于将它们传递给函数的顺序。

    最常用的Linux命令

    在开始使用最常用的Linux命令之前,请确保启动终端(terminal)。在大多数Linux发行版中,您可以使用Ctrl + Alt + T来执行此操作。如果这不起作用,请在应用程序面板中搜索“terminal”

    Linux终端模拟器

    Linux终端模拟器。

    现在,让我们一起来了解40个最常用的Linux命令。其中许多选项可以串到它们,所以请务必查看命令手册.

    1. ls命令

    ls可能是每个Linux用户在其终端中键入的第一个命令。它允许您列出您想要的目录的内容(默认情况下是当前目录),包括文件和其他嵌套目录。

    ls
    ls
    ls

    它有很多选择,所以最好使用 --help 来获得一些帮助。此标志返回所有可以与 ls一起使用的flags参数。

    例如,要着色 ls 命令的输出,您可以使用以下命令:

    ls –color=auto
    ls –color=auto
    ls --color=auto

    ls着色命令

    ls着色命令

    现在 ls 命令输出已着色,您可以欣赏目录和文件之间的区别。

    但是,用彩色标志打字是低效的:这就是我们使用命令 lsalias 的原因。

    2.alias命令

    alias命令允许您在shell会话中定义临时别名。创建别名时,您指示shell用一系列命令替换单词。

    例如,要设置 ls 为颜色而不每次键入标志 --color,您将使用:

    alias ls=“ls –color=auto”
    alias ls=”ls –color=auto”
    alias ls="ls --color=auto"

    正如你所看到的,alias命令需要一个关键值对参数:alias NAME="VALUE" .请注意,该值必须是使用引号。

    如果你想列出你的shell会话中所有的别名,你可不使用argument运行命令alias

    alias
    alias
    alias

    alias命令

    alias命令。

    3.unalias命令

    顾名思义,unalias命令旨在从已定义的别名中删除alias。要删除以前的ls别名,可以使用:

    unalias ls
    unalias ls
    unalias ls

    4. pwd命令

    pwd命令代表“打印工作目录”,它输出您所在目录的绝对路径。例如,如果您的用户名是“john”,并且您位于文档目录中,则其绝对路径将是 /home/john/Documents.

    要使用它,只需在终端中键入pwd

    pwd
    # My result: /home/wbolt/Documents/linux-commands
    pwd
    # My result: /home/wbolt/Documents/linux-commands
    pwd
    # My result: /home/wbolt/Documents/linux-commands

    5. cd命令

    cd命令与ls都非常流行。它指的是“更改目录”,顾名思义,它会将您切换到您试图访问的目录。

    例如,如果您在Documents目录中,并且试图访问其名为Videos的子文件夹之一,则可以通过键入以下内容来输入:

    cd Videos
    cd Videos
    cd Videos

    您还可以提供文件夹的绝对路径:

    cd /home/wbolt/Documents/Videos
    cd /home/wbolt/Documents/Videos
    cd /home/wbolt/Documents/Videos

    在使用cd命令时,有一些技巧可以为您节省大量时间:

    1. 进入home文件夹

    cd
    cd
    cd

    2. 向上移动一个级别

    cd ..
    cd ..
    cd ..

    3. 返回上一个目录

    cd –
    cd –
    cd -

    6. cp 命令

    直接在Linux终端上复制文件和文件夹非常容易,有时它可以取代传统的文件管理器。

    要使用cp命令,只需将其与源文件和目标文件一起键入即可:

    cp file_to_copy.txt new_file.txt
    cp file_to_copy.txt new_file.txt
    cp file_to_copy.txt new_file.txt

    还可以使用递归标志复制整个目录:

    cp -r dir_to_copy/ new_copy_dir/
    cp -r dir_to_copy/ new_copy_dir/
    cp -r dir_to_copy/ new_copy_dir/

    请记住,在Linux中,文件夹以正斜杠 (/)结尾。

    7. rm命令

    既然您已经知道了如何复制文件,那么了解如何删除它们将很有帮助。

    您可以使用rm命令删除文件和目录。但在使用时要小心,因为用这种方法恢复删除的文件非常困难(但并非不可能)。

    要删除常规文件,请键入:

    rm file_to_copy.txt
    rm file_to_copy.txt
    rm file_to_copy.txt

    如果要删除空目录,可以使用递归(-r)标志:

    rm -r dir_to_remove/
    rm -r dir_to_remove/
    rm -r dir_to_remove/

    另一方面,要删除包含内容的目录,需要使用force(-f)和recursive标志:

    rm -rf dir_with_content_to_remove/
    rm -rf dir_with_content_to_remove/
    rm -rf dir_with_content_to_remove/

    警告:误用这两个标志,你可能会抹掉一整天的工作!

    8. mv命令

    您可以使用mv命令在文件系统中移动(或重命名)文件和目录。

    若要使用此命令,请将其名称与源文件和目标文件一起键入:

    mv source_file destination_folder/
    mv command_list.txt commands/
    mv source_file destination_folder/
    mv command_list.txt commands/
    mv source_file destination_folder/
    mv command_list.txt commands/

    要使用绝对路径,请使用:

    mv /home/wbolt/BestMoviesOfAllTime ./
    mv /home/wbolt/BestMoviesOfAllTime ./
    mv /home/wbolt/BestMoviesOfAllTime ./

    …where ./是您当前所在的目录。

    您还可以使用mv重命名文件,同时将其保留在同一目录中:

    mv old_file.txt new_named_file.txt
    mv old_file.txt new_named_file.txt
    mv old_file.txt new_named_file.txt

    9.mkdir命令

    要在shell中创建文件夹,可以使用mkdir命令。只需指定新文件夹的名称,确保它不存在,然后就可以开始了。

    例如,要创建一个保存所有图像的目录,只需键入:

    mkdir images/
    mkdir images/
    mkdir images/

    要使用简单命令创建子目录,请使用parent(-p)标志:

    mkdir -p movies/2004/
    mkdir -p movies/2004/
    mkdir -p movies/2004/

    10.man命令

    另一个重要的Linux命令是man。它显示任何其他命令的手册页面(只要有)。

    要查看mkdir命令的手册页,请键入:

    man mkdir
    man mkdir
    man mkdir

    您甚至可以查看 man 命令手册页面:

    man man
    man man
    man man

    man命令手册页面

    man命令手册页面。

    11.touch命令

    touch命令允许您更新指定文件的访问和修改时间。

    例如,我有一个旧文件,上次修改是在4月12日:

    旧日期

    旧日期。

    要将其修改日期更改为当前时间,我们需要使用-m标志:

    touch -m old_file
    touch -m old_file
    touch -m old_file

    现在日期与今天的日期相符(开始编写本文时的日期为8月8日)。

    新日期

    新日期

    尽管如此,大多数情况下,您不会使用touch来修改文件日期,而是创建新的空文件:

    touch new_file_name
    touch new_file_name
    touch new_file_name

    12. chmod 命令

    chmod命令允许您快速更改文件的模式(权限)。它有很多可用的选项。

    文件的基本权限包括:

    • r (只读)
    • w (写入)
    • x (执行)

    chmod最常见的用例之一是使文件可由用户执行。为此,请键入chmod和标志

  • 跨版本PHP代码转换终极教程

    跨版本PHP代码转换的终极指南

    在理想情况下,我们应该为我们的所有网站使用PHP8.0(撰写本文时的最新版本),并在新版本发布后立即进行更新。但是,开发人员通常需要使用以前的PHP版本,例如为WordPress创建公共插件或使用妨碍升级Web服务器环境的遗留代码时。

    在这种情况下,我们可能会放弃使用最新PHP代码的希望。但是还有一个更好的选择:我们仍然可以使用PHP8.0编写源代码,并将其转换到以前的PHP版本,甚至是PHP7.1。

    在本指南中,我们将教您有关转换PHP代码的所有知识。

    1. 什么是Transpiling?
    2. Transpiling PHP的优势
    3. PHP转换器(PHP Transpilers)
    4. 转换到哪一个PHP版本
    5. Transpiling vs Backporting
    6. Transpiled PHP示例
    7. 转换PHP的利弊
    8. 如何转换PHP
    9. 优化转换过程
    10. 转换代码时要避免的坑
    11. 转换和连续集成
    12. 测试转换代码

    什么是Transpiling?

    Transpiling将源代码从编程语言转换为相同或不同编程语言的等效源代码。

    Transpiling并不是Web开发中的一个新概念:客户端开发人员很可能熟悉Babel,JavaScript代码的转换器。

    Babel将现代ECMAScript 2015+版本中的JavaScript代码转换为与旧浏览器兼容的旧版本。例如,给定ES2015箭头函数:

    [2, 4, 6].map((n) => n * 2);
    [2, 4, 6].map((n) => n * 2);
    [2, 4, 6].map((n) => n * 2);
    

    …Babel将其转换为ES5版本:

    [2, 4, 6].map(function(n) {
    return n * 2;
    });
    [2, 4, 6].map(function(n) {
    return n * 2;
    });
    [2, 4, 6].map(function(n) {
      return n * 2;
    });
    

    什么是Transpiling PHP?

    Web开发中潜在的新功能是转换服务器端代码的可能性,特别是PHP。

    转换PHP的工作方式与转换JavaScript的工作方式相同:现代PHP版本的源代码转换为旧PHP版本的等效代码。

    下面是与前面相同的示例,PHP 7.4中的箭头函数:

    $nums = array_map(fn($n) => $n * 2, [2, 4, 6]);
    $nums = array_map(fn($n) => $n * 2, [2, 4, 6]);
    $nums = array_map(fn($n) => $n * 2, [2, 4, 6]);
    

    …可以转换为其等效的PHP 7.3版本:

    $nums = array_map(
    function ($n) {
    return $n * 2;
    },
    [2, 4, 6]
    );
    $nums = array_map(
    function ($n) {
    return $n * 2;
    },
    [2, 4, 6]
    );
    $nums = array_map(
      function ($n) {
        return $n * 2;  
      },
      [2, 4, 6]
    );
    

    可以转换箭头函数,因为它们是语法糖,即生成现有行为的新语法。这是低垂的果实。

    然而,也有一些新特性创建了一种新的行为,因此,对于以前版本的PHP不会有等效的代码。PHP 8.0中引入的联合类型就是这样:

    function someFunction(float|int $param): string|float|int|null
    {
    // …
    }
    function someFunction(float|int $param): string|float|int|null
    {
    // …
    }
    function someFunction(float|int $param): string|float|int|null
    {
      // ...
    }
    

    在这些情况下,只要开发需要新特性,而不是生产需要新特性,就仍然可以进行转换。然后,我们可以简单地从转换的代码中完全删除该特性,而不会产生严重后果。

    联合类型就是这样一个例子。此功能用于检查输入类型与其提供的值之间是否不匹配,这有助于防止错误。如果与类型发生冲突,那么开发中就会出现错误,我们应该在代码到达生产环境之前捕获并修复它。

    因此,我们可以从生产代码中删除该功能:

    function someFunction($param)
    {
    // …
    }
    function someFunction($param)
    {
    // …
    }
    function someFunction($param)
    {
      // ...
    }
    

    如果错误仍然发生在生产中,抛出的错误消息将不如使用联合类型时准确。然而,这一潜在的缺点被能够首先使用联合类型所抵消。

    Transpiling PHP的优势

    Transpiling使您能够使用最新版本的PHP编写应用程序,并生成一个在运行旧版本PHP的环境中也能工作的版本。

    这对于为旧式内容管理系统(CMS)创建产品的开发人员特别有用。例如,WordPress仍然官方支持PHP5.6(尽管它推荐PHP7.4+)。运行PHP版本5.6到7.2的WordPress站点的百分比为34.8%,而运行PHP版本(8.0除外)的站点的百分比高达99.5%:

    WordPress使用情况统计(按版本)

    WordPress使用情况统计(按版本)图像来源:WordPress

    因此,面向全球受众的WordPress主题和插件很可能使用旧版本的PHP进行编码,以增加其可能的影响范围。多亏了transpiling,这些代码可以使用PHP8.0进行编码,并且仍然可以针对较旧的PHP版本发布,从而尽可能多地面向用户。

    事实上,任何需要支持除最新版本以外的任何PHP版本(即使在当前支持的PHP版本范围内)的应用程序都可以从中受益。

    Drupal就是这样,它需要PHP7.3。由于transpiling,开发人员可以使用PHP8.0创建公开可用的Drupal模块,并使用PHP7.3发布它们。

    另一个例子是为由于某种原因而无法在其环境中运行PHP8.0的客户机创建自定义代码时。尽管如此,多亏了transpiling,开发人员仍然可以使用PHP8.0编写可交付成果,并在这些遗留环境中运行它们。

    何时需要转换PHP(Transpile PHP)

    PHP代码始终可以转换,除非它包含一些在之前的PHP版本中没有对等的PHP功能。

    情况可能就是这样属性,在PHP 8.0中介绍:

    #[SomeAttr]
    function someFunc() {}
    #[AnotherAttr]
    class SomeClass {}
    #[SomeAttr]
    function someFunc() {}

    #[AnotherAttr]
    class SomeClass {}

    #[SomeAttr]
    function someFunc() {}
    
    #[AnotherAttr]
    class SomeClass {}

    在前面使用箭头函数的示例中,可以转换代码,因为箭头函数是语法糖。相反,属性创建了全新的行为。PHP7.4及以下版本也可以复制这种行为,但只能通过手动编码,即不自动基于工具或流程(AI可以提供解决方案,但我们还没有)。

    用于开发的属性,如#[Deprecated],可以用删除联合类型的相同方式删除。但是,不能删除在生产中修改应用程序行为的属性,也不能直接转换这些属性。

    到目前为止,没有一个transpiler能够接受具有PHP8.0属性的代码并自动生成其等效PHP7.4代码。因此,如果您的PHP代码需要使用属性,那么转换它将是困难的或不可行的。

    可转换PHP功能

    这些是PHP7.1及以上版本的特性,目前可以转换。如果您的代码只使用这些特性,那么您可以确信您的转换应用程序将正常工作。否则,您将需要评估转换的代码是否会产生故障。

    PHP 版本 特征
    7.1 所有都可以
    7.2 – object type
    – parameter type widening
    – PREG_UNMATCHED_AS_NULL flag in preg_match
    7.3 – Reference assignments in list() / array destructuring (Except inside foreach — #4376)
    – Flexible Heredoc and Nowdoc syntax
    – Trailing commas in functions calls
    – set(raw)cookie accepts $option argument
    7.4 – Typed properties
    – 
    Arrow functions
    – 
    Null coalescing assignment operator
    – 
    Unpacking inside arrays
    – 
    Numeric literal separator
    – 
    strip_tags() with array of tag names
    – 
    covariant return types and contravariant param types
    8.0 – Union types
    – 
    mixed pseudo type
    – 
    static return type
    – 
    ::class magic constant on objects
    – 
    match expressions
    – 
    catch exceptions only by type
    – 
    Null-safe operator
    – 
    Class constructor property promotion
    – 
    Trailing commas in parameter lists and closure use lists

    PHP转换器(PHP Transpilers)

    目前,有一个用于转换PHP代码的工具:Rector

    Rector是一个PHP重构工具,它根据可编程规则转换PHP代码。我们输入源代码和要运行的规则集,Rector将转换代码。

    Rector通过命令行操作,通过Composer安装在项目中。执行时,Rector将在转换前后输出代码的“diff”(添加为绿色,删除为红色):

    来自Rector的“diff”输出

    来自Rector的“diff”输出

    转换到哪一个PHP版本

    要跨PHP版本转换代码,必须创建相应的规则。

    今天,Rector库包含PHP8.0到7.1范围内的大多数代码转换规则。因此,我们可以可靠地将PHP代码转换到7.1版。

    也有从PHP7.1到7.0以及从7.0到5.6的转换规则,但这些规则并不详尽。完成这些代码的工作正在进行中,因此我们可能最终会将PHP代码转换到5.6版。

    Transpiling vs Backporting

    Backporting与Transpiling类似,但更简单。Backporting代码不一定依赖于语言的新特性。相反,只需从新版本的语言复制/粘贴/改编相应的代码,就可以为旧版本的语言提供相同的功能。

    例如,PHP 8.0中引入了str_contains函数。PHP 7.4及以下版本的相同功能可以像这样轻松实现:

    if (!defined(‘PHP_VERSION_ID’) || (defined(‘PHP_VERSION_ID’) && PHP_VERSION_ID < 80000)) {
    if (!function_exists(‘str_contains’)) {
    /**
    * Checks if a string contains another
    *
    * @param string $haystack The string to search in
    * @param string $needle The string to search
    * @return boolean Returns TRUE if the needle was found in haystack, FALSE otherwise.
    */
    function str_contains(string $haystack, string $needle): bool
    {
    return strpos($haystack, $needle) !== false;
    }
    }
    }
    if (!defined(‘PHP_VERSION_ID’) || (defined(‘PHP_VERSION_ID’) && PHP_VERSION_ID < 80000)) {
    if (!function_exists(‘str_contains’)) {
    /**
    * Checks if a string contains another
    *
    * @param string $haystack The string to search in
    * @param string $needle The string to search
    * @return boolean Returns TRUE if the needle was found in haystack, FALSE otherwise.
    */
    function str_contains(string $haystack, string $needle): bool
    {
    return strpos($haystack, $needle) !== false;
    }
    }
    }
    if (!defined('PHP_VERSION_ID') || (defined('PHP_VERSION_ID') && PHP_VERSION_ID < 80000)) {
      if (!function_exists('str_contains')) {
        /**
         * Checks if a string contains another
         *
         * @param string $haystack The string to search in
         * @param string $needle The string to search
         * @return boolean Returns TRUE if the needle was found in haystack, FALSE otherwise.
         */
        function str_contains(string $haystack, string $needle): bool
        {
          return strpos($haystack, $needle) !== false;
        }
      }
    }

    因为Backporting比Transpiling更简单,所以无论何时进行Backporting,我们都应该选择这种解决方案。

    关于PHP8.0到7.1之间的范围,我们可以使用Symfony的polyfill库:

    这些库支持以下函数、类、常量和接口:

    PHP 版本 特征
    7.2 功能:

    函数:

    7.3 功能:

    异常处理:

    7.4 功能:

    8.0 接口:

    • Stringable

    类:

    • ValueError
    • UnhandledMatchError

    函数:

    • FILTER_VALIDATE_BOOL

    功能:

    Transpiled PHP示例

    让我们一起来看看几个转换PHP代码的示例,以及几个正在完全转换的包。

    PHP代码

    match 表达式是在PHP8.0中引入的。此源代码:

    function getFieldValue(string $fieldName): ?string
    {
    return match($fieldName) {
    ‘foo’ => ‘foofoo’,
    ‘bar’ => ‘barbar’,
    ‘baz’ => ‘bazbaz’,
    default => null,
    };
    }
    function getFieldValue(string $fieldName): ?string
    {
    return match($fieldName) {
    ‘foo’ => ‘foofoo’,
    ‘bar’ => ‘barbar’,
    ‘baz’ => ‘bazbaz’,
    default => null,
    };
    }
  • 在JavaScript中使用媒体查询的教程

    在JavaScript中使用媒体查询的教程

    大多数现代网站使用响应性网页设计技术,以确保其外观良好、可读性好,并在任何屏幕大小的设备上保持可用性,如手机、平板电脑、笔记本电脑、台式电脑显示器、电视、投影仪等。

    使用这些技术的站点有一个模板,该模板根据屏幕尺寸修改布局:

    较小的屏幕通常显示线性、单列视图,其中通过单击(汉堡)图标激活菜单等UI控件。

    更大的屏幕显示更多信息,可能带有水平对齐的侧栏。UI控件(如菜单项)可能始终可见,以便于访问。

    响应式web设计的一个重要部分是实现CSS或JavaScript媒体查询,以检测设备大小并自动提供适合该大小的设计。我们将讨论为什么这些查询很重要以及如何使用它们,但首先,让我们讨论一般的响应式设计。

    1. 为什么响应式设计很重要?
    2. 响应式设计如何工作?
    3. 媒体查询最佳实践
    4. 媒体查询备选方案
    5. 您是否需要JavaScript中的媒体查询?
    6. 选项 1:监视视场维度
    7. 选项 2:定义和监视CSS自定义属性(可变)
    8. 选项 3: 使用匹配媒体API

    为什么响应式设计很重要?

    不可能只提供一个页面布局,而期望它在任何地方都能工作。

    当手机在21世纪初首次获得基本的web访问时,网站所有者通常会创建两到三个单独的页面模板,松散地基于手机和桌面视图。随着设备种类呈指数级增长,这种做法变得越来越不切实际。

    今天,有许多屏幕尺寸,从微型手表显示器到巨大的8K显示器甚至更大。即使你只考虑手机,最近的设备可以比许多低端笔记本电脑具有更高的分辨率。

    移动设备的使用量也超过了台式电脑。除非你的网站有一组特定的用户,否则你可以期望大多数人通过智能手机访问它。尽管大多数网页设计师、开发人员和客户继续使用标准PC机,但小屏幕设备已不再是后知后觉,应该从一开始就加以考虑。

    谷歌已经认识到移动设备的重要性。当网站在智能手机上可用且表现良好时,在谷歌搜索中排名会更好。好的内容仍然至关重要,但加载速度慢、无法适应用户群屏幕尺寸的网站可能会损害您的业务。

    最后,考虑可访问性。一个适合所有人的网站,无论他们使用什么设备,都会吸引更多的观众。可访问性是许多国家的法律要求,但即使不是你所在的地方,也要考虑到更多的观众会带来更多的转换和更高的盈利能力。

    响应式设计如何工作?

    响应式设计的基础是媒体查询:一种CSS技术,可以根据输出类型(屏幕、打印机甚至语音)、屏幕尺寸、显示纵横比、设备方向、颜色深度和指针精度等指标应用样式。媒体查询还可以考虑用户偏好,包括减少动画、明暗模式和更高对比度。

    我们展示的示例演示了仅使用屏幕宽度的媒体查询,但是站点可以更加灵活。有关详细信息,请参阅MDN上的全套选项

    媒体查询支持非常出色,已经在浏览器中使用了十多年。只有IE8及以下版本没有支持。它们忽略了媒体查询应用的样式,但这有时会带来好处(请参阅下面的最佳实践部分)。

    使用媒体查询应用样式有三种标准方法。第一个加载HTML代码中的特定样式表。例如,当设备的屏幕宽度至少为800像素时,以下标记将加载wide.css样式表:

    <link rel=“stylesheet” media=“screen and (min-width: 800px)” href=“wide.css” />
    <link rel=”stylesheet” media=”screen and (min-width: 800px)” href=”wide.css” />
    <link rel="stylesheet" media="screen and (min-width: 800px)" href="wide.css" />

    其次,样式表可以使用@import规则有条件地加载到CSS文件中:

    /* main.css */
    @import url(‘wide.css’) screen and (min-width: 800px);
    /* main.css */
    @import url(‘wide.css’) screen and (min-width: 800px);
    /* main.css */
    @import url('wide.css') screen and (min-width: 800px);

    请注意,应避免使用@import,因为每个导入的CSS文件都是渲染块。HTML的<link>标记是并行下载的,而@import则是串行下载文件。

    更典型的是,您将使用@media CSS规则块在样式表中应用媒体查询,该规则块修改特定的样式。例如:

    /* default styles */
    main {
    width: 400px;
    }
    /* styles applied when screen has a width of at least 800px */
    @media screen and (min-width: 800px) {
    main {
    width: 760px;
    }
    }
    /* default styles */
    main {
    width: 400px;
    }

    /* styles applied when screen has a width of at least 800px */
    @media screen and (min-width: 800px) {
    main {
    width: 760px;
    }
    }

    /* default styles */
    main {
      width: 400px;
    }
    
    /* styles applied when screen has a width of at least 800px */
    @media screen and (min-width: 800px) {
      main {
        width: 760px;
      }
    }

    开发人员可以应用任何必要的媒体查询规则来调整站点的布局。

    媒体查询最佳实践

    最初设计媒体查询时,许多网站选择了一套固定的布局。这在概念上更易于设计和编码,因为它有效地复制了一组有限的页面模板。例如:

    1. 小于600px的屏幕宽度使用400px宽的移动式布局。
    2. 600px和999px之间的屏幕宽度使用600px宽的平板电脑布局。
    3. 大于1000px的屏幕宽度使用1000px宽的桌面式布局。

    这项技术有缺陷。在非常小和非常大的屏幕上的结果可能看起来很差,并且随着设备和屏幕尺寸的变化,可能需要CSS维护。

    一个更好的选择是使用带有断点的“移动第一流体”设计,该断点可以在特定大小下调整布局。本质上,默认布局使用最简单的小屏幕样式,将元素定位在线性垂直块中。

    例如,<article><aside><main>容器内:

    /* default small-screen device */
    main {
    width: 100%;
    }
    article, aside {
    width: 100%;
    padding: 2em;
    }
    /* default small-screen device */
    main {
    width: 100%;
    }

    article, aside {
    width: 100%;
    padding: 2em;
    }

    /* default small-screen device */
    main {
      width: 100%;
    }
    
    article, aside {
      width: 100%;
      padding: 2em;
    }

    以下是所有浏览器的结果-即使是不支持媒体查询的非常旧的浏览器:

    不支持媒体查询的示例屏幕截图

    不支持媒体查询的示例屏幕截图。

    当支持媒体查询且屏幕超过特定宽度(例如500px)时,<article><aside>元素可以水平放置。本例使用CSS网格,其中主要内容使用大约三分之二的宽度,次要内容使用剩余的三分之一:

    /* larger device */
    @media (min-width: 500px) {
    main {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 2em;
    }
    article, aside {
    width: auto;
    padding: 0;
    }
    }
    /* larger device */
    @media (min-width: 500px) {
    main {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 2em;
    }

    article, aside {
    width: auto;
    padding: 0;
    }
    }

    /* larger device */
    @media (min-width: 500px) {
      main {
        display: grid;
        grid-template-columns: 2fr 1fr;
        gap: 2em;
      }
    
      article, aside {
        width: auto;
        padding: 0;
      }
    }

    以下是大屏幕上的结果:

    支持媒体查询的示例屏幕截图

    支持媒体查询的示例屏幕截图

    媒体查询替代方案

    响应性设计也可以在现代CSS中使用更新的属性实现,这些属性本质上适应布局,而无需检查视口尺寸。选择包括:

    • calcmin-widthmax-widthmin-heightmax-height和较新的clamp属性都可以定义尺寸标注,根据已知限制和可用空间调整图元的大小。
    • 视口单位vwvhvminvmax 可以根据屏幕尺寸分数调整元素的大小。
    • 文本可以显示在CSS列中,在空间允许的情况下显示或消失。
    • 可以使用min-contentfit-content 和 max-content 维度,根据元素的子元素大小调整元素的大小。
    • CSS flexbox可以在元素开始超出可用空间时进行换行或不换行。
    • CSS网格元素可以使用比例分数 fr 单位调整大小。repeat CSS函数可以与minmaxauto-fit 和 auto-fill结合使用,以分配可用空间。
    • 新的和(当前)实验性的CSS容器查询可以对布局中组件可用的部分空间作出反应。

    这些选项超出了本文的范围,但它们通常比只能响应屏幕尺寸的粗糙媒体查询更实用。如果您可以在没有媒体查询的情况下实现布局,那么随着时间的推移,它可能会使用更少的代码,更高效,并且需要更少的维护。

    也就是说,在某些情况下,媒体查询仍然是唯一可行的布局选项。当你需要考虑其他屏幕因素时,它们仍然是必不可少的,比如纵横比、设备方向、颜色深度、指针精度,或者用户偏好,比如动画和光/暗模式。

    您是否需要JavaScript中的媒体查询?

    到目前为止,我们主要讨论CSS。这是因为大多数布局问题都可以而且应该单独用CSS来解决。

    但是,在某些情况下,使用JavaScript媒体查询而不是CSS是可行的,例如:

    • 诸如菜单之类的组件在小屏幕和大屏幕上具有不同的功能。
    • 切换纵向/横向会影响web应用程序的功能。
    • 基于触摸的游戏必须更改<canvas>布局或调整控制按钮。
    • web应用程序遵循用户偏好,如暗/光模式、减少动画、触摸粗糙度等。

    以下部分演示了在JavaScript中使用媒体查询或类似于媒体查询的选项的三种方法。所有示例都返回一个状态字符串,其中:

    • 小视图=宽度小于400像素的屏幕;
    • 中视图=宽度在400到799像素之间的屏幕;
    • 大视图=宽度为800像素或更多的屏幕。

    选项 1:监视视场维度

    在媒体查询实施之前的黑暗日子里,这是唯一的选择。JavaScript将侦听浏览器“调整大小”事件,使用window.innerWidthwindow.innerHeight(或旧IE中的document.body.clientWidthdocument.body.clientHeight)分析视口尺寸,并做出相应的反应。

    此代码将计算出的字符串输出到控制台:

    const
    screen = {
    small: 0,
    medium: 400,
    large: 800
    };
    // observe window resize
    window.addEventListener(‘resize’, resizeHandler);
    // initial call
    resizeHandler();
    // calculate size
    function resizeHandler() {
    // get window width
    const iw = window.innerWidth;
    // determine named size
    let size = null;
    for (let s in screen) {
    if (iw >= screen[s]) size = s;
    }
    console.log(size);
    }
    const
    screen = {
    small: 0,
    medium: 400,
    large: 800
    };

    // observe window resize
    window.addEventListener(‘resize’, resizeHandler);

    // initial call
    resizeHandler();

    // calculate size
    function resizeHandler() {

    // get window width
    const iw = window.innerWidth;

    // determine named size
    let size = null;
    for (let s in screen) {
    if (iw >= screen[s]) size = s;
    }

    console.log(size);
    }

    const
      screen = {
        small: 0,
        medium: 400,
        large: 800
      };
    
    // observe window resize
    window.addEventListener('resize', resizeHandler);
    
    // initial call
    resizeHandler();
    
    // calculate size
    function resizeHandler() {
    
      // get window width
      const iw = window.innerWidth;
     
      // determine named size
      let size = null;
      for (let s in screen) {
        if (iw >= screen[s]) size = s;
      }
    
      console.log(size);
    }

    您可以在此处查看工作演示。(如果使用桌面浏览器,请在新窗口中打开此链接,以便于调整大小。移动用户可以旋转设备。)

    上面的示例在调整浏览器大小时检查视口大小;确定它是小型、中型还是大型;并将其设置为body元素上的类,从而更改背景颜色。

    这种方法的优点包括:

    • 它可以在每一个可以运行JavaScript的浏览器中运行——甚至是古老的应用程序。
    • 您正在捕获准确的尺寸,并可以做出相应的反应。

    缺点是:

    • 这是一种需要大量代码的老技术。
    • 是不是太精确了?你真的需要知道宽度是966px还是967px吗?
    • 您可能需要手动将维度匹配到相应的CSS媒体查询。
    • 用户可以快速调整浏览器大小,使处理程序功能每次都再次运行。这会通过限制事件来重载较旧和较慢的浏览器。它只能每500毫秒触发一次。

    总之,除非有非常具体和复杂的大小调整要求,否则不要监视视口尺寸。

    选项 2:定义和监视CSS自定义属性(可变)

    这是一种稍微不寻常的技术,它在触发媒体查询时更改CSS中自定义属性字符串的值。所有现代浏览器(但不是IE)都支持自定义属性。

    在下面的示例中,@media代码块内的--screen custom property设置为“small”、“medium”或“large”:

    body {
    –screen: “small”;
    background-color: #cff;
    text-align: center;
    }
    @media (min-width: 400px) {
    body {
    –screen: “medium”;
    background-color: #fcf;
    }
    }
    @media (min-width: 800px) {
    body {
    –screen: “large”;
    background-color: #ffc;
    }
    }
    body {
    –screen: “small”;
    background-color: #cff;
    text-align: center;
    }

    @media (min-width: 400px) {

    body {
    –screen: “medium”;
    background-color: #fcf;
    }

    }

    @media (min-width: 800px) {

    body {
    –screen: “large”;
    background-color: #ffc;
    }

    }

    body {
      --screen: "small";
      background-color: #cff;
      text-align: center;
    }
    
    @media (min-width: 400px) {
     
      body {
        --screen: "medium";
        background-color: #fcf;
      }
     
    }
    
    @media (min-width: 800px) {
     
      body {
        --screen: "large";
        background-color: #ffc;
      }
     
    }

    可以使用伪元素单独在CSS中输出该值(但请注意,它必须包含在单引号或双引号中):

    p::before {
    content: var(–screen
  • 如何使用Vue创建无头WordPress网站

    了解如何使用Vue创建无头WordPress网站

    WordPress一直是开发者和非开发者快速构建和创建惊人网站的内容管理系统。

    使用内容管理后端与前端分离的微服务体系结构,可以最大限度地控制两个“端”。这种分离问题正是无头内容管理系统(包括无头WordPress解决方案)试图解决的问题。

    通过无头方法,企业可以对内容管理后端进行更精细的控制。他们还可以自由使用自己选择的任何前端,包括React、Vue、Angular等。

    本指南将详细探讨无头WordPress,以及它的全部内容、何时以及为什么应该考虑使用它。最后,我们将探索创建无头WordPress环境,使用Vue.js构建前端,并部署无头WordPress。

    1. 什么是无头WordPress
    2. 无头WordPress的利弊
    3. 何时无头WordPress可能不是最好的选择
    4. 谁应该使用无头WordPress
    5. 谁应该避免使用无头WordPress
    6. 如何搭建无头WordPress(构建应用程序)

    什么是无头WordPress

    WordPress是一个整体式应用程序,后端和前端部分紧密地缠绕在一起。后端是进行管理的地方,在这里您可以创建、编辑、添加和删除内容,包括更改外观配置。相反,前端负责向用户显示内容。

    无头WordPress是用来描述解耦WordPress的术语。后台(管理)部分与WordPress CMS的前端部分是分开的。您可以使用您选择的任何前端框架作为独立应用程序开发和管理前端。

    无头WordPress的利弊

    接下来,我们将探讨无头WordPress的优缺点,让您更好地理解这个概念。

    优点

    (1)超高速性能-在这个应用程序运行速度极快的时代,您的网站加载时间不应超过几秒钟,以免失去访问者。由于前端与WordPress分离,并且可以使用现代前端工具开发高性能和可扩展性,因此采用无头WordPress方法对网站的整体用户体验非常有益。

    (2)粒度控制-选择无头架构可以让您更好地控制设计布局、内容展示以及用户与应用程序前端的交互方式。它还允许从中心位置保护和访问后端内容。

    (3)增强的可扩展性-扩展WordPress有时可能会很复杂,因为您无法完全控制驱动WordPress的所有组件和代码,主要是在您不是开发人员的情况下。但是通过WordPress的解耦,可以轻松地单独缩放每个部分,并且您可以轻松地检测出需要缩放的部分。

    (4)更严密的安全-我们无法充分强调无头WordPress的安全优势,因为解耦WordPress在抵御黑客和DDoS攻击方面具有很高的安全优势。无头WordPress方法使得黑客很难访问您的敏感后端数据,因为它与您的前端(面向用户的网站)是分开的。

    (5)轻量化设计-您将可以更好地控制前端设计的结构和布局。此外,您还可以在前端进行更自由的定制设计;由于RESTAPI调用,您将能够利用现代web工具并在前端部署它们。

    (6)多渠道内容发布-由于无头WordPress使用基于API的系统将您的内容传送到前端,因此您可以在任何位置和任何平台上显示您的内容,包括桌面、网站、移动应用程序和触摸屏信息亭。还可以充分利用增强现实、虚拟现实和物联网设备来显示和呈现来自基于API的系统的内容。

    缺点

    我们将更深入地探讨无头的缺点,但其主要缺点是:

    1. 在管理不同的网站实例时,分离后端和前端会给您带来额外的负载。
    2. 由于它需要团队中的额外成员和运行不同实例的额外资金,因此实施起来可能会很昂贵。
    3. 如果内容在所有平台上呈现不一致,则在不同平台上提供内容可能会导致用户体验不一致。

    何时无头WordPress可能不是最好的选择

    由于无头WordPress是一项具有巨大优势的难以置信的创新,因此在决定是否使用它时,您需要记住一些事情。

    • 无头WordPress的维护费用非常昂贵。从基础设施到多个开发人员,您将维护一个网站的两个不同实例。
    • 无头WordPress不支持WordPress的所有功能。例如,WordPress的强大功能,如所见即所得编辑器和live preview,在使用单独的前端时无法工作。
    • 设置无头WordPress的成本更高。因此,始终牢记其增加的成本。

    谁应该使用无头WordPress

    以下是您可能需要无头WordPress的最佳情况:

    1. 如果你的网站的安全性是你最关心的,也是对你的公司最重要的,那么你应该使用无头WordPress。
    2. 接下来,如果您的网站不需要定期升级和更新,这将是一个很好的迹象,表明您需要使用无头设置。
    3. 接下来,如果你想有一个WordPress主题不容易实现的定制设计,你需要用一个独特的设计来增加网站前端的趣味。那么,无头WordPress是你的下一个选择。
    4. 最后,如果你正在为演示和教程建立一个寿命很短的网站或演示网站,那么你可以尝试无头方法。

    谁应该避免使用无头WordPress

    以下几种情况下,使用无头WordPress不是一个好的选择:

    1. 当你的网站仅仅依赖于特定的插件和功能来控制应用程序的前端并与之协同工作时,你应该坚持使用WordPress,除非插件提供基于API的选项来使用数据。
    2. 假设您对编写网站代码不感兴趣,或者您的网站需要日常维护,并且由于预算较低,您没有雇佣专业人员进行日常维护。在这种情况下,WordPress是一个适合您的选项。
    3. 如果你不是一个经验丰富的开发人员,想单独创建和管理你的网站,你应该使用WordPress。

    如何搭建无头WordPress(构建应用程序)

    本节将探讨如何构建和开发一个新闻博客,其后端为无头WordPress,前端为Vue 3。

    使用Devkinsta设置无头WordPress

    我们将使用DevKinsta开发无头WordPress,DevKinsta是一个流行的WordPress本地开发环境,用于设计、开发和部署WordPress站点,使您的本地机器舒适。

    DevKinsta是永远免费的,它为您开发和构建WordPress提供了巨大的好处和舒适。

    您可以从官方网站下载并安装DevKinsta,并按照文档中的说明开始。

    由于我们已经安装了DevKinsta,我们将打开它并按照下面的步骤设置我们的第一个无头WordPress。

    在DevKinsta仪表板上,使用Nginx、MySQL和任何可用的WordPress版本创建一个新的WordPress站点。此外,您还可以从仪表板导入现有WordPress实例或创建自定义WordPress实例。

    接下来,为新创建的WordPress实例提供一个名称、管理员用户名和密码,然后单击Create并复制详细信息,同时DevKinsta在本地计算机中创建一个新的WordPress实例。

    接下来,单击“Open Site”,在默认浏览器上打开新创建的WordPress实例。

    最后,您可以通过访问 http://headless-wordpress-news-blog.local/wp-admin 链接并键入创建新实例时输入的管理员登录凭据。

    注意,我们已经在本地主机 http://news-blog.local使用URL  http://headless-wordpress-news-blog.local 设置了无头WordPress,我们将在整个教程中使用它。

    配置我们的无头WordPress

    接下来,在成功登录到WordPress仪表板之后,您可以继续安装您选择的任何插件和配置。

    我们将在本教程中完全禁用该主题,通过安装简单的网站重定向插件并进行设置,仅通过基于WordPress REST API的端点访问内容。

    转到Plugins > 安装插件并搜索Simple Website Redirect,安装并启用:

    WordPress插件安装

    WordPress插件安装

    接下来,单击插件Settings并输入基于前端的URL (e.g. http://news-blog.local),,单击Advanced setting options并将以下路径 — /wp-admin/wp-login.php/wp-json 添加到Exclude Paths。

    最后,通过在Redirect Status下拉列表中选择Enabled 来启用插件:

    Simple Website Redirect插件设置

    Simple Website Redirect插件设置

    此外,如果在默认情况下访问 http://headless-wordpress-news-blog.local/wp-json 时未启用JSON API,您可以通过在WordPress设置下打开固定链接并选择文章名Post Name或您选择的任何其他选项来启用该功能(但朴素Plain除外):

    WordPress固定链接

    WordPress固定链接

    现在当你访问你的http://headless-wordpress-news-blog.local/wp-json,它应该向您提供JSON数据,如下所示:

    {
    “name”: “Headless WordPress News Blog”,
    “description”: “Just another WordPress site”,
    “url”: “http://headless-wordpress-news-blog.local”,
    “home”: “http://headless-wordpress-news-blog.local”,
    “gmt_offset”: “0”,
    “timezone_string”: “”,
    “namespaces”: [
    “oembed/1.0”,
    “wp/v2”,
    “wp-site-health/v1”
    ],
    “authentication”: [
    ],
    “routes”: {
    “/”: {
    “namespace”: “”,
    “methods”: [
    “GET”
    ],
    “endpoints”: [
    {
    “methods”: [
    “GET”
    ],
    “args”: {
    “context”: {
    “default”: “view”,
    “required”: false
    }
    }
    }
    ],
    {
    “name”: “Headless WordPress News Blog”,
    “description”: “Just another WordPress site”,
    “url”: “http://headless-wordpress-news-blog.local”,
    “home”: “http://headless-wordpress-news-blog.local”,
    “gmt_offset”: “0”,
    “timezone_string”: “”,
    “namespaces”: [
    “oembed/1.0”,
    “wp/v2”,
    “wp-site-health/v1”
    ],
    “authentication”: [

    ],
    “routes”: {
    “/”: {
    “namespace”: “”,
    “methods”: [
    “GET”
    ],
    “endpoints”: [
    {
    “methods”: [
    “GET”
    ],
    “args”: {
    “context”: {
    “default”: “view”,
    “required”: false
    }
    }
    }
    ],

    {
      "name": "Headless WordPress News Blog",
      "description": "Just another WordPress site",
      "url": "http://headless-wordpress-news-blog.local",
      "home": "http://headless-wordpress-news-blog.local",
      "gmt_offset": "0",
      "timezone_string": "",
      "namespaces": [
        "oembed/1.0",
        "wp/v2",
        "wp-site-health/v1"
      ],
      "authentication": [
        
      ],
      "routes": {
        "/": {
          "namespace": "",
          "methods": [
            "GET"
          ],
          "endpoints": [
            {
              "methods": [
                "GET"
              ],
              "args": {
                "context": {
                  "default": "view",
                  "required": false
                }
              }
            }
          ],
    ...

    设置Vue.js(前端)

    我们将使用Vite web开发工具创建Vue 3应用程序,以连接无头WordPress。您可以阅读有关Vue 3Vite开发工具的更多信息。

    在本文中,我们将构建一个新闻博客。该项目的所有后端内容管理都将使用Devkinsta由我们的无头WordPress开发和托管。

    键入以下简单命令:

    npm init @vitejs/app news-blog
    cd news-blog
    npm install
    npm run dev
    npm init @vitejs/app news-blog
    cd news-blog
    npm install
    npm run dev
    npm init @vitejs/app news-blog
    cd news-blog
    npm install
    npm run dev

    如果您的用户名中存在空格问题,请尝试使用:

    npx create-vite-app news-blog
    npx create-vite-app news-blog
    npx create-vite-app news-blog

    最后,使用您选择的任何代码编辑器打开Vue 3代码库。我们将使用VSCode,下面让我们继续努力码字。

    使用WordPress API

    我们已经着手开发Vue应用程序的其余部分,以节省您的阅读时间,但您可以继续从我的GitHub克隆存储库

    显示文章列表组成部分

    下面的代码片段显示了我们如何使用Vue实例实现WordPress REST API,以显示来自无头WordPress的所有文章:

    <template>
    <section>
    <div class=“padding-top”>
    <div class=“container inner-padding-top”>
    <div class=“row”>
    <div class=“col-md-12 col-sm-12-col-xs-12 text-center”>
    <h2 class=“lead-title text-uppercase”>
    Latest Backend Dev. Articles
    </h2>
    <h3 class=“article-subtitle”>
    Latest Backend Dev. Articles curated daily by the community.
    </h3>
    </div>
    </div>
    <div class=“row mb-1 mt-5”>
    <post v-for=“(post, i) in posts” :key=“i” :post=“post” />
    </div>
    </div>
    </div>
    <div class=“col-md-12 col-sm-12-col-xs-12 text-center mb-5”>
    <Button link=“/posts” class=“col p-3”>More Articles</Button>
    </div>
    </section>
    </template>
    <script>
    import { mapState } from ‘vuex’
    export default {
    computed: {
    mapState({
    posts: (state) => {
    return […state.post.posts].slice(0, 22)
    },
    }),
    },
    }
    </script>
    <template>
    <section>
    <div class=”padding-top”>
    <div class=”container inner-padding-top”>
    <div class=”row”>
    <div class=”col-md-12 col-sm-12-col-xs-12 text-center”>
    <h2 class=”lead-title text-uppercase”>
    Latest Backend Dev. Articles
    </h2>
    <h3 class=”article-subtitle”>
    Latest Backend Dev. Articles curated daily by the community.
    </h3>
    </div>
    </div>
    <div class=”row mb-1 mt-5″>
    <post v-for=”(post, i) in posts” :key=”i” :post=”post” />
    </div>
    </div>
    </div>
    <div class=”col-md-12 col-sm-12-col-xs-12 text-center mb-5″>
    <Button link=”/posts” class=”col p-3″>More Articles</Button>
    </div>
    </section>
    </template>

    <script>
    import { mapState } from ‘vuex’
    export default {
    computed: {
    …mapState({
    posts: (state) => {
    return […state.post.posts].slice(0, 22)
    },
    }),
    },
    }
    </script>

  • 基于Laravel开发网站实时评论系统

    基于Laravel搭建网站实时评论系统

    为了在你的在线社区或博客中建立信任,你需要设计开发一套体验良好的Laravel实时评论系统。

    然而,要想在第一次尝试时就做到这一点并不容易,除非你依赖于诸如Discus或Commento这样的自托管评论系统,因为它们都有自己的缺点。他们拥有你的数据,提供有限的设计和定制,最重要的是,他们不是免费的。

    有了这些限制,如果构建实时评论系统的想法吸引了你,那就继续阅读吧。该系统可以控制你的数据,设计和定制适合你博客的外观和感觉。

    本文将教您如何开发一个设计良好的实时评论系统,该系统具有不同的评论功能。遵循使用Vue.js和Socket.io构建实时聊天应用程序的原则,我们将使用Laravel、Pusher和React来开发实时评论系统。

    1. 我们将开发什么
    2. 开发所需的技术
    3. 开发评论系统实例

    我们将开发什么

    我们将建立一个实时评论系统,可以集成到任何网站或博客中,以建立社区信任。

    开发所需的技术

    在深入开发之前,让我们先讨论一下开发实时评论系统所使用的技术。

    Laravel

    Laravel是一个开源的面向MVC的PHP框架。它用于构建简单到复杂的PHP web应用程序,以其优雅的语法而闻名。学习什么是拉拉维尔是必不可少的建设这个评论系统。

    Pusher

    Pusher使开发人员能够按比例创建实时功能。本文将结合Laravel Echo创建到Pusher服务器的实时广播事件,并使用Vue.js在前端显示内容。

    Vue.js

    Vue.js是我们选择的前端框架。Vue.js是一个渐进式JavaScript前端框架,以其易于学习和直接的前端开发方法而闻名。我们将使用Vue.js开发实时评论系统。

    开发评论系统实例

    如果我们上面概述的评论系统听起来像您想要的,那么让我们继续构建它。

    1. 安装和设置Laravel, Pusher和Echo

    Laravel、Echo和Pusher的安装和设置非常简单,因为Laravel通过设置和配置Laravel Echo以完美配合Pusher完成了所有后台任务。

    首先,我们将从安装和配置我们的后端PHP框架Laravel开始。如果您已全局安装了Laravel CLI,则可以使用此命令获取Laravel的新实例:

    laravel new commenter
    laravel new commenter
    laravel new commenter

    新的Laravel实例将安装在名为commenter的文件夹中。让我们在VSCode中打开文件夹,并在终端中导航到它:

    cd commenter
    code .
    cd commenter

    code .

    cd commenter
    
    code .

    在启动开发服务器之前,让我们安装并配置一些必要的包,这些包将用于项目。

    运行此命令以安装Pusher PHP SDK:

    composer require pusher/pusher-php-server
    composer require pusher/pusher-php-server
    composer require pusher/pusher-php-server
    

    运行此命令为Vue.js前端安装必要的NPM软件包:

    npm install –save laravel-echo pusher-js
    npm install –save laravel-echo pusher-js
    npm install --save laravel-echo pusher-js

    接下来,我们将配置Laravel Echo和Pusher。打开resources/js/bootstrap.js文件并粘贴到以下脚本中:

    window._ = require(“lodash”);
    window.axios = require(“axios”);
    window.moment = require(“moment”);
    window.axios.defaults.headers.common[“X-Requested-With”] = “XMLHttpRequest”;
    window.axios.defaults.headers.post[“Content-Type”] =
    “application/x-www-form-urlencoded”;
    window.axios.defaults.headers.common.crossDomain = true;
    window.axios.defaults.baseURL = “/api”;
    let token = document.head.querySelector(‘meta[name=”csrf-token”]’);
    if (token) {
    window.axios.defaults.headers.common[“X-CSRF-TOKEN”] = token.content;
    } else {
    console.error(“CSRF token not found”);
    }
    /**
    * Echo exposes an expressive API for subscribing to channels and listening
    * for events that Laravel broadcasts. Echo and event broadcasting
    * allows your team to build robust real-time web applications quickly.
    */
    import Echo from “laravel-echo”;
    window.Pusher = require(“pusher-js”);
    window.Echo = new Echo({
    broadcaster: “pusher”,
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    forceTLS: true
    });
    window._ = require(“lodash”);
    window.axios = require(“axios”);
    window.moment = require(“moment”);
    window.axios.defaults.headers.common[“X-Requested-With”] = “XMLHttpRequest”;
    window.axios.defaults.headers.post[“Content-Type”] =
    “application/x-www-form-urlencoded”;
    window.axios.defaults.headers.common.crossDomain = true;
    window.axios.defaults.baseURL = “/api”;
    let token = document.head.querySelector(‘meta[name=”csrf-token”]’);
    if (token) {
    window.axios.defaults.headers.common[“X-CSRF-TOKEN”] = token.content;
    } else {
    console.error(“CSRF token not found”);
    }

    /**
    * Echo exposes an expressive API for subscribing to channels and listening
    * for events that Laravel broadcasts. Echo and event broadcasting
    * allows your team to build robust real-time web applications quickly.
    */
    import Echo from “laravel-echo”;
    window.Pusher = require(“pusher-js”);
    window.Echo = new Echo({
    broadcaster: “pusher”,
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    forceTLS: true
    });

    window._ = require("lodash");
    window.axios = require("axios");
    window.moment = require("moment");
    window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
    window.axios.defaults.headers.post["Content-Type"] =
        "application/x-www-form-urlencoded";
    window.axios.defaults.headers.common.crossDomain = true;
    window.axios.defaults.baseURL = "/api";
    let token = document.head.querySelector('meta[name="csrf-token"]');
    if (token) {
        window.axios.defaults.headers.common["X-CSRF-TOKEN"] = token.content;
    } else {
        console.error("CSRF token not found");
    }
    
    
    /**
     * Echo exposes an expressive API for subscribing to channels and listening
     * for events that Laravel broadcasts. Echo and event broadcasting
     * allows your team to build robust real-time web applications quickly.
     */
    import Echo from "laravel-echo";
    window.Pusher = require("pusher-js");
    window.Echo = new Echo({
        broadcaster: "pusher",
        key: process.env.MIX_PUSHER_APP_KEY,
        cluster: process.env.MIX_PUSHER_APP_CLUSTER,
        forceTLS: true
    });

    您会从上面的脚本中注意到,我们只是使用默认配置配置Axios实例。接下来,我们将配置Laravel Echo以使用Pusher及其配置。

    2. 数据库设置和迁移

    接下来,我们将创建并设置数据库来存储评论以保持持久性。我们将使用 SQLite,但您可以使用您选择的任何数据库客户端。

    在数据库文件夹内创建一个数据库.sqlite文件,并更新您的.env文件如下:

    接下来,我们将创建并设置数据库,以存储持久性注释。我们将使用SQLite,不过您可以选择使用任何数据库客户机。

    在数据库文件夹中创建一个database.sqlite文件,并按如下方式更新.env文件:

    DB_CONNECTION=sqlite
    DB_DATABASE=/Users/all/paths/to/project/commenter_be/database/database.sqlite
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_USERNAME=root
    DB_PASSWORD=
    DB_CONNECTION=sqlite
    DB_DATABASE=/Users/all/paths/to/project/commenter_be/database/database.sqlite
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_USERNAME=root
    DB_PASSWORD=
    DB_CONNECTION=sqlite
    DB_DATABASE=/Users/all/paths/to/project/commenter_be/database/database.sqlite
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_USERNAME=root
    DB_PASSWORD=

    接下来,运行此命令创建注释迁移,并使用以下脚本进行更新:

    php artisan make:migration create_comments_table
    php artisan make:migration create_comments_table
    php artisan make:migration create_comments_table

    打开database/migrations/xxxx_create_comments_table_xxxx.php文件并粘贴以下代码:

    <?php
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    class CreateCommentsTable extends Migration
    {
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
    Schema::create(‘comments’, function (Blueprint $table) {
    $table->id();
    $table->string(‘content’);
    $table->string(‘author’);
    $table->timestamps();
    });
    }
    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
    Schema::dropIfExists(‘comments’);
    }
    }
    <?php
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    class CreateCommentsTable extends Migration
    {
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
    Schema::create(‘comments’, function (Blueprint $table) {
    $table->id();
    $table->string(‘content’);
    $table->string(‘author’);
    $table->timestamps();
    });
    }
    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
    Schema::dropIfExists(‘comments’);
    }
    }
    <?php
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    class CreateCommentsTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('comments', function (Blueprint $table) {
                $table->id();
                $table->string('content');
                $table->string('author');
                $table->timestamps();
            });
        }
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('comments');
        }
    }

    这将创建一个新的comments数据库表,并添加content和author列。

    最后,要创建迁移,请运行以下命令:

    php artisan migrate
    php artisan migrate
    php artisan migrate

    3. 创建模型

    在Laravel中,模型非常重要——它们是与数据库通信和处理数据管理的最可靠的方式。

    要在Laravel中创建模型,我们将运行以下命令:

    php artisan make:model Comment
    php artisan make:model Comment
    php artisan make:model Comment

    接下来,打开app/models/Comment.php文件并粘贴以下代码:

    <?php
    namespace AppModels;
    use IlluminateDatabaseEloquentFactoriesHasFactory;
    use IlluminateDatabaseEloquentModel;
  • 站长必备技能:浏览器缓存数据怎么清理?

    浏览器缓存怎么清理

    如果您偶然发现WordPress中的错误,您可能会被要求清除浏览器缓存以修复它。这通常是一项简单的任务,但由于该过程因平台而异,您的故障排除指南可能不会提供完成它所需的具体步骤。

    在这篇文章中,我们将解释您的浏览器缓存是什么以及您可能需要清除它的原因。然后,我们将提供在三种最流行的 Internet 浏览器中执行此过程的综合步骤:Google ChromeSafariMozilla Firefox

    浏览器缓存简介

    我们在过去的几篇文章中讨论了浏览器缓存的基础知识。该过程涉及浏览器存储网页副本,以便他们可以在后续访问时轻松更快地加载内容。

    我们通常谈论浏览器缓存,以使其能够加速您自己的网站。但是,其他站点也使用这种技术,因此您自己的浏览器也存储了各种网页的副本。

    您可以手动配置浏览器缓存,但对于WordPress用户来说,使用插件来实现它更为常见。无论如何,在几种情况下您需要清除缓存并重新加载网页的新副本。

    为什么需要清除浏览器缓存

    正如我们已经说过的,浏览器缓存对于加快页面加载时间很有用。这对您作为网站所有者以及想要快速访问 Internet 上的关键信息的用户都有帮助。

    但是,您还希望信息是最新的和准确的。如果您的浏览器加载的是页面的旧副本而不是最新版本,则您可能正在查看不再相关的内容。

    这通常不是问题,因为浏览器的构建是为了检测更改并在更新时重新加载之前存储的页面。但是,如果您的浏览器没有注意到您尝试访问的内容已被修改,就会出现问题。

    可能出现这种情况的一些具体情况包括:

    • 对WordPress网站上似乎没有更新的内容进行更改时。
    • 更新新代码未正确执行的插件或主题。
    • 安装了一个图像优化插件,但仍然看到前端加载了旧的、未压缩的文件。

    清除浏览器缓存还有助于解决一些常见错误,包括:

    简而言之,如果您在使用WordPress网站时遇到任何问题,在做其他任何事情之前尝试清除浏览器缓存永远不会有什么坏处。它不会导致任何进一步的问题,并且通常是您可以自行处理的非常快速的解决方案。

    如何清除不同浏览器的缓存

    每当您访问某个网站时,您的 Web 浏览器都会将来自该网站的某些信息保存在您计算机硬盘上的“浏览器缓存”中。大多数情况下,这是一件好事,因为它无需在浏览网页时一遍又一遍地下载相同的静态资源,从而有助于加快您的 Web 浏览体验。

    例如,网站的标志不太可能改变——因此将这个标志本地存储在浏览器缓存中而不是每次访问新页面时让浏览器下载标志是有意义的。但有时这种缓存实际上会导致您的浏览体验出现问题。那时您需要清除浏览器缓存。

    在本条目中,我们将首先向您简要介绍您可能需要清除浏览器缓存的时间。然后,我们将向您展示如何清除大多数主要浏览器的浏览器缓存。如果你想快速跳到“如何”,你可以点击下面的链接之一,否则,我们将从头开始。

    如何强制刷新单个页面

    在您直接清除整个浏览器缓存之前,您可以尝试一种称为“强制刷新”的技巧。通常,当您刷新页面时,您的浏览器仍会提供页面的缓存版本,而不是再次下载所有资产。但是您实际上可以通过使用一些简单的热键绕过缓存并强制完全刷新:

    • Windows和Linux浏览器:CTRL + F5
    • Apple Safari:SHIFT +Reload工具栏按钮
    • Mac版Chrome和Firefox:CMD + SHIFT + R

    同样,此方法仅绕过您所在特定页面的缓存。它使浏览器缓存的其余部分保持不变。因此,如果您只遇到一个页面的问题,则此选项非常有用。但是,如果您想完全重置您的体验(例如,跨整个站点),最好只清除整个浏览器缓存。

    如何清除Chrome浏览器缓存

    谷歌浏览器是迄今为止最受欢迎的网络浏览器。统计数据显示,它占全球互联网使用量的一半以上。幸运的是,它的设置非常易于导航,可以快速简单地清除缓存。

    Step 1:打开Chrome浏览器设置

    首先,单击浏览器窗口右上角的三点图标:

    Chrome设置

    然后,选择设置

    Chrome设置入口

    这将在新选项卡中打开您的浏览器设置。

    Step 2:进入隐私设置和安全性

    进入浏览器设置后,点击隐私设置和安全性,或向下滚动直到到达以下部分:

    Chrome隐私设置和安全性

    接下来,选择清除浏览数据

    清理Chrome缓存

    这将打开一个小的弹出窗口。

    Step 3:清除缓存的图片和文件

    清除浏览数据窗口中,您可以选择要从Chrome中删除的多种数据类型。您可以指定任意数量并一次性删除它们,但为了清除浏览器缓存,请确保选择缓存的图片和文件

    清除Chrome缓存文件

    最后,点击清除数据。

    如何清除Firefox浏览器缓存

    Firefox占浏览器市场份额不到 5%。但是,一些较旧的应用程序可能在这个更成熟的平台上运行得更好。它还为开发人员提供了一些方便的工具。这是清除其缓存的方法。

    Step 1:进入Firefox设置

    要在Firefox中打开浏览器设置,请单击右上角的汉堡图标,然后选择设置

    Firefox设置

     

    这将打开常规设置页面。

    Step 2:查看您的隐私和安全设置

    与Chrome一样,您需要从左侧菜单导航到浏览器设置的隐私与安全部分,以访问缓存选项:

    Firefox隐私与安全设置

    请注意,您无法像在Chrome中那样通过滚动来访问这些选项。

    Step 3:清除您的数据

    接下来,向下滚动,直到找到Cookie和站点数据部分:

    清除Firefox缓存数据

    单击 清除数据…按钮:

    清除Firefox数据

    Firefox仅提供两种类型的站点数据,您可以在此处删除。确保选中已缓存网络数据,然后单击清除按钮:

    清除Firefox缓存数据

    然后Firefox会要求您再确认您的选择,此时您需要点击立即清除

    如何清除Safari浏览器缓存

    Safari排在Chrome之后,成为下一个最受欢迎的浏览器,部分原因可能是它是Apple产品的默认平台。由于它在智能手机上如此受欢迎,我们也包含了在Safari移动版中清除浏览器缓存的相应步骤。

    Step 1:访问Safari设置

    首先,您需要访问您的设置。在台式机或笔记本电脑上,只需打开浏览器并在计算机工具栏中选择Safari 

    访问Safari设置

    在您的移动设备上,打开“设置”应用:

    iOS设置

    接下来,向下滚动直到看到Safari

    Safari手机端设置

    点击它以打开其设置。

    Step 2:清除所有历史记录和网站数据

    与Chrome不同的是,Safari不提供选择和选择要删除的浏览器数据的选项。因此,每当您清除浏览器缓存时,您也将删除您的历史记录、cookie和其他数据。

    对于您的桌面浏览器,选择清除历史记录…

    清除Safari历史

    从结果下拉列表中选择所有历史记录,然后单击清除历史记录按钮:

    清除Safari所有历史

    在您的移动设备上,向下滚动到清除历史记录和网站数据选项并点击它:

    清除Safari手机端应用历史

    弹出窗口将要求您确认是否要继续:

    Safari应用历史清除确认

    点击清除历史记录和数据以完成清除缓存。

    如何清除Internet Explorer浏览器缓存

    要清除Internet Explorer的浏览器缓存,请单击右上角的齿轮图标以访问“工具”菜单。然后,找到安全并从子菜单中选择删除浏览器历史

    Internet Explorer删除浏览历史记录

    Internet Explorer删除浏览历史记录

    您还可以使用快捷方式访问菜单:CTRL + SHIFT + DEL。 Internet Explorer将打开一个弹出窗口。确保只选中Internet临时文件和网站文件框以避免清除重要信息。然后,单击底部的删除按钮:

    清除Internet Explorer浏览器缓存

    清除Internet Explorer浏览器缓存

    如何清除Microsoft Edge浏览器缓存

    若要清除Microsoft Edge的浏览器缓存,请单击 浏览器窗口右上角的更多图标(三个小点)。

    Microsoft Edge设置

    Microsoft Edge设置

    向下滚动并单击选择要清除的内容

    选择要在Microsoft Edge中清除的内容

    选择要在Microsoft Edge中清除的内容

    确保选择缓存数据和文件框以避免清除重要信息。您还可以使用快捷方式访问菜单:  CTRL + SHIFT + DEL。 然后,单击底部的清除按钮。

    清除Microsoft Edge浏览器缓存

    清除Microsoft Edge浏览器缓存

    如何清除Opera浏览器缓存

    要清除Opera的浏览器缓存,请单击左上角的Opera图标,找到更多工具选项,然后从子菜单中选择清除浏览数据

    Opera清除浏览数据

    Opera清除浏览数据

    在大多数情况下,您应该将时间周期设置为:过去4周。然后,确保只选中缓存的图像和文件框,然后单击清除浏览数据按钮:

    清除Opera中的浏览器缓存

    清除Opera中的浏览器缓存

    小结

    知道如何清除浏览器缓存意味着您可以快速修复在使用 WordPress 或只是浏览网页时可能遇到的许多错误。幸运的是,无论您喜欢哪种浏览器,这个过程都非常简单。

    在这篇博文中,我们提供了在Google ChromeSafariMozilla Firefox等浏览器清除缓存的完整演练。对于每个浏览器,您都需要访问您的设置,找到清除浏览数据的选项,并确保包含您的缓存。

  • 如何检查和升级您的服务器MySQL版本

    如何检查和升级您的服务器MySQL版本

    您的数据库很可能运行在MySQL或其完全开源的分支MariaDB上。这些流行的数据库管理软件支持90%的网站,因此您的服务器主机可能已经为您安装了其中任何一个。

    但并非所有主机都会继续保持最新状态,因此您通常需要检查 MySQL 版本并保持升级。服务器上过时的软件永远不会好,也可能是有害的。

    让我们学习如何检查您的MySQL版本是否是最新的,如果不是,则升级它。

    1. 为什么要让MySQL保持最新?
    2. 如何检查MySQL版本
    3. 如何升级MySQL版本

    为什么要让MySQL保持最新?

    手动服务器维护不是一项有趣的任务,尤其是当您不太熟悉网络服务器的内部工作原理时。只要您的服务器和数据库运行良好,您可能很容易忽略过时的软件。但是,这是一个坏主意的原因有很多。

    在您的服务器上安装过时的软件从来都不是一件好事。即使您的安全中最微小的漏洞也可能成为攻击者潜入并接管的载体。

    他们甚至可能会弄乱您的数据库。各种重要信息都存储在那里,例如您的WordPress文章和所有其他类型的敏感信息。您不希望任何不需要的人能够修改它。

    除此之外,新版本意味着对现有内容的新功能和一般改进。即使这些额外的特性不会影响你,更新的MySQL版本也更安全、优化得更好、速度更快。

    MySQL 8.0中的新功能。

    MySQL 8.0中的新功能。

    并且随着MySQL的每次更新,都会带来一系列错误修复,修补错误,这些错误充其量只是一种烦恼,或者最坏的情况下会给您带来严重的麻烦。

    当涉及到您网站上的任何软件时,最好将其保持在最新版本。

    哪个版本的MySQL最好?

    如今,许多服务器仍在运行MySQL 5.7(跳转到8.0之前的最新版本),即使存在更新更好的版本。为什么是这样? MySQL 5.7还是8.0哪个最好?

    大多数人不升级是因为他们不知道最新的MySQL版本,或者他们不想花时间更新它。此外,5.7还没有被弃用,直到2023年才会被弃用。

    macOS v10.14停止更新支持macOS v10.14停止更新支持

    但是,虽然MySQL 5.7仍受支持,但切换到最新版本绝对值得您花时间。它更快、更安全 – 激活后可以立即观察到变化。而对于能够使用新功能的开发者来说,好处多得无法一一列举。

    您需要了解一些升级注意事项和向后不兼容性,但对于大多数站点,它们不会引起问题。

    跟上MySQL的最新稳定版本几乎总是最好的。尽管新的内置自动更新程序可能会为您处理这些问题,但即使是次要更新也值得一试。至于重大更新,除非您的服务器的关键部分不兼容,否则这是值得的。

    虽然WordPress支持MySQL版本一直回到5.6,但8.0与它完美配合。由于5.6不再受支持并且容易受到错误和安全风险的影响,您至少应该更新到5.7。

    如何检查MySQL版本

    使MySQL保持最新状态至关重要,但您需要在升级前了解其版本。很有可能,您已经在使用最新版本并且根本不需要做任何事情。有几种检查方法;这些只是少数最简单的。

    使用命令行

    获取MySQL版本的最简单方法是使用通过命令行提交的简单代码。只需几秒钟,即可立即回答您的问题。除非您使用最少的主机,否则访问服务器的命令行应该不会太困难。

    有多种方法可以访问服务器的命令行。例如,您的Web主机可能会提供一种通过其后端提交命令的方法,例如使用cPanel 。或者您可以使用内置终端或命令提示符连接到您的服务器。 PuTTY之类的工具也可以帮助您登录,并且通常需要Windows用户使用SSH进行连接。

    无论哪种方式,您都需要一些SSH登录凭据。您通常可以在您的网络托管仪表板中找到它们,或者您可以通过电子邮件发送它们并寻求帮助。

    一旦您知道将如何连接到服务器的命令行,请按照以下步骤操作。

    步骤 1:在您的计算机上启动终端(Linux、macOS)或命令提示符/PuTTY (Windows)。在cPanel中,您可以在Advanced > Terminal下找到它。

    cPanel终端窗口

    cPanel终端窗口

    步骤 2:提供您的SSH凭据以连接并登录到服务器。

    步骤 3:输入以下命令:

    mysql -V
    mysql -V
    mysql -V

    如果您安装了MySQL Shell ,您还可以使用简单的命令“mysql”来显示您的版本信息。无论哪种方式,版本号都应该在屏幕上输出。

    使用phpMyAdmin检查MySQL版本

    还有另一种直接的方法来检查您的MySQL版本,那就是phpMyAdmin 。该软件也无处不在,并且存在于大多数服务器上,因此您可以很好地找到您的MySQL版本。

    通过检查您的网络托管仪表板来查找您的phpMyAdmin凭据。甚至可能有一个直接登录的链接。如果找不到,请给您的房东发电子邮件。

    找到您的凭据后,登录到phpMyAdmin。一进入,您就会在屏幕右侧看到一个数据库服务器框。软件版本部分下,是您的MySQL版本。就这么简单!

    在phpMyAdmin中查看MySQL版本

    在phpMyAdmin中查看MySQL版本

    通过WordPress仪表盘

    查找MySQL版本的最后一种简单方法是通过您站点的WordPress管理仪表盘。

    为此,请访问您的WordPress仪表盘,然后转到“工具”>“站点健康” 。在此处,首先转到“信息”选项卡,然后转到下面的“数据库”部分。

    您可以在此处列出的服务器的当前MySQL版本旁边找到服务器版本标签。

    在WordPress仪表盘中查找MySQL版本

    在WordPress仪表盘中查找MySQL版本。

    如何升级MySQL版本

    如果您确定您的MySQL已过时,您应该尽快纠正它。有多种方法可以将MySQL更新到最新版本;这完全取决于您使用的工具和操作系统。

    值得注意的是,如果脚本注意到您的安装已过期,更高版本的MySQL将尝试自动更新。您可能根本不需要做任何事情。如果您确定MySQL已过时并且需要手动更新,请按照以下步骤操作。

    就像使用命令行检查MySQL版本一样,您需要从Web主机获取SSH登录凭据才能访问服务器上的终端。当然,您还需要服务器的 IP 地址。

    注:在更新MySQL之前,请确保备份您的数据库

    此备份包含您的数据库(一个SQL文件)和您的整个站点,因此如果出现问题,您将更加安全。

    使用cPanel升级MySQL

    如果您的主机提供cPanel,这可能是最简单的升级方式,因为您可以使用提供的界面。但由于cPanel默认为MySQL 5.7,您可能需要升级。

    由于cPanel不允许您降级,您应该在继续之前备份您的数据库。

    大多数cPanel安装都带有Web主机管理器WHM,它为您提供更深入的根访问权限。

    第 1 步:通过访问“example-site.com:2087”或“example-site.com/whm”登录WHM。您还可以询问您的网络主机如何访问WHM。

    第 2 步:导航至Software > MySQL Upgrade或在搜索栏中键入“MySQL”。您也可以在SQL Services > MySQL/MariaDB Upgrade下找到它。

    第 3 步:选择您要升级到的MySQL版本,然后单击Next。现在按照升级步骤操作,它会为您处理一切。

    Web服务管理面板cPanel-MySQL数据库更新

    Web服务管理面板cPanel-MySQL数据库更新

    此方法是迄今为止进行MySQL升级的最简单方法,但如果您的主机不提供cPanel或WHM,您可能需要手动进行。

    在Linux/Ubuntu中升级MySQL

    有多种Linux发行版,但Ubuntu是迄今为止最常见的。这些说明适用于任何使用apt/apt-get功能安装软件的操作系统。

    MySQL APT存储库

    MySQL APT存储库

    Linux可以轻松进行SSH连接,无需任何额外的软件要求。因此,您可以直接进入您的服务器。

    第 1 步:启动终端。获取您的SSH凭据并使用SSH命令登录。

    第 2 步:您应该安装MySQL apt存储库,因为 MySQL 已经在您的服务器上。使用以下命令更新您的软件包列表:

    sudo apt-get update
    sudo apt-get update
    sudo apt-get update

    第 3 步:现在升级MySQL。

    sudo apt-get upgrade mysql-server
    sudo apt-get upgrade mysql-server
    sudo apt-get upgrade mysql-server

    如果上述方法不起作用,您也可以尝试此命令:

    sudo apt-get install mysql-server
    sudo apt-get install mysql-server
    sudo apt-get install mysql-server

    它会提示你选择一个版本;选择5.7或8.0。如果您是从5.6升级,您应该先升级到5.7,而不是直接升级到8.0。

    在macOS上升级MySQL

    虽然macOS带有自己的MySQL版本,但您无法通过通常的方法对其进行升级。最有可能的是,您的服务器正在使用单独的实例。

    其中许多步骤与在Linux上更新MySQL非常相似。 macOS同样在操作系统中内置了SSH,因此您需要做的就是运行命令。

    我们假设您使用Homebrew作为包管理器,因为它是在Mac上安装和更新MySQL的最简单方法。如果您最初没有使用Homebrew安装MySQL,则不应尝试使用它来升级MySQL。

    在Mac上使用Homebrew安装MySQL

    在Mac上使用Homebrew安装MySQL

    第 1 步:启动终端程序并使用SSH命令登录。

    第 2 步:使用Homebrew运行这些命令。

    brew update
    brew install mysql
    brew update
    brew install mysql
    brew update
    brew install mysql

    此命令应自动安装8.0并升级任何现有版本。

    你遇到麻烦了吗?首先尝试卸载当前版本的MySQL。使用这些命令:

    brew remove mysql
    brew cleanup
    brew remove mysql
    brew cleanup
    brew remove mysql
    brew cleanup

    然后您可以再次尝试运行更新和安装命令。

    第 3 步:确保您再次手动启动MySQL服务器:

    mysql.server start
    mysql.server start
    mysql.server start
    

    在Windows中升级MySQL

    与Mac和Linux不同,Windows默认不能使用SSH。相反,您需要安装一个单独的客户端,然后才能连接到您的服务器。

    第 1 步:下载PuTTY并将其安装到您的系统上。启动它并输入您的SSH凭据以连接到服务器。 3306是默认端口号。忽略任何安全警报;这些都是正常的。

    第 2 步:假设您连接到Linux终端,您可以使用上面Linux/Ubuntu部分中的命令来执行升级。

    您还可以使用MySQL安装程序直接将MySQL下载到系统上。此过程完全跳过SSH连接。

    小结

    对于任何软件,保持最新状态至关重要。由于MySQL是您网站及其数据库不可或缺的一部分,因此它变得更加必要。不幸的是,太多的网络管理员选择让他们的MySQL版本落后,从而损害他们网站的速度和安全性。

    幸运的是,检查您的MySQL版本并升级它几乎总是一个顺利的过程。虽然您绝对应该备份您的网站和数据库以备不时之需,但您不太可能遇到任何问题。

    只需在您的Web服务器终端中执行一个小命令,您的数据库就会得到很好的优化并且比以往任何时候都更快。

  • 如何在Windows、macOS和Linux上安装Node.js和npm

    如何在Windows、macOS和Linux上安装Node.js和npm

    Node.js为全世界的JavaScript开发人员带来了福音,他们努力在多种语言和框架之间进行交换,以将他们的代码放大到可持续的开发环境中。

    使用Node.js,您最终可以构建具有双向连接的Web应用程序,其中服务器端和客户端可以彻底实时通信和交换数据。事实上,Node.js对于想要通过WebSocket推送实时Web应用程序的开发人员来说是革命性的。

    如果您的目标是将您的Web开发技能提高到一个新的水平,并成为一名全栈JavaScript开发人员,那么Node.js确实为这个热情的流行语做好了准备!

    在本文中,我们将演示如何在Windows、Mac和Linux计算机上安装Node.js并开始您的Web开发之旅的分步指南。

    1. 什么是Node.js?
    2. 谁在使用Node.js?
    3. 使用Node.js的优势
    4. Node.js先决条件
    5. 如何安装Node.js和npm
    6. 如何在Windows上安装Node.js
    7. 如何在macOS上安装Node.js
    8. 如何在Linux上安装Node.js
    9. 检查并更新npm版本

    什么是Node.js?

    Node.js Logo

    Node.js Logo (图片来源: Node.js

    你应该知道的第一件事是 Node.js不是一种编程语言!

    您可能已经意识到这一事实,但对于该领域的新开发人员来说,可能会将 Node.js 误认为是一种独特的编程语言。它不是!

    Node.js是JavaScript语言的开源运行时环境,它重塑了JavaScript的特性并升级了其功能。因此,您可以使用JavaScript进行前端和后端开发,从而实现仅使用JavaScript的全栈开发。

    最初,Node.js旨在提供实时性能、后推架构。但从那时起,Node.js已成长为事件驱动、非阻塞服务器的服务器端编程的重要元素。今天大多数传统网站和API服务都依赖于Node.js。

    在Node.js之前,如果你想在数据库上存储任何数据或将你的程序连接到数据库,你需要来自服务器端语言的支持。那是因为JavaScript无法规范后端进程。因此,您必须学习诸如PHP、Python、Ruby或C#之类的服务器端语言,或者寻求后端开发人员的帮助。

    Node.js环境使JavaScript能够直接使用数据库并作为后端语言正常运行。因此,您最终可以仅使用JavaScript和Node.js来构建和运行程序。

    Node.js使用V8 JavaScript运行时引擎作为其根源,并采用事件驱动的非阻塞I/O架构。所有这些共同构建了Node.js并帮助推动产品实现强大的性能。

    谁在使用Node.js?

    W3Techs称,迄今为止,所有网站中有1.4%使用Node.js——即超过2200万个网站。这些数字让您大致了解Node.js用户的数量。最重要的是,Node.js已被下载超过13亿次!如您所见,这些统计数据有力地说明了Node.js的市场规模。

    从您的IT朋友到行业大亨,所有人都在享受使用Node.js。那是因为Node.js放大了开发人员的性能并提高了开发过程的速度。当今最聪明的趋势之一是到处使用JavaScript,这将Node.js带入了舞台。

    使用Node.js的顶级公司包括:

    1. 美国宇航局
    2. 推特
    3. 网飞
    4. 领英
    5. 贝宝
    6. Trello
    7. 易趣
    8. 沃尔玛
    9. Mozilla
    10. Medium

    如果您研究这些公司,您可能会注意到他们在不同的服务或产品上开展业务。但它们都有一个共同的关键因素:它们都依赖于Node.js。确实,使用Node.js可以解决您的大部分开发问题,无论您在哪个行业。

    使用Node.js的优势

    为您的技术堆栈选择合适的编程平台与您想要投资的劳动力一样重要。当您寻找使用特定平台的优势时,应考虑多种因素。学习曲线、开发速度、社区和规模等因素可以改变整体利益平衡。

    以下是使用Node.js的主要优势:

    • 简单的语法
    • 简单的学习曲线
    • 快速扩展的能力
    • 开源且灵活
    • 跨平台开发
    • 单语言全栈开发
    • 实时通讯
    • 庞大而活跃的社区

    Node.js先决条件

    在安装Node.js之前,您需要确保已经收集了所有必要的知识并下载了所有必需的安装文件和元素。

    首先,如果您对JavaScript及其语法有基本的了解会有所帮助——这将使您更容易上手Node.js。

    其次,对面向对象编程 (OOP) 语言的基本了解将有助于您进行服务器端编码。

    最后,与其急于进入深度学习,不如一步一步来。永远记住,只要你在进步,你就不会迟到一天或一美元。

    系统要求

    Node.js不需要花哨的硬件设置来运行;这个时代的大多数计算机都应该有效地处理Node.js。即使是像BeagleBone或Arduino YÚN这样最微型的计算机也可以运行Node.js。

    尽管如此,很大程度上仍然取决于您在同一系统上运行的其他内存占用软件。但在大多数情况下,除非您的计算机来自中生代,否则您不必担心!

    LTS版本与当前版本

    Node.js提供了两个不同的版本供您下载:LTS版本和当前版本。

    第一个是长期支持 (LTS),它表示已经上市一段时间并带有所有强制支持的版本。因此,您可以访问大量信息和社区以获得有关此版本的其他帮助。

    由于其可持续性和长达18个月的支持周期,因此向大多数用户推荐此LTS版本。由于它是一个稳定版本,因此使用它来生成后端可以帮助您获得稳健的结果。

    当前版本表示具有最近添加和更新功能的最新发布的Node版本。但是这个版本背后的支持较少(大约八个月)和可能的错误暴露。因此,专家建议仅将此版本用于前端开发。

    考虑到所有这些因素,如果您是喜欢无忧无虑的普通用户,请选择LTS版本。另一方面,如果您是喜欢体验新技术冒险的高级用户,则可以选择安装当前版本。

    如何安装Node.js和npm

    每个操作系统都有不同的安装Node.js的方法。每个操作系统的核心设置文件都不同。但是,Node.js创建者已经小心地为您提供了每个系统所需的文件。

    在文章的下一部分中,我们将讨论在Windows、macOS和Linux操作系统上安装Node.js。

    如何在Windows上安装Node.js

    按照此分步指南在Windows上安装Node.js。

    1. 下载Windows安装程序

    首先,您需要从Node.js官方网站下载Windows Installer (.msi)文件。此MSI安装程序数据库包含安装、更新或修改现有Node.js版本必不可少的安装程序文件集合。

    值得注意的是,安装程序中还包含Node.js包管理器 (npm)。这意味着您不需要单独安装npm。

    下载时,请根据您的操作系统选择正确的版本。例如,如果您使用的是64位操作系统,请下载64位版本,如果您使用的是32位版本,请下载32位版本:

    下载Node.js安装程序

    下载Node.js安装程序

    2. 开始安装过程

    打开并运行.msi文件后,安装过程就开始了。但是您必须在运行安装过程之前设置一些参数。

    双击安装程序文件并运行它。安装程序会要求您接受Node.js许可协议。要继续,请选中“我接受”框并单击“Next”

    接受Node.js许可协议

    接受Node.js许可协议

    然后,选择要安装Node.js的目的地。如果您不想更改目录,请使用Windows默认位置并再次单击“Next”按钮。

    选择Node.js安装文件夹

    选择Node.js安装文件夹

    下一个屏幕将显示自定义设置选项。如果您想要使用Node.js默认功能的标准安装,请单击Next按钮。否则,您可以在单击Next之前从树中的图标中选择您的特定元素:

    Node.js安装程序中的“自定义设置”选项

    Node.js安装程序中的“自定义设置”选项

    Node.js为您提供了为原生模块安装工具的选项。如果您对这些感兴趣,请单击复选框以标记您的首选项,或单击下一步继续使用默认值:

    Node.js安装程序中用于本机模块的工具

    Node.js安装程序中用于本机模块的工具

    3. 在Windows上运行Node.js安装

    最后——这是最简单的部分——点击Install按钮开始安装过程:

    开始安装Node.js

    开始安装Node.js

    系统将在几秒钟或几分钟内完成安装并显示成功消息。单击Finish按钮关闭Node.js安装程序。

    在Windows上完成Node.js安装

    在Windows上完成Node.js安装

    4. 验证Node.js安装

    这样安装过程就完成了。现在,您必须检查Node.js是否已成功安装。要验证安装并确认是否安装了正确的版本,请打开PC的命令提示符并输入以下命令:

    Node –version
    Node –version
    Node --version

    要检查npm版本,请运行以下命令:

    npm –version
    npm –version
    npm --version

    验证Windows上的Node.js安装

    验证Windows上的Node.js安装

    如果正确安装了Node.js版本和npm,您将在CMD提示中看到版本名称。

    如何在macOS上安装 Node.js

    按照这些分步指南在macOS上安装Node.js。

    1. 下载macOS安装程序

    在macOS上安装Node.js的过程与Windows几乎相同。您所要做的就是下载Mac的安装文件。然后,一旦您启动它,安装程序就会引导您完成其余的工作。

    首先,从Node.js网站下载macOS安装程序 (.pkg)文件。只有64位版本,因此您不必担心要下载哪个版本。

    下载Node.js的macOS安装程序

    下载Node.js的macOS安装程序

    2. 开始在macOS上安装Node.js

    检查您的下载文件夹中的安装程序文件,然后单击它以开始安装过程。

    Node.js安装程序携带Node.js核心文件,因此,安装过程从安装程序文件安装Node.js和npm。因此,您无需单独安装npm。

    然后,单击Continue以继续安装。

    Node.js的macOS安装属性

    Node.js的macOS安装属性

    您必须同意使用条款才能安装Node.js。如果您想浏览许可协议,请在单击“Agree”按钮以继续之前通读它。

    Node.js的macOS安装许可协议

    Node.js的macOS安装许可协议

    在此屏幕上,您需要选择安装位置。通常,操作系统会确定默认安装位置。如果您有其他要求,可以更改位置。否则,保留默认位置。

    3. 在macOS上运行Node.js安装

    到目前为止,您已经设置了在macOS上完全安装Node.js所需的所有首选项。现在单击“Install”按钮以完成操作。

    在macOS上选择Node.js安装位置

    在macOS上选择Node.js安装位置

    安装过程成功后,系统将向您显示确认消息。由于npm集成在Node.js安装程序中,因此通知也应指明npm安装的证明。最后,单击Close按钮关闭对话框。

    关闭Node.js安装程序

    关闭Node.js安装程序

    4. 在macOS上验证Node.js安装

    您现在已经在macOS上成功安装了Node.js。但是,您应该检查以确认安装过程是否成功以及Node.js和npm版本是否在您的macOS上正常运行。

    要检查Node.js版本,您需要打开macOS终端,单击Command + Space键,或从搜索栏中搜索终端。

    打开macOS终端

    打开macOS终端

    要检查Node.js版本,请键入:

    Node –version
    Node –version
    Node --version

    要检查npm版本,请运行以下命令:

    npm –version
    npm –version
    npm --version

    在macOS上验证Node.js安装

    在macOS上验证Node.js安装

    如果Node.js和npm版本可见,则它们都已正确安装并且运行良好。如果没有,您可能需要重新检查以找到错误或再次尝试安装过程。

    如何在Linux上安装Node.js

    Linux操作系统的工作方式与其他传统操作系统略有不同。那是因为Linux是开源的,为您提供更多的自由、自定义和高级功能。

    如果您对命令很随意,那么您应该对Linux感到很舒服。在这里,我们将讨论在Linux操作系统上安装Node.js的最简单方法。

    1. 为您的Linux发行版选择Node.js版本

    由于其提供的多样性,Linux操作系统有数百种不同的发行版。用户喜欢使用不同的发行版来定制和利用不同版本的特定功能。

    首先,从Node.js的Binary Distributions页面找到您的特定发行版的安装说明。在本指南中,我们将使用Ubuntu进行说明。

    Node.js Ubuntu安装说明

    Node.js Ubuntu安装说明

    2.安装Curl命令行工具

    在开始安装Node.js之前,请确保您的系统上安装了curl命令行实用程序。如果没有,请将此命令粘贴到您的终端上以安装curl:

    sudo apt install curl
    sudo apt install curl
    sudo apt install curl

    它可能会要求您输入系统密码以验证安装权限。输入密码后,系统应开始curl安装。

    在Ubuntu上安装“curl”

    在Ubuntu上安装“curl”

    3. 开始Node.js安装

    您需要将Node.js安装命令复制并粘贴到您的终端中(在我们的例子中,我们可以从Ubuntu分发页面获取它),以便系统可以开始安装Node.js。

    注:每个Node.js版本都有不同的安装命令。安装与您的Linux设置相匹配的Node.js版本。

    例如,在这里,我们将安装Node.js v14.x。这些是Ubuntu的安装命令:

    curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash –
    curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash –
    curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
    sudo apt-get install -y nodejs
    sudo apt-get install -y nodejs
    sudo apt-get install -y nodejs

    当你已经在你的终端上安装的curl命令行,你需要复制并粘贴您的第一个命令(curl命令)终端并运行它。

    在Ubuntu上开始安装Node.js