composer - 动态设置参数变量

zoz*_*ozo 5 php symfony composer-php

我有以下设置:

  • symfony 2.7经典结构

  • 用于依赖管理的作曲家

我需要做的是在parameters.yml中设置一个变量,其中包含运行composer时的时间戳.

为此,我尝试了以下解决方案:

parameters.yml.dist

   [bla bla bla]
   ran_timestamp: ~


composer.json
   [bla bla bla]
   "scripts": {
       "pre-install-cmd": [
          "export SYMFONY_APP_DATE=$(date +\"%s\")"
       ],
   }
   "extra": {
       "incenteev-parameters": {
          "file": "app/config/parameters.yml",
          "env-map": {              
            "ran_timestamp": "SYMFONY_APP_DATE"
          }
       }
   }
Run Code Online (Sandbox Code Playgroud)

在parameters.yml中设置变量的部分工作正常(使用SYMFONY_APP_DATE env变量中的值创建参数).

问题是在运行composer时不会更新env变量.任何人都可以帮助我吗?

附加信息:

  • 如果我手动从cli中的pre-install-cmd运行命令它工作正常(所以命令本身我认为没问题)

  • 我看到命令在启动安装后在composer中运行,所以我认为它已执行(下面的输出):

$ composer install

export SYMFONY_APP_DATE = $(date +"%s")

使用包信息加载composer存储库[bla bla bla]

  • 没有报告错误

  • 我假设也许作曲家没有设置env变量的权利? - 不,不是这个.它与变量范围有关.

Dmi*_*nko 7

问题显然是你在子进程中设置env参数(为每个脚本创建),但是不可能从子进程重新定义父进程的env参数(即从其脚本之一为composer本身设置env值) )

我认为你需要扩展\ Incenteev\ParameterHandler\ScriptHandler :: buildParameters来实现它.

UPD:我找到了实现这一目标的方法

仅为composer.json中的build-params定义一个特殊块

"scripts": { "build-params": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters" ],

而不是在post-install-cmd块而不是Incenteev\\ParameterHandler\\ScriptHandler::buildParameters制作它

"export SYMFONY_APP_DATE=$(date +\"%s\") && composer run-script build-params"

这将在同一过程中创建env var和构建参数