当前位置: 首页 > news >正文

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

Composer 是一个流行的 PHP 依赖管理工具,主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包,并根据项目要求安装适当的版本。

在本教程中,您将在 Ubuntu 18.04 系统上安装并开始使用 Composer。

先决条件

要完成本教程,您需要:

  • 一个按照 Ubuntu 18.04 初始服务器设置指南设置的 Ubuntu 18.04 服务器,包括一个 sudo 非 root 用户和一个防火墙。

步骤 1 — 安装依赖项

在下载和安装 Composer 之前,您需要确保服务器已安装所有依赖项。

首先,通过运行以下命令更新软件包管理器缓存:

sudo apt update

现在,让我们安装依赖项。我们需要使用 curl 下载 Composer,使用 php-cli 安装和运行它。php-mbstring 包是必需的,以提供我们将使用的库的函数。git 用于下载项目依赖项,unzip 用于解压缩压缩包。您可以使用以下命令安装所有内容:

sudo apt install curl php-cli php-mbstring php-curl git unzip

安装完先决条件后,我们可以安装 Composer 本身。

步骤 2 — 下载并安装 Composer

Composer 提供了一个用 PHP 编写的安装程序。我们将下载它,验证它是否损坏,然后使用它来安装 Composer。

确保您位于主目录中,然后使用 curl 检索安装程序:

cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php

接下来,验证安装程序是否与 Composer Public Keys / Signatures 页面上找到的最新安装程序的 SHA-384 哈希匹配。从该页面复制哈希并将其存储为 shell 变量:

HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

确保您用最新的哈希替换高亮值。

现在执行以下 PHP 脚本以验证安装脚本是否安全运行:

php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

您将看到以下输出。


Installer verified

如果您看到 Installer corrupt,那么您需要重新下载安装脚本,并再次检查您是否使用了正确的哈希。然后再次运行命令验证安装程序。一旦您有了经过验证的安装程序,就可以继续。

要全局安装 composer,请使用以下命令,它将下载并安装 Composer 作为名为 composer 的系统命令,放在 /usr/local/bin 下:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

您将看到以下输出:


All settings correct for using Composer
Downloading...Composer (version 2.1.9) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

要测试您的安装,请运行:

composer

您将看到以下输出,显示 Composer 的版本和参数。

______/ ____/___  ____ ___  ____  ____  ________  _____/ /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_//_/
Composer version 2.1.9 2021-10-05 09:47:38Usage:command [options] [arguments]Options:-h, --help                     Display this help message-q, --quiet                    Do not output any message-V, --version                  Display this application version--ansi                     Force ANSI output--no-ansi                  Disable ANSI output-n, --no-interaction           Do not ask any interactive question--profile                  Display timing and memory usage information--no-plugins               Whether to disable plugins.-d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.--no-cache                 Prevent use of the cache-v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

这验证了 Composer 在您的系统上成功安装,并且可以在系统范围内使用。

现在让我们看看如何使用 Composer 来管理依赖项。

步骤 3 —— 在 PHP 项目中使用 Composer

PHP 项目通常依赖于外部库,管理这些依赖及其版本可能会很棘手。Composer 通过跟踪您的依赖关系并使其他人能够轻松安装它们来解决这个问题。

为了在项目中使用 Composer,您需要一个 composer.json 文件。composer.json 文件告诉 Composer 它需要为您的项目下载哪些依赖项,以及允许安装每个软件包的哪些版本。这对于保持项目一致性并避免安装可能导致向后兼容性问题的不稳定版本非常重要。

您不需要手动创建此文件 —— 这样做很容易遇到语法错误。当您使用 require 命令向项目添加依赖项时,Composer 会自动生成 composer.json 文件。您可以以相同的方式添加其他依赖项,而无需手动编辑此文件。

使用 Composer 在项目中安装包作为依赖项的过程包括以下步骤:

  • 确定应用程序需要哪种类型的库。
  • 在 Packagist.org 上研究合适的开源库,这是 Composer 的官方包存储库。
  • 选择您想要依赖的软件包。
  • 运行 composer require 将依赖项包含在 composer.json 文件中并安装该软件包。

让我们通过一个演示应用程序来尝试一下。

该应用程序的目标是将给定的句子转换为 URL 友好的字符串 —— 一个 slug。这通常用于将页面标题转换为 URL 路径(例如本教程的 URL 最后一部分)。

让我们从为我们的项目创建一个目录开始。我们将其命名为 slugify

cd ~
mkdir slugify
cd slugify

现在是时候在 Packagist.org 上搜索一个可以帮助我们生成 slugs 的软件包了。如果您在 Packagist 上搜索术语 “slug”,您将会得到类似于以下结果:

!Packagist Search: easy-slug/easy-slug, muffin/slug, ddd/slug, zelenin/slug, webcastle/slug, anomaly/slug-field_type

您将在列表中的每个软件包右侧看到两个数字。顶部的数字表示软件包被安装的次数,底部的数字显示软件包在 GitHub 上被标记为喜欢的次数。您可以根据这些数字重新排列搜索结果(查找搜索栏右侧的两个图标)。一般来说,安装次数和星星数更多的软件包往往更稳定,因为有很多人在使用它们。还要检查软件包描述的相关性,以确保它是您需要的。

我们需要一个简单的字符串转换为 slug 的转换器。从搜索结果中,软件包 cocur/slugify 似乎是一个很好的选择,安装次数和星星数都还可以接受。 (软件包在截图显示的页面下方一点点。)

Packagist 上的软件包有一个 vendor 名称和一个 package 名称。每个软件包都有一个唯一的标识符(命名空间),格式与 GitHub 用于其存储库的格式相同,即 vendor/package。我们要安装的库使用的命名空间是 cocur/slugif。您需要这个命名空间才能在项目中要求该软件包。

现在您知道要安装的确切软件包是哪个了,运行 composer require 将其包含为依赖项,并为项目生成 composer.json 文件:

composer require cocur/slugify

当 Composer 下载依赖项时,您将看到以下输出:


Using version ^4.0 for cocur/slugify
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals- Locking cocur/slugify (v4.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals- Downloading cocur/slugify (v4.0.0)- Installing cocur/slugify (v4.0.0): Extracting archive
Generating autoload files

从输出中可以看出,Composer 自动决定了要使用的软件包的版本。如果现在检查您的项目目录,它将包含两个新文件:composer.jsoncomposer.lock,以及一个 vendor 目录:

ls -l

total 12
-rw-rw-r-- 1 sammy sammy   59 Oct 26 19:04 composer.json
-rw-rw-r-- 1 sammy sammy 3411 Oct 26 19:04 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Oct 26 19:04 vendor

composer.lock 文件用于存储有关安装了哪些软件包的版本信息,并确保如果其他人克隆您的项目并安装其依赖项时使用相同的版本。vendor 目录是项目依赖项的所在地。vendor 文件夹不需要提交到版本控制 —— 您只需要包含 composer.jsoncomposer.lock 文件。

让我们快速看一下版本约束。如果检查您的 composer.json 文件的内容,您将看到类似于以下内容:

cat composer.json

{"require": {"cocur/slugify": "^4.0"}
}

您可能会注意到 composer.json 中版本号前面的特殊字符 ^。Composer 支持几种不同的约束和格式来定义所需的软件包版本,以提供灵活性同时保持项目的稳定性。由自动生成的 composer.json 文件使用的插入符(^)运算符是最大互操作性的推荐运算符,遵循语义化版本。在这种情况下,它将 4.0 定义为最低兼容版本,并允许更新到 5.0 以下的任何未来版本。

一般来说,您不需要在 composer.json 文件中修改版本约束。但是,某些情况可能需要您手动编辑约束 —— 例如,当您需要升级所需库的一个主要新版本时,或者您想要使用的库不遵循语义化版本时。

以下是一些示例,以便更好地理解 Composer 版本约束的工作原理:

约束含义允许的示例版本
^1.0>= 1.0 < 2.01.0, 1.2.3, 1.9.9
^1.1.0>= 1.1.0 < 2.01.1.0, 1.5.6, 1.9.9
~1.0>= 1.0 < 2.0.01.0, 1.4.1, 1.9.9
~1.0.0>= 1.0.0 < 1.11.0.0, 1.0.4, 1.0.9
1.2.11.2.11.2.1
1.*>= 1.0 < 2.01.0.0, 1.4.5, 1.9.9
1.2.*>= 1.2 < 1.31.2.0, 1.2.3, 1.2.9

有关 Composer 版本约束的更深入视图,请参阅官方文档。

接下来,让我们看一下如何使用 Composer 自动加载依赖项。

步骤 4 — 包含自动加载脚本

由于 PHP 本身不会自动加载类,Composer 提供了一个自动加载脚本,你可以在项目中包含它,从而免费获得自动加载功能。这样可以更轻松地处理项目的依赖关系。

你需要做的唯一一件事就是在 PHP 脚本中在任何类实例化之前包含 vendor/autoload.php 文件。当你添加第一个依赖项时,Composer 会自动生成这个文件。

让我们在我们的应用程序中尝试一下。创建文件 test.php 并在文本编辑器中打开它:

nano test.php

添加以下代码,引入 vendor/autoload.php 文件,加载 cocur/slugify 依赖项,并使用它创建一个 slug:

<?php
require __DIR__ . '/vendor/autoload.php';use Cocur\Slugify\Slugify;$slugify = new Slugify();echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');

保存文件并退出编辑器。

现在运行脚本:

php test.php

这将产生输出 hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it

当新版本发布时,依赖项需要更新,让我们看看如何处理这个问题。

步骤 5 — 更新项目依赖项

每当你想要将项目依赖项更新到更新版本时,运行 update 命令:

composer update

这将检查你项目中所需的库的更新版本。如果找到更新版本并且它与 composer.json 文件中定义的版本约束兼容,Composer 将替换先前安装的版本。composer.lock 文件将被更新以反映这些更改。

你也可以通过像这样指定它们来更新一个或多个特定的库:

composer update vendor/package vendor2/package2

确保在更新依赖项后检查你的 composer.jsoncomposer.lock 文件,以便其他人可以安装这些更新版本。

结论

Composer 是每个 PHP 开发人员都应该在其工具箱中拥有的强大工具。在本教程中,你安装了 Composer 并在一个简单的项目中使用了它。你现在知道如何安装和更新依赖项。

除了提供一种简单可靠的管理项目依赖关系的方式之外,它还为社区创建的 PHP 包的共享和发现建立了一个新的事实标准。

相关文章:

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具&#xff0c;主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…...

ssm 学习 ---(spring)

一、spring框架 1、基本框架 2、Beanfactory快速入门 配置清单&#xff1a;xml文件 (1) 导入jar包或者maven坐标 (2) 定义UserService接口以及UserService实现类 (3) 创建bean.xml配置文件&#xff0c;将UserService信息配置到该xml文件中; (4)编写测试代码&#xff0c;创…...

Jupyter Notebook安装及基本使用

Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一&#xff1a;Anaconda直接安装方式二&#xff1a;pip命令安装Jupyter使用虚拟环境 方式一&#xff1a;Anaconda直接安装 安装Anaconda 下载地址&#xff0c;输入邮箱&#xff0c;Windows下载 开始安…...

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…...

Synchronized升级到重量级锁会发生什么?

我们从网上看到很多&#xff0c;升级到重量锁的时候不会降级&#xff0c;再来线程都是重量级锁 今天我们来实验一把真的是这样的吗 1.首选导入Java对象内存布局的工具库&#xff1a; <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-…...

【Webpack】HMR 热更新

HMR全称Hot Module Replacement&#xff0c;可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用。 不使用热更新&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致整个…...

【计算机视觉】siamfc论文复现

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…...

PotatoTool 蓝队版 V1.3 发布:增强功能和性能优化

一、简介 经过广大网友的反馈和建议&#xff0c;我们对V1.1版本中存在的问题进行了优化。其中&#xff0c;我们针对MD5库进行了本地化处理&#xff0c;以提高查询效率。然而&#xff0c;这也导致了软件体积的飙升。二、优化概述 1、兼容性 兼容arm架构系统 2、UI 2.1 界面…...

pytest常用命令行参数解析

简介&#xff1a;pytest作为一个成熟的测试框架&#xff0c;它提供了许多命令行参数来控制测试的运行方式&#xff0c;以配合适用于不同的测试场景。例如 -x 可以用于希望出现错误就停止&#xff0c;以便定位和分析问题。–rerunsnum适用于希望进行失败重跑等个性化测试策略。 …...

pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本

一、背景 通过pgsql的dump命令可以快速的做数据库表结构、表数据的备份&#xff0c;随着业务不断的增加单库单实例已经不能满足业务需要。技术人员是比较懒惰的&#xff0c;每次敲相同命令或是无脑的复制黏贴操作感觉都是对精神的一种摧残&#xff0c;解决摧残的方法就是把命令…...

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS&#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候&#xff0c;书上就有一句话&#xff0c;说你把矢量这些东西用久了&#xff0c;就应该形成一种“直觉”&#xff0c;仿佛这些东西就是你的左右手一样。而这次&#xff0c;我居然真的用“直觉”来…...

ICMP 和 IGMP 的区别

ICMP 和 IGMP 协议 IP 层分支图 ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制信息协议&#xff09; 用于补充 IP 传输数据报的过程中&#xff0c;发送主机无法确定数据报是否到达目标主机。 ICMP 报文分为出错报告报文和查询报文两种。 若数据…...

【Vue3】工程创建及目录说明

【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…...

算法学习2——排序算法(2)

上一篇介绍了几种常见且使用较多的排序算法&#xff0c;本章主要是一个进阶内容&#xff0c;介绍三个较为复杂的算法。 计数排序 (Counting Sort) 计数排序是一种适用于范围较小的整数序列的排序算法。它通过统计每个元素的出现次数&#xff0c;然后依次输出元素&#xff0c;…...

嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)

1、PWM简介 (1)、什么是PWM 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是在具有惯性的系统中利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制…...

python-NLP:1中文分词

文章目录 规则分词正向最大匹配法逆向最大匹配法双向最大匹配法 统计分词语言模型HMM模型 jieba分词分词关键词提取词性标注 规则分词 基于规则的分词是一种机械分词方法&#xff0c;主要是通过维护词典&#xff0c;在切分语句时&#xff0c;将语句的每个字符串与词表中的词进行…...

iOS 开发包管理之CocoaPods

CocoaPods&#xff08;Objective-C 时期&#xff0c;支持Objective-C和swift&#xff09;&#xff0c;CocoaPods下载第三方库源代码后会将其编译成静态库.a 文件 或动态库框架.framework 文件 的形式&#xff0c;并将它们添加到项目中&#xff0c;建立依赖关系&#xff0c;这种…...

Windows搭建RTMP视频流服务器

参考了一篇文章&#xff0c;见文末。 博客中nginx下载地址失效&#xff0c;附上一个有效的地址&#xff1a; Index of /download/ 另外&#xff0c;在搭建过程中&#xff0c;遇到的问题总结如下&#xff1a; 1 两个压缩包下载解压并重命名后&#xff0c;需要 将nginx-rtmp…...

VS2019安装MFC组件

VS2019支持的MFC版本是mfc140 ~ mfc142版本&#xff0c;它兼容VS2015、VS2017之前的老版本程序。 一、MFC的历史版本 MFC的历史版本如下&#xff1a; IDE发布时间工具集版本MSC_VERMSVCMFC版本dllVisual C6.01998V601200MSVC6.06.0mfc42.dll、mfcce400.dllVisual Studio 2002…...

Python学习—open函数,json与pickle知识点,Os模块详解

目录 1. Open函数 2.json与pickle模块 json模块 1. json.dumps() 2. json.dump() 3. json.loads() 4. json.load() pickle 模块 1. pickle.dumps() 2. pickle.dump() 3. pickle.loads() 4. pickle.load() 3.Os模块 1. Open函数 在Python中&#xff0c;open() 函数…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...