我使用该命令安装自己的框架。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-project
require
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消