diff --git a/Documentation/MigrateToComposer/BestPractices.rst b/Documentation/MigrateToComposer/BestPractices.rst deleted file mode 100644 index 53efa6a..0000000 --- a/Documentation/MigrateToComposer/BestPractices.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. include:: /Includes.rst.txt -.. highlight:: bash - -.. _mig-composer-best-practices: - -============== -Best Practices -============== - -The sections specific to migrating to Composer are still here. - -.. _mig-composer-clear-typo3conf-ext-folder: - -Completely clear `typo3conf/ext` folder -======================================= - -In the "Migration Steps" chapter, this tutorial explained, how you can -:ref:`keep your individual extension in "typo3conf/ext" ` -and in the "Co-working" section, there was a part about how to add rules -to your :file:`.gitignore` file to exclude :file:`typo3conf/ext` from, -but keep your individual extensions in Git. - -If you are searching for a solution to keep your :file:`typo3conf/ext` folder -clean and unify the extension handling even for your project's individual -extension, this section might be useful. - -Define a local path repository ------------------------------- - -Create a directory :file:`packages` in your project root folder and define -this folder as a repository of type "path" in your :file:`composer.json`: - -.. code-block:: json - :caption: /composer.json - - { - "repositories": [ - { - "type": "path", - "url": "./packages/*" - } - ] - } - -Include your individual extensions from `packages` folder ---------------------------------------------------------- - -In the next step, you move all your individual extensions from -:file:`public/typo3conf/ext` to :file:`packages`. And for this way to include them, -it's important, that each extension has it's own correct :file:`composer.json` file. -How this file should look in your extension, is documented in :ref:`Extension Development Documentation ` or -`this blog post from Helmut Hummel `__. - -Assumed, your package key is, ``foo/bar``, you can type the following command -to include your extension to your project: - -.. code-block:: shell - :caption: typo3_root$ - - composer require foo/bar:@dev - -In this case, it's the easiest way to not define any composer version -number, but tell composer to use the latest ``dev`` state. - -.. note:: - - The ``autoload`` information now comes with the extension's - :file:`composer.json` and can be removed from your project's - :file:`composer.json`. - -Exclude `typo3conf/ext` from version control system ---------------------------------------------------- - -To finish your cleanup of "typo3conf/ext", you should keep the line -``/public/typo3conf/ext/*`` in your :file:`.gitignore`, but remove all lines, -starting with ``!/public/typo3conf/ext/``. - diff --git a/Documentation/MigrateToComposer/Index.rst b/Documentation/MigrateToComposer/Index.rst index 7234d25..940d30d 100644 --- a/Documentation/MigrateToComposer/Index.rst +++ b/Documentation/MigrateToComposer/Index.rst @@ -3,7 +3,7 @@ .. _migratetocomposer: =================================== -Migrate a TYPO3 project to composer +Migrate a TYPO3 project to Composer =================================== .. toctree:: @@ -12,4 +12,3 @@ Migrate a TYPO3 project to composer Requirements MigrationSteps VersionControl - BestPractices diff --git a/Documentation/MigrateToComposer/MigrationSteps.rst b/Documentation/MigrateToComposer/MigrationSteps.rst index 6b1522e..f723cee 100644 --- a/Documentation/MigrateToComposer/MigrationSteps.rst +++ b/Documentation/MigrateToComposer/MigrationSteps.rst @@ -13,14 +13,30 @@ Migration steps * `Basic usage of Composer `__ +It is recommended to perform a Composer migration using the latest TYPO3 major release to prevent +facing bugs and issues that have been solved already in newer versions. In case you +are using an older TYPO3 version in Legacy installation mode, you have two viable options: + +* **Upgrade TYPO3 Legacy first**, then do the migration to Composer. This is probably + more straight-forward, as you can follow the :ref:`Legacy Upgrade Guide `, and then this guide. +* **Migrate old TYPO3 version to Composer first**, then perform the :ref:`major upgrade `. + This might cause some friction, because you have to utilize older versions of + `typo3/cms-composer-installers` and dependencies like `helhum/typo3-console` or outdated + extensions on Packagist. + You will also need to inspect older versions of this guide that matches your old TYPO3 + version, using the version selector of the documentation. + + Delete files ============ +.. include:: Backup.rst.txt + Yes, that's true. You have to delete some files, because they will be created by Composer in some of the next steps. -You have to delete, :file:`public/index.php`, :file:`public/typo3/` and all the -extensions inside :file:`public/typo3conf/ext/`, you downloaded from TER or any +You have to delete :file:`public/index.php`, :file:`public/typo3/` and all the +extensions inside :file:`public/typo3conf/ext/` that you have downloaded from the TYPO3 Extension Repository (TER) or any other resources like GitHub. You even have to delete your own extensions, if they are available in a separate Git repository and, for example, included as Git submodule. @@ -29,13 +45,13 @@ Please keep only your sitepackage extension or any other extension, which was explicitly built for your current project and does not have an own Git repository. -Configure composer +Configure Composer ================== -Create a file with name :file:`composer.json` in your project root, not inside -your web root. +Create a file with name :ref:`composer.json ` +in your project root, not inside your web root. -You can use the :file:`composer.json` from typo3/cms-base-distribution as an +You can use the :file:`composer.json` from `typo3/cms-base-distribution` as an example. Use the file from the branch which matches your current version, for example `12.x `__. @@ -43,44 +59,29 @@ However, this may require extensions you don't need or omit extensions you do need, so be sure to update the required extensions as described in the next sections. -The :file:`composer.json` in the Base distribution includes a scripts section: - -.. code-block:: json - :caption: /composer.json - - { - "scripts": { - "typo3-cms-scripts": [ - "typo3cms install:generatepackagestates", - "typo3cms install:fixfolderstructure" - ], - "post-autoload-dump": [ - "@typo3-cms-scripts" - ] - } - } - - -This requires helhum/typo3-console (so be sure to require that too) and is essential -for generating the file :file:`typo3conf/PackageStates.php`. - +You can also create the :file:`composer.json` file via a :bash:`composer init` command. +Or use the `TYPO3 Composer Helper `__. +Also advanced project builders like `CPS-IT project-builder `__ +help you to initialize this most vital file of a Composer project with a +guided approach. .. hint:: - The script section may not be available in current `main` branch of the Base Distribution. - Look at the previous versions. + If you see versions of the :file:`composer.json` for versions older than TYPO3 v12, + you may see references to a `scripts` section that would make use of + `helhum/typo3-console `__, and which + also would need to be required as a package in your newly created :file:`composer.json`. + This is optional. + + You can look at previous versions of the + `Base Distribution's composer.json `__, + for differences between the TYPO3 versions. Add all required packages to your project ========================================= -.. note:: - Previously, the TYPO3 Composer repository was recommended to use for - extensions not available on Packagist. This Composer repository is - `deprecated `__ and should - no longer be used. - -You can add all your required packages with the Composer command `composer +You can add all your required packages with the Composer command :bash:`composer require`. The full syntax is: .. code-block:: shell @@ -94,36 +95,70 @@ require`. The full syntax is: .. code-block:: shell :caption: typo3_root$ - composer require typo3/minimal:^9.5 + composer require "typo3/minimal:^12" + +This will utilize the `Packagist `__ repository by default, +which is the de-facto standard for any Composer package. -There are different ways to define the version of the package, you want + +Composer packages usually rely on a concept called `SemVer `, -e.g. :file:`typo3/cms-fluid-styled-content`. +e.g. :file:`typo3/cms-fluid-styled-content`. You can also go to `Packagist `__ +and search for `typo3/cms-` to see all listed packages. .. note:: To find out all TYPO3 Core packages, you can visit the TYPO3 Composer Helper website. https://get.typo3.org/misc/composer/helper From this website, you can select TYPO3 Core Packages you need and generate - the composer command to require them. + the Composer command to require them. -Install extensions from packagist +Install extensions from Packagist --------------------------------- -You already know the TER and always used it to install extensions? Fine. -But with Composer, the **preferred way** is to install extensions -directly from `packagist.org `__. This works great, when the maintainer uploaded them -to there. Many well known extensions are already available. -You only need to known the package name. There are multiple ways to find it: +You already know the `TYPO3 Extension Repository (TER) `__ and always used it to install extensions? Fine. +But with Composer, the **required way** is to install extensions +directly from `Packagist `__. + +This is the usual way for most extensions used today. Alternatively, some extension +authors or commercial providers offer a custom Composer repository that you can +use (:ref:`see below `). The usage via :bash:`composer require` remains the same. + +To install any TYPO3 extension, you need to know the package name. There are multiple ways to find it: Notice on extension's TER page ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Extension maintainers optionally can link their TYPO3 extension in TER with the -correct Composer key on `packagist.org `__. Some maintainers already did that and if you +according Composer package name on `Packagist `__. Most maintainers already did that and if you search the extension in TER, you will see a message, which command and Composer -key you can use to install this extension. +package name you can use to install this extension. .. include:: /Images/ExternalScreenshots/TerComposerCommand.rst.txt .. note:: - The command `composer req` is short for `composer require`. Both commands + The command :bash:`composer req` is short for :bash:`composer require`. Both commands exactly do the same and are interchangeable. +Search on Packagist +~~~~~~~~~~~~~~~~~~~ + +`Packagist `__ provides a flexible and quick search. Often you can +search for the known TYPO3 extension key or name of the extension, and you will most likely +find the package you are looking for. + Check manually ~~~~~~~~~~~~~~ @@ -194,30 +241,32 @@ does not provide additional information. .. include:: /Images/ExternalScreenshots/GithubComposerName.rst.txt #. Check, if the package can be found on - `packagist.org `__. + `Packagist `__. .. include:: /Images/ExternalScreenshots/PackagistMask.rst.txt **Example:** -To install the mask extension in version 4.1.\*, type: +To install the mask extension in version 8.3.\*, type: .. code-block:: shell :caption: typo3_root$ - composer require mask/mask:~4.1.0 + composer require mask/mask:~8.3.0 +.. _composer-require-repository: Install extension from version control system (e.g. GitHub, Gitlab, ...) ------------------------------------------------------------------------ In some cases, you will have to install a TYPO3 extension, which is not -available on packagist.org or in the TER. Examples could be: +available on Packagist or in the TER. Examples could be: * non-public extension only used by your company. * you forked and modified an existing extension. +* commercial plugin / licensed download / Early Access (EAP) As first step, you have to define the repository in your -:file:`composer.json`'s "repositories" section. In this example, you find the +:file:`composer.json` section `repositories`. In this example, you find the additional lines added to the :file:`composer.json` from above: .. code-block:: json @@ -237,29 +286,24 @@ additional lines added to the :file:`composer.json` from above: } } -.. note:: - `cms-package-dir` `is no longer supported `__ - since subtree split. You will sometimes see composer.json files with this: +Ideally you should not manually edit a :file:`composer.json` file, but instead +utilize the Composer command to manipulate the file, like this: - .. code-block:: json - :caption: /composer.json +.. code-block:: shell + :caption: typo3_root$ - { - "extra": { - "typo3/cms": { - "cms-package-dir": "{$vendor-dir}/typo3/cms" - } - } - } + composer config repositories.foo-bar vcs https://github.com/foo/bar.git - There is no harm in that, but it won't have any effect. +The Git repository must point to a TYPO3 extension that provides a +:file:`composer.json` itself. +See :ref:`t3coreapi:files-composer-json` for details on how these files should look like. -The Git repository must be a TYPO3 extension with a -:file:`composer.json` itself. How this file should look in your extension, -can be found on -`this blog post from Helmut Hummel `__. -Please note, that Git tags are used as version numbers. +Git tags of the repository will be used as version numbers. + +Apart from only adding a single Git repository, you can also add Composer repositories +that aggregate multiple packages through tools like `Satis `__, +or also `Private Packagist `__ repositories. If you fulfill these requirements, you can add your extension in the same way like the other examples: @@ -274,15 +318,28 @@ same way like the other examples: Include individual extensions like site packages ================================================ -.. todo:: This is not allowed anymore. The sitepackage has to go to another - directory and be included via composer properly +A project will often contain custom extensions, and at the least a :ref:`sitepackage ` +that provides the TYPO3-related project templates and configuration. + +Before TYPO3 v12, these extensions were stored in a directory like :file:`typo3conf/ext/my_sitepackage`. +In Composer mode, you can easily add a custom repository within your project +of the type `path`. This allows you to require your sitepackage as if it was +a normal package. By doing this, you do not need to publish your sitepackage to a repository like +GitHub, or publish a package on Packagist. + +Usually these extensions are saved in a directory like :file:`/packages/` +or :file:`/extensions/` (and no longer in :file:`typo3conf/ext/`), so you would use: + +.. code-block:: shell + :caption: typo3_root$ + + composer config repositories.local_packages path './packages/*' + composer require myvendor/sitepackage -It's not necessary to move your project's site package to a dedicated -Git repository to re-include it in your project. You can keep the files -in your main project (e.g. :file:`public/typo3conf/ext/my_sitepackage`). There is -only one thing to do; Because TYPO3's autoload feature works differently -in Composer based installations, you have to register your PHP class -names in Composer. This is very easy when you use PHP namespaces: +This also means that your sitepackage needs to be contained in its own directory like +:file:`/packages/my_sitepackage/` and provide a :file:`composer.json` file +within that directory. That :file:`composer.json` file would also list all the possible +autoloading information of PHP classes that your sitepackage uses: .. code-block:: json :caption: EXT:my_sitepackage/composer.json @@ -290,29 +347,19 @@ names in Composer. This is very easy when you use PHP namespaces: { "autoload": { "psr-4": { - "VendorName\\MySitepackage\\": "public/typo3conf/ext/my_sitepackage/Classes/", - "VendorName\\AnyOtherExtension\\": "public/typo3conf/ext/any_other_extension/Classes/" + "MyVendor\\Sitepackage\\": "Classes/" } } } -For extension without PHP namespaces, this section has to look a bit -differently. You can decide by yourself, if you want to list each PHP file -manually or if Composer should search for them inside a folder: - -.. code-block:: json - :caption: EXT:my_sitepackage/composer.json +Directory locations are always relative to where the extension-specific :file:`composer.json` is +stored. - { - "autoload": { - "classmap": [ - "public/typo3conf/ext/my_old_extension/pi1/", - "public/typo3conf/ext/my_old_extension/pi2/class.tx_myoldextension_pi2.php" - ] - } - } +Do not mix up the project-specific :file:`composer.json` file with this package-specific :file:`composer.json` +file. Since autoloading information is specific to an extension, you usually do not list it in the +project file. -To complete our example :file:`composer.json`, it would look like this: +To complete our example project's :file:`composer.json`, it would look like this: .. code-block:: json :caption: typo3_root/composer.json @@ -322,35 +369,26 @@ To complete our example :file:`composer.json`, it would look like this: { "type": "vcs", "url": "https://github.com/foo/bar.git" - } + }, + { + "type": "path", + "url": "./packages/*" + }, ], "extra": { "typo3/cms": { "web-dir": "public" } - }, - "autoload": { - "psr-4": { - "VendorName\\MySitepackage\\": "public/typo3conf/ext/my_sitepackage/Classes/", - "VendorName\\AnyOtherExtension\\": "public/typo3conf/ext/any_other_extension/Classes/" - }, - "classmap": [ - "public/typo3conf/ext/my_old_extension/pi1/", - "public/typo3conf/ext/my_old_extension/pi2/class.tx_myoldextension_pi2.php" - ] } } -After adding paths to the autoload you should run `composer dumpautoload`. This command will re-generate the autoload info and should be run anytime you add new paths to the autoload portion in the :file:`composer.json`. - -.. note:: - - If you want to keep your :file:`typo3conf/ext` directory empty and `autoload` information only - in extensions' :file:`composer.json`, but not in your project's :file:`composer.json`, - there is an alternative way to include your individual extensions in the chapter - :ref:`completely clear "typo3conf/ext" folder ` - in the :ref:`Best practices ` section. +After adding or changing paths in the autoload section you should run :bash:`composer dumpautoload`. This command +will re-generate the autoload information and should be run anytime you add new paths to the autoload section +in the :file:`composer.json`. +After all custom extensions are moved away from :file:`typo3conf/ext/` you can remove the directory +from your project. You may also want to adapt your :file:`.gitignore` file to remove any entries +related to that old directory. New file locations ================== @@ -358,6 +396,10 @@ New file locations As final steps, you should move some files because the location will have changed for your site since moving to Composer. +The files listed below are internal files that should not be exposed to +the webserver, so they are moved outside the :file:`public/` structure, +in parallel to :file:`vendor/`. + You should at least move the site configuration and the translations. Move files: @@ -376,43 +418,36 @@ Move files: :file:`public/typo3temp/var`, unless you need to keep the log files or anything else that may still be relevant. -These locations have changed: - -+--------------------------------+-----------------------+ -| Before | After | -+================================+=======================+ -| :file:`public/typo3conf/sites` | :file:`config/sites` | -+--------------------------------+-----------------------+ -| :file:`public/typo3temp/var` | :file:`var` | -+--------------------------------+-----------------------+ -| :file:`public/typo3conf/l10n` | :file:`var/labels` | -+--------------------------------+-----------------------+ - +These locations have changed, note that TYPO3 v12+ moved some more configuration +files to a new directory than TYPO3 v11: + ++------------------------------------------------------+-----------------------------------------------------------------+ +| Before | After | ++======================================================+=================================================================+ +| :file:`public/typo3conf/sites` | :file:`config/sites` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3temp/var` | :file:`var` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/l10n` | :file:`var/labels` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/LocalConfiguration.php` | :file:`config/system/settings.php` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/AdditionalConfiguration.php` | :file:`config/system/additional.php` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/system/settings.php` | :file:`config/system/settings.php` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/system/additional.php` | :file:`config/system/additional.php` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3` | :file:`vendor/typo3/` | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/PackageStates.php` | removed | ++------------------------------------------------------+-----------------------------------------------------------------+ +| :file:`public/typo3conf/ext` | removed (replaced by :file:`vendor` and e.g. :file:`packages`) | ++------------------------------------------------------+-----------------------------------------------------------------+ +| N/A | :file:`public/_assets` (new) | ++------------------------------------------------------+-----------------------------------------------------------------+ Have a look at :ref:`t3coreapi:directory-structure` in "TYPO3 Explained". As developer, you should also be familiar with the :ref:`Environment API `. -These file locations have **not** changed: - -+------------------------------------------------------+ -| :file:`public/typo3conf/LocalConfiguration.php` | -+------------------------------------------------------+ -| :file:`public/typo3conf/AdditionalConfiguration.php` | -+------------------------------------------------------+ -| :file:`public/typo3conf/PackageStates.php` | -+------------------------------------------------------+ -| :file:`public/typo3conf/ext` | -+------------------------------------------------------+ - - -This means, the :file:`config` directory does not exactly replace the -:file:`public/typo3conf` directory. This may change in the future. - -.. tip:: - - You can take additional measures to move :file:`public/typo3conf/ext` out of the web - root too. Have a look at :ref:`mig-composer-clear-typo3conf-ext-folder` in the - "Best practices" section. You may also want to look at the - `Secure Web `__ - package which is a way to split up the "public" and "private" files. diff --git a/Documentation/MigrateToComposer/Requirements.rst b/Documentation/MigrateToComposer/Requirements.rst index ef541cc..94effb4 100644 --- a/Documentation/MigrateToComposer/Requirements.rst +++ b/Documentation/MigrateToComposer/Requirements.rst @@ -22,6 +22,8 @@ installing Composer can be found on `getcomposer.org`_. .. _getcomposer.org: https://getcomposer.org/ +Your host needs to be able to execute the :bash:`composer` binary. + Folder structure ================ @@ -44,9 +46,31 @@ accessible via HTTP request. └── typo3temp/ You will need a web root folder in your project. You can find many -tutorials with different names for your web root folder. The truth is: -the name does not matter because we can configure it in the settings in -a later step. We will use :file:`public/` in our example. +tutorials with different names for your web root folder (e.g. :file:`www/`, +:file:`htdocs/`, :file:`httpdocs/`, :file:`wwwroot/`, :file:`html/`). +The truth is: the name does not matter because we can configure it in the +settings in a later step. We will use :file:`public/` in our example. + +**Bad:** + +.. code-block:: none + :caption: Page tree of directory typo3_root + + $ tree typo3_root + └── cms/ (web root) + └── public/ + ├── index.php + ├── fileadmin/ + ├── typo3/ + ├── typo3conf/ + └── typo3temp/ + +Here you would access the installation via `https://example.com/cms/public/index.php`, +which would also be a security issue as any other directory outside of the +dedicated project root directory could be accessible. + +Also having a directory structure like that can create file and directory +resolving issues within the TYPO3 backend. **Good:** @@ -64,8 +88,52 @@ a later step. We will use :file:`public/` in our example. .. todo: What does refactor concrete mean? If you do not have such a web root directory, you will have to refactor your -project before proceeding. Please be aware that you may need to tell your web -server about the changed web root folder if necessary. +project before proceeding. First, you create the new directory :file:`public/` and +basically move everything you have inside that subdirectory. Then check all +of your custom code for path references that need to be adjusted to add +the extra :file:`public/` part inside of it. Usually, HTTP(S) links are relative +to your root, so only absolute path references may need to be changed (e.g. cronjobs, +CLI references, configuration files, :file:`.gitignore`, ...). + +Please be aware that you very likely need to tell your web +server about the changed web root folder if necessary. You do that by changing a +`DocumentRoot` (Apache) or `root` (Nginx) configuration option. Most hosting +providers offer a user interface to change the base directory of your project. + +For local development with `DDEV `__ or `Docker ` +you will also need to adjust the corresponding configuration files. + +Git version control, local development and deployment +===================================================== + +This migration guide expects that you are working locally with your project and use +Git version control for it. + +If you previously used the TYPO3 Legacy installation (from a release ZIP) and did +not yet use Git versioning, this is a good time to learn about version control first. + +All operations should ideally take place in a separate branch of your Git repository. +Only when everything is completed you should move your project files to your +staging/production instance (usually via :ref:`deployment `, +or via direct file upload to your site). If you do not yet use deployment techniques, this is +a good time to learn about that. + +Composer goes hand in hand with a good version control setup and a deployment workflow. +The initial effort to learn about all of this is well worth your time, it will +make any project much smoother and more maintainable. + +Local development platforms like `DDEV `__, `Docker `__ +or `XAMPP/WAMPP/MAMPP `__ +allow you to easily test and maintain TYPO3 projects, based on these git, docker and +composer concepts. + +Of course you can still perform the Composer migration on your live site without +version control and without deployment, but during the migration your site will not be +accessible, and if you face any problems, you may not be able to easily revert to the +initial state. + +.. todo: Point to a good guide for deployment and version control + Code integrity ============== diff --git a/Documentation/MigrateToComposer/VersionControl.rst b/Documentation/MigrateToComposer/VersionControl.rst index 77ac482..d9a5e1e 100644 --- a/Documentation/MigrateToComposer/VersionControl.rst +++ b/Documentation/MigrateToComposer/VersionControl.rst @@ -52,3 +52,42 @@ All your co-workers should always run :bash:`composer install` after they have checked out the files. This command will install the packages in the appropriate versions defined in :file:`composer.lock`. This way, you and your co-workers always have the same versions of the TYPO3 Core and the extensions installed. + +Maintaining versions / composer update +====================================== + +In a living project, from time to time you will want to raise the versions of +the extensions or TYPO3 versions you use. + +The proper way to do this is to update each package one by one (or at least +grouped with explicit names, if some packages belong together): + +.. code-block:: shell + :caption: typo3_root$ + + composer update georgringer/news helhum/typo3-console + +You can also raise the requirements on certain extensions if you want to +include a new major release: + +.. code-block:: shell + :caption: typo3_root$ + + composer require someVendor/someExtension:^3.0 + +For details on upgrading the TYPO3 Core to a new major version, please see +:ref:`upgradecore`. + +While it can be tempting to just edit the :file:`composer.json` file manually, +you should ideally use the proper :bash:`composer` commands to not introduce +formatting errors or an invalid configuration. + +You should avoid running :bash:`composer update` without specifying package names +explicitly. You can use regular maintenance automation (for example via +`Dependabot `__) to regularly update dependencies +to minor and patch-level releases, if your dependency specifications are set up +like this. + +After any update, you should commit the updated :file:`composer.lock` file to your +Git repository. Ideally, you add a commit message which :bash:`composer` command(s) you +specifically executed. diff --git a/Documentation/Settings.cfg b/Documentation/Settings.cfg index 5f73c21..956b116 100644 --- a/Documentation/Settings.cfg +++ b/Documentation/Settings.cfg @@ -37,7 +37,7 @@ t3coreapi = https://docs.typo3.org/m/typo3/reference-coreapi/12.4/en-us/ t3home = https://docs.typo3.org/ # t3install = https://docs.typo3.org/m/typo3/guide-installation/main/en-us/ # t3l10n = https://docs.typo3.org/m/typo3/guide-frontendlocalization/main/en-us/ -# t3sitepackage = https://docs.typo3.org/m/typo3/tutorial-sitepackage/main/en-us/ +t3sitepackage = https://docs.typo3.org/m/typo3/tutorial-sitepackage/12.4/en-us/ t3start = https://docs.typo3.org/m/typo3/tutorial-getting-started/12.4/en-us/ # t3tca = https://docs.typo3.org/m/typo3/reference-tca/main/en-us/ # t3translate = https://docs.typo3.org/m/typo3/guide-frontendlocalization/main/en-us/