catchdigital / drucker
Docker + drupal composer stack
Requires
- composer/installers: ^1.9
- cweagans/composer-patches: ^1.6
- drupal/core-composer-scaffold: ^10
- drupal/core-project-message: ^10
- drupal/core-recommended: ^10
- drush/drush: ^11
- vlucas/phpdotenv: ^5.0
Requires (Dev)
- drupal/core-dev: ^10
- drupal/twig_vardumper: ^3.1
Conflicts
This package is auto-updated.
Last update: 2024-09-07 10:29:52 UTC
README
简介
Docker compose 启动集。
设置
- NGINX:来自 Docker Hub 的最新版本。
- PHP 7-fpm:优化的 7.4.4 版本
- Percona:5.7 版本
创建项目
使用 composer 创建新项目。请将 ${project_name} 替换为您的项目名称。这将成为您应用程序的根目录:composer create-project catchdigital/drucker ${project_name}
如果 settings.php 文件在 Drupal 核心中被更新,您需要在 settings.php 中取消注释最后 3 行以包含 settings.local.php
更新项目
应创建一个 .env 文件,作为 .env.example 的副本。请根据您的需要随意添加/更新任何变量。
运行 docker compose docker-compose up -d server
如果您已在 hosts 文件中设置了域名,您应该能够在 https://vm.localhost/ 或您想要运行的任何域名上访问站点。
其他有用命令
停止 docker stack docker-compose stop
销毁整个 docker stack。这也会删除数据库。 docker-compose down
下一步
如有需要,请安装 contrib 主题,创建您自己的主题,并使用您的 ${theme} 名称更新 webpack。
之后,您应该能够在项目的根目录中构建 css 和 javascript:npm run build
。这将在主题的构建文件夹中生成文件。不要忘记将构建文件添加到您的库中,并为每个库创建不同的入口点,以便在 twig 模板周围拆分。
为了为每个入口点动态添加依赖项,您应该在您的主题中添加以下钩子。
/**
*
* Implements hook_library_info_alter() for webpack chunks dependencies.
*/
function hook_library_info_alter(&$libraries, $extension) {
// We only want to modify current theme extensions
if ($extension === '${theme}') {
// Load chunks dependencies from stats file.
$stats = file_get_contents(DRUPAL_ROOT . "/../webpack.stats.json");
$stats = Json::decode($stats);
// Create and attach code splits.
foreach($stats['namedChunkGroups'] as $name => $lib) {
// Loop through require files.
$reqAssets = $lib['assets'];
if (isset($libraries[$name])) {
$libraries = addNewLibrary($libraries, $reqAssets, $name);
}
}
}
}
function addNewLibrary($libraries, $reqAssets, $name) {
foreach($reqAssets as $asset) {
$requireLib = str_replace('.bundle.js', '', $asset['name']);
// Dependency exists?
if (empty($libraries["asset-$requireLib"])) {
$filename = "build/" . $asset['name'];
$libraries["asset-$requireLib"] = [
"js" => [
$filename => []
]
];
$excludedLibraries = ["500", "396"];
if (in_array($requireLib, $excludedLibraries)) {
$libraries["asset-$requireLib"]["js"][$filename] = [
"minified" => false,
"attributes" => [
"async" => true,
"defer" => true
]
];
}
}
if (isset($libraries[$name]['dependencies'])) {
$libraries[$name]['dependencies'][] = "${theme}/asset-$requireLib";
} else {
$libraries[$name]['dependencies'] = ["${theme}/asset-$requireLib"];
}
}
return $libraries;
}
每个入口点的单个库必须根据 webpack 中的定义手动创建,并且它们应该使用相同的名称。如果使用 catchify 主题,这将是自动发生的。