为了账号安全,请及时绑定邮箱和手机立即绑定

如何在用户通过 Composer 安装我的软件包后运行脚本?

如何在用户通过 Composer 安装我的软件包后运行脚本?

PHP
皈依舞 2022-08-19 10:49:16
我使用该命令安装自己的框架。composer require otra/otra:dev-develop --no-update --no-cache && composer update --no-autoloader我已经把这个部分放在我的框架中:composer.json"scripts": {     "pre-install-cmd": "@composer config bin-dir bin/"     }但是 Composer 不会运行它。这是否正常,Composer 是否将其视为依赖项而不是根包,因此它不允许我的脚本运行?如果是这种情况,我怎么能有相同的行为呢?我想:将我的二进制文件放在文件夹中,不必要求用户手动执行符号链接(或其他解决方案)binvendor/bin将文件夹从我的框架复制到项目的根目录。web编辑 :使用创建项目命令如果我输入,我得到这个:composer create-project otra/otra:dev-develop crashtest --remove-vcscomposer.json{  "name": "otra/otra",  "type": "library",  "description": "The OTRA PHP framework",  "keywords": ["framework"],  "homepage": "https://github.com/lperamo/otra",  "license": "X11",  "authors": [    {      "name": "Lionel Péramo",      "email": "contact@lionel-peramo.com",      "homepage": "https://wexample.com"    }  ],  "bin" : ["otra.php"],  "config": {    "bin-dir" : "bin/",    "sort-packages": true  },  "require": {    "ext-mbstring": "*",    "php": ">=7.4.0",    "symfony/yaml": "^4.0"  },  "require-dev": {    "ext-pdo": "*",    "ext-pdo_mysql": "*"  },  "scripts": {    "pre-install-cmd": "@composer config bin-dir bin/"  }}这与我的框架完全相同,所以我无法通过Composer更新它。如果我不使用,我可以用git,但这不是目标。--remove-vcs该命令的输出为:composer安装 otra/otra (dev-develop ab37237565155dab11812a7b2982d30ee240f051)安装 otra/otra (dev-develop ab37237): 从缓存克隆 ab37237565在崩溃测试中创建的项目加载包含包信息的作曲家存储库从锁定文件安装依赖项(包括 require-dev)
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

仅执行在项目的正确文件中定义的脚本。composer.json

来自必需和已安装软件包的脚本永远不会执行,因为这将带来可怕的安全风险。

这在文档中进行了简要说明:

仅执行根包的 composer.json 中定义的脚本。如果根包的依赖项指定了自己的脚本,则 Composer 不会执行这些其他脚本。

如果包用户需要执行其他步骤才能使用包或库,请在包文档中解释这些步骤,并提供他们可以手动执行的脚本,并将为他们执行这些步骤。


如果你的包是一个“框架”,而不是一个库,你可以做的就是利用作曲家命令create-project

这将要求您设置具有项目默认结构的存储库,这反过来又取决于您的包。

例如,这就是Symfony的Skeleton的方式。

使用这种设置,您可以创建自定义安装脚本并使用 激活它们,并使用类似的东西执行一些额外的设置步骤,甚至是交互式设置步骤。(文档post-create-project-cmd)

请注意,此脚本仅在 使用 安装包时运行,而在使用 时永远不会运行。create-projectrequire


查看完整回答
反对 回复 2022-08-19
?
达令说

TA贡献1821条经验 获得超6个赞

没有人提到,这可以通过创建一个作曲家插件和定义事件处理程序来实现。


查看完整回答
反对 回复 2022-08-19
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号