使用Composer安装Drupal和管理依赖项

Composer 可用于管理 Drupal 和所有依赖项(模块、主题、库)。在执行任何作曲家命令之前,请确保在本地计算机上安装了Composer。
使用Composer下载Drupal核心
从 Drupal 8.8.0 发布开始 - 推荐composer模板从 drupal-composer/drupal-project 更改为官方支持的:drupal/recommended-project
对于 Drupal 8 和 Drupal 9,请使用 drupal/recommended-project 中的作曲家模板。此模板确保 Drupal 核心依赖项与官方 drupal 版本完全相同。其他方法可以在下面找到。
对于Drupal 7,使用drupal-composer/drupal-project。注意:如果您使用的是 Composer 2:站点文件夹中的错误 Drupal 7 结构与 Composer 2。
创建项目
对于 Drupal 8 和 Drupal 9:
composer create-project drupal/recommended-project my_site_name_dir
对于 Drupal 7 :
composer create-project drupal-composer/drupal-project:7.x-dev -n my_site_name_dir
这将在“my_site_name_dir”中创建一个项目,并自动执行以下载Drupal的最新稳定版本及其所有依赖项。composer install
您的“my_site_name_dir”将包含应该位于 Web 根目录之外且无法被 Web 服务器访问的文件。Web 根目录将为“my_site_name_dir/Web”。
请注意,上面的命令将下载Drupal的当前官方版本。如果需要其他版本,请将版本号添加到命令的冒号后面。例如,要下载版本 8.9.13:
composer create-project drupal/recommended-project:8.9.13 my_site_name_dir
所有版本都可以在 https://www.drupal.org/project/drupal/releases 找到。
使用标准Web界面安装Drupal
编写者完成包下载后,您可以将浏览器导航到站点的 URL 并开始设置。它将要求提供数据库凭据、管理员用户的名称和一些基本信息。
使用命令行安装 Drupal
您可以使用 Drush 从命令行安装 Drupal。通过运行以下命令在项目中添加 Drush:并使用 drush site:install 运行命令行安装向导。在没有任何参数的情况下,它将安装标准配置文件并仅要求提供数据库凭据。composer require drush/drush
drush site:install
如果你正在评估Drupal并且只想看到一个网站,你可以尝试快速入门功能。创建项目后,您可以键入并查看演示站点。php ./web/core/scripts/drupal quick-start demo_umami
执行修改后的安装
如果要在执行之前修改下载的 composer.json 的某些属性,请在运行 时使用标志。例如,您可能希望将子目录“web”重命名为其他名称。composer install--no-installcomposer create-project
为此:
- 跑
composer create-project --no-install drupal/recommended-project my_site_name_dir
- 将目录更改为my_site_name_dir并编辑 composer.json 文件以满足您的需求。例如,要将子目录从“web”更改为其他内容,要修改的键是“额外”子键“webroot”和“installer-paths”。
- 运行以下载Drupal及其所有依赖项。
composer install
如果您习惯于通过 drush make 构建 Drupal 站点,请参阅 Drupal 的 Composer 模板文档中的常见问题解答,以了解此选项与 drush make 之间的区别。
使用 Composer 下载贡献的模块、主题及其依赖项
贡献的Drupal模块依赖于第三方库的情况越来越普遍。其中一些模块只能使用 Composer 安装。如果您使用 Composer 下载了 Drupal 核心,您很可能希望使用 Composer 使用 Composer 下载所有模块和主题。
本章包含以下小节:
使用 Composer 下载贡献的模块和主题
要使用作曲家下载贡献的Drupal模块或主题:
- 跑
composer require drupal/<modulename>
- 例如:
composer require drupal/token
- 这需要在Drupal安装的根目录下执行,但不能与核心目录在同一级别。
然后,作曲家将自动更新您的 composer.json,将模块添加到列表中的所有其他要求中,如下所示:
{
"require": {
"drupal/token": "^1.5"
}
}
作曲家将下载该模块及其可能具有的所有可能的依赖项。
您可以通过两种方式启用 Drupal 模块:
- 通过使用标准的Drupal网络浏览器界面。
- 使用 Drush 或 Drupal 控制台等命令行工具 - 请参阅从命令行安装模块。
当需要模块时,可以使用项目名称或项目中的特定模块名称:
- 作曲家将下载包含特定模块的整个项目。
- 例如,如果您需要features_extra项目中的fe_block模块,则可以从以下选项中执行:
composer require drupal/features_extra
composer require drupal/fe_block
指定版本
您可以指定要下载的模块/主题的版本,如下所示:
composer require 'drupal/<modulename>:<version>'
例如:
composer require 'drupal/token:^1.5'
composer require 'drupal/simple_fb_connect:~3.0'
composer require 'drupal/ctools:3.0.0-alpha26'
composer require 'drupal/token:1.x-dev'
为避免不同的terminals/shells出现问题,请将版本括在引号中,如上例所示。在这些示例中,版本映射如下:
- ^1.5:映射到模块的最新稳定版 8.x-1.x。
- ~3.0:映射到模块的最新稳定版 8.x-3.x。
- 3.0.0-alpha26:映射到版本 8.x-3.0-alpha26
- 1.x-dev:映射到 8.x-1.x-dev
有关 ~(波浪号)和 ^(插入符号)的版本约束的详细信息,请参阅下一个重要发布运算符。
建议指明要下载的贡献模块的版本。在上面的示例中,Simple FB Connect 可以更新到 8.x-3.x 分支的更高版本,但即使Simple FB Connect 发布了4.x的新版本,Composer 也不会将 Simple FB Connect自动更新到 8.x-4.x。
关于语义版本控制
Drupal.org 贡献的项目当前未使用真正的语义版本控制进行版本控制。但是,Drupal.org 上的 Composer 服务将 Contrib 项目版本架构转换为 Composer 可以理解的 semver 格式。这个“semver shim”还将允许 Drupal.org 在Contrib的版本控制标准发生变化时保持灵活性。这个填充程序的关键元素是Drupal Core的每个主要版本都有一个单独的端点,以防止模块的D7版本和D8版本之间的冲突。
示例 D7 Endpoint 版本映射
Current Format | Translated Format |
---|---|
{Platform.x}-{major}.{minor}-{stability#} | {major}.{minor}.0-{stability}{#} |
7.x-3.4-beta2 | 3.4.0-beta2 |
7.x-2.10-rc2 | 2.10.0-rc2 |
7.x-1.0-unstable3 | unstable releases will not be translated, and not available to composer |
7.x-1.0-alpha5 | 1.0.0-alpha5 |
7.x-0.1-rc2 | 0.1.0-rc2 |
7.x-1.x-dev | 1.x-dev |
使用作曲家搜索
Drupal.org 的 Drupal 7、8 和 9 的 composer 端点都支持 Composer 搜索功能 - 因此您也可以从命令行搜索 Drupal 项目。使用composer搜索的格式为:
composer search views
使用composer浏览
Drupal.org 的 Drupal 7、8 和 9 的 composer 端点都支持 Composer 浏览功能 - 因此您可以从命令行找到有关 Drupal 项目的其他信息。使用作曲家浏览的格式为:
composer browse drupal/token
定义模块、主题、库等的目录。应该下载
如果要更改文件系统中安装软件包的位置,可以修改 composer.json 文件的“installer-paths”部分。如果需要将特定包安装在其自己的位置,这也很有用。
此方法使用包并使用如下所示的配置:composer/installers
"extra": {
"installer-paths": {
"core": ["type:drupal-core"],
"libraries/{$name}": ["type:drupal-library"],
"modules/contrib/{$name}": ["type:drupal-module"],
"profiles/contrib/{$name}": ["type:drupal-profile"],
"themes/contrib/{$name}": ["type:drupal-theme"],
"drush/{$name}": ["type:drupal-drush"],
"modules/custom/{$name}": ["type:drupal-custom-module"],
"themes/custom/{$name}": ["type:drupal-custom-theme"]
}
}
注意:自定义模块和主题路径需要包 v1.0.24 及更高版本。composer/installers
除了基于软件包类型的安装位置之外,您还可以使用供应商特定的安装位置,如下所示:
"extra": {
"installer-paths": {
"web/libraries/ckeditor/plugins/{$name}": ["vendor:ckeditor-plugin"]
}
}
或者打包特定的,如下所示:
"extra": {
"installer-paths": {
"web/libraries/{$name}": [ "enyo/dropzone" ]
}
}
注意:如果特定包与多个安装程序路径条目匹配,则将使用第一个匹配的条目。
有关如何使用此功能的详细信息,请参阅 https://github.com/composer/installers 中的作曲家/安装程序文档。
使用 Composer 下载第三方库
许多Drupal发行版正在采用Asset Packagist作为将第三方Javascript和CSS包下载,安装和管理到Drupal的库文件夹中的工具。请注意,Asset Packagist 可能无法与所有可以想象的第三方软件包一起使用,并且仅支持那些已在 NPM 或 Bower 中索引的软件包。(Asset Packagist 网站提供了一种搜索机制来查找支持的包)。一般来说,不建议使用 Composer 来管理纯前端应用程序中的依赖关系,因为 NPM、Webpack 和 Yarn 目前更适合该任务。换句话说,仅当您的主要应用程序是基于PHP的服务器端应用程序(如Drupal)时才使用Asset Packagist,该应用程序依赖于其他较小的非PHP库。
对于未被 NPM 或 Bower 索引的 Javascript 依赖项,您可能会发现您可以使用 Composer 调整此方法来管理 CKEditor 插件以满足您的需求。
设置资源包管理器以在项目中使用的方法如下:
1.通过运行以下命令,将 oomphinc 的 Composer 安装程序扩展器 PHP 包添加到项目的根 composer.json 文件中:
composer require oomphinc/composer-installers-extender
2.将 Asset Packagist 添加到项目的根 composer.json 的“存储库”部分。
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
3. 确保 NPM 和 Bower 资产被注册为新的“安装程序类型”,除了 type:drupal-library 之外,它们还注册在“installer-paths”中,以安装到 Drupal 的 /libraries 文件夹中,位于项目的根 composer.json 文件的“额外”部分中。
"extra": {
"installer-types": [
"npm-asset",
"bower-asset"
],
"installer-paths": {
"web/libraries/{$name}": [
"type:drupal-library",
"type:npm-asset",
"type:bower-asset"
]
}
}
4.可以通过将特定库添加到常规配置上方的“安装程序路径”配置来控制特定库的安装路径。例如,所选模块需要位于 /libraries/select 的库,但将库安装到 /libraries/chosen-js 中;以下覆盖将其安装到预期的文件夹中:composer require npm-asset/chosen-js
"extra": {
"installer-paths": {
"web/libraries/chosen": ["npm-asset/chosen-js"],
"web/libraries/{$name}": [
"type:drupal-library",
"type:npm-asset",
"type:bower-asset"
]
}
}
5.您现在可能需要通过命令行上的 Composer 从 NPM 或 Bower 获取库:
composer require bower-asset/leaflet:1.0.3
composer require npm-asset/chosen-js:^1.8
6.Contrib 和自定义模块可以将这些依赖项包含在它们各自的 composer.json 文件中。有关其他说明,请参阅要求 Composer 使用第三方库。
使用 Composer 管理现有站点
本章适用于最初不使用 Composer 安装的 Drupal 8 站点。
使用 Composer 下载贡献的模块和主题
如果您最初在没有 Composer 的情况下创建了 Drupal 网站(例如通过手动下载并提取压缩包 / zip 文件),则需要通过添加 drupal.org 作为 Composer 存储库并定义应下载模块的目录来修改 composer.json。
您可以使用Composerize Drupal插件for Composer自动生成更新的composer.json。它将添加在现有网站中发现的贡献模块、主题和配置文件。
Composerize 模块可以“从您安装的 Drupal 代码库中生成一个 composer.json,该代码库可用于通过运行来重新生成该代码库。composer install
或者,您可以手动修改 composer.json 文件。读:
注意:您应该修改位于存储库根目录下的 composer.json 文件,而不是 core/composer.json 或可能与核心目录位于同一级别的 composer.json。
请参阅“将作曲家添加到现有站点”,以获取手动将作曲家添加到以前在没有 Composer 的情况下安装的现有 Drupal 8 站点的分步指南。
使用 Composer 更新 Drupal 站点
对于使用Composer更新Drupal站点:
一旦 Composer 用于管理单个模块,这也意味着需要使用 Composer 来管理和更新 Drupal 核心。这样做的原因是手动Drupal核心更新取代了“供应商”目录,删除了贡献模块所需的下载库。
使用编辑器修补项目
您可以使用 cweagans/composer-patch 自动将补丁应用于作曲家构建的依赖项。有关具体说明,请参阅项目的 README.md 文件。
composer require cweagans/composer-patches
请注意,2.x(又名主)分支是开发分支,不供公众使用。cweagans/composer-patches
请注意,修补项目的 .info.yml 文件稍微复杂一些。在此问题中查找详细信息和解决方法。
需要模块的特定提交
在某些情况下,您需要将修补程序应用于模块的开发版本。在这种情况下,如果未在模块的 dev 分支中使用特定提交,则修补程序可能无法正确应用。要要求特定提交,请使用要求格式:
composer require drupal/<modulename>:<version>#commitish
例如:
composer require drupal/eck:1.x-dev#ecf376
这通常仅在自上一个稳定版本以来已经很长时间并且您需要使用模块的开发版本的情况下才需要。这样做时,drupal.org的打包过程将包括引用自最后一个标记以来的提交次数的包版本元数据。例如,要求将在 composer.lock 中包含版本 8.x-1.0-alpha5+13-dev 元数据。此版本元数据表示自 alpha13 标记以来的 +5 提交。在可能的情况下,建议使用最新的稳定版本以及您需要的补丁。drupal/eck:1.x-dev#ecf376
在可以切换到标记版本之前,应仅将其用作临时解决方案。Composer 团队不主动支持提交引用,也不会接受与之相关的错误报告。
出于这个原因,将抱怨以下警告:指向提交引用是一种不好的做法,可能会导致不可预见的问题。composer validate
使用没有drupal/推荐项目的作曲家(不推荐)
在某些情况下,您可能希望在不使用 drupal/推荐项目模板的情况下创建自己的作曲家项目。这可能取决于您的 Web 服务器配置和对使用 Composer 的熟悉程度。
使用drupal/推荐项目 | 没有drupal/推荐项目 |
---|---|
仅在“web”子目录中安装 | 安装在您首选的安装路径中,例如网络根、www、html、应用程序等...... |
配置作曲家用法,无需手动修改 JSON | 仅安装要安装的内容。 |
您可以为您的Drupal站点创建自己的Composer项目,而无需使用drupal/推荐项目模板。
- 在空目录中运行以初始化新的作曲家项目。
composer init
- 运行以安装工具来帮助您构建和维护您的Drupal站点。
composer require drupal/core-composer-scaffold composer/installers
- 运行以配置作曲家以从 drupal.org 下载模块、主题和配置文件。
composer config repositories.drupal composer https://packages.drupal.org/8
- 修改文件以配置首选安装路径。强烈建议使用子目录,例如webroot,www,html,web等。当脚手架你的Drupal网站时。
composer.json
- 运行以将 Drupal 核心安装到您喜欢的目录结构中。如果您不想将 Drupal 核心的所有依赖项锁定到已知良好的版本,您也可以要求该软件包。
composer require drupal/core-recommended
drupal/core
已弃用:使用 drupal-composer/drupal-project
使用 drupal-composer/drupal-project 已从 Drupal 8.8.0 中弃用。请根据上面的说明改用官方支持的 drupal/推荐项目。
Drupal/Drupal(已弃用)
使用drupal/drupal,Drupal核心无法使用Composer进行更新,并且更新将非常困难。您不能将 Drupal 核心补丁与 cweagans/composer-patch 一起应用。避免使用此解决方案。
以前使用作曲家下载Drupal的选项称为drupal/drupal已被弃用。
将现有的drupal/drupal站点切换到最新推荐的作曲家托管模板drupal-composer/drupal-project的一个选项是GoComposer插件。
git 克隆核元/核糖的注意事项
如果您使用 git 下载了 Drupal 的最新开发版本,则需要下载 Drupal 在其 composer.json 中列出的所有第三方组件。
- 在存储库目录中运行。
composer install
- 这会将Drupal的作曲家依赖项下载到“供应商”目录中。
定义Drupal项目应下载到的目录
如果您使用 'drupal/recommendation-project'、'drupal-composer/drupal-project' 或 'hussainweb/drupal-composer-init' 下载了 Drupal core,或者如果您使用的是 Drupal 8.3.0 或更高版本,则可以跳过本节。
默认情况下,Composer 会将所有软件包下载到“供应商”目录。显然,这与Drupal模块,主题,配置文件和库不符。为了确保软件包下载到正确的路径,Drupal使用该软件包并附带Drupal站点目录的配置。“drupal/drupal”模板不附带drupal-library配置,因此您需要将其添加到composer.json中:composer/installers
"extra": {
"installer-paths": {
"core": ["type:drupal-core"],
"libraries/{$name}": ["type:drupal-library"],
"modules/contrib/{$name}": ["type:drupal-module"],
"profiles/contrib/{$name}": ["type:drupal-profile"],
"themes/contrib/{$name}": ["type:drupal-theme"],
"drush/{$name}": ["type:drupal-drush"],
"modules/custom/{$name}": ["type:drupal-custom-module"],
"themes/custom/{$name}": ["type:drupal-custom-theme"]
}
}
请注意,自定义模块和主题路径需要包 v1.0.24 及更高版本。composer/installers
对于按照上面没有 drupal/推荐项目的说明运行的自定义安装,建议使用此配方(假设您的 Drupal 根是 web/)来设置安装路径:
"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
}
},
"installer-paths": {
"web/core": ["type:drupal-core"],
"web/libraries/{$name}": ["type:drupal-library"],
"web/modules/contrib/{$name}": ["type:drupal-module"],
"web/profiles/contrib/{$name}": ["type:drupal-profile"],
"web/themes/contrib/{$name}": ["type:drupal-theme"],
"drush/Commands/contrib/{$name}": ["type:drupal-drush"],
"web/modules/custom/{$name}": ["type:drupal-custom-module"],
"web/themes/custom/{$name}": ["type:drupal-custom-theme"]
}
}