嵌套包的 Composer 运行脚本

Posted

技术标签:

【中文标题】嵌套包的 Composer 运行脚本【英文标题】:Composer run-script of nested packages 【发布时间】:2018-03-27 21:51:57 【问题描述】:

我有没有代码但有依赖列表的作曲家项目。我想运行composer install 来下载所有依赖包,然后在每个包中运行一些 bash 命令。

我的 composer.json:


	"name": "testmain/testmain",
	"description": "testmain",
	"minimum-stability": "dev",
	"repositories": [
			"type": "package",
			"package": 
				"name": "testsub/testsub1",
				"description": "testsub/testsub1",
				"version": "master",
				"source": 
					"url": "https://github.com/testsub/testsub1",
					"type": "git",
					"reference": "master"
				,
				"scripts": 
					"post-install-cmd": [
						"make",
						"make install"
					]
				
			
		,

		
			"type": "package",
			"package": 
				"name": "testsub/testsub2",
				"description": "testsub/testsub2",
				"version": "master",
				"source": 
					"url": "https://github.com/testsub/testsub2",
					"type": "git",
					"reference": "master"
				,
				"scripts": 
					"post-install-cmd": [
						"make",
						"make install"
					]
				
			
		
	],
	"require": 
		"testsub/testsub1": "master",
		"testsub/testsub2": "master"
	

问题在于运行scripts 嵌套包序列,所有脚本都被作曲家忽略。

谢谢!

【问题讨论】:

创建一个作曲家插件可能是你最好的选择:getcomposer.org/doc/articles/plugins.md#creating-a-plugin 【参考方案1】:

正如 Tomas 所说,自动调用非 ROOT 脚本是不可能的。但是您可以让用户手动调用它们。这并非适用于所有情况,但适用于其他情况。

如果你在vendor/johndoe/mypackage/composer.json中有以下内容:

"scripts": 
    "nameOfScript": "\\johndoe\\mypackage\\Scripts::invoke"

在根目录的composer.json 中放入以下内容:

"scripts": 
    "myFancyScript": [
        "@putenv COMPOSER=vendor/johndoe/mypackage/composer.json",
        "@composer nameOfScript"
    ]

然后用户可以从你的根目录调用composer myFancyScript,并执行包@​​987654327@中的静态函数invoke()

【讨论】:

【参考方案2】:

不幸的是,不可能执行任何非ROOT脚本(即非root composer.json),如documentation中所述:

注意:仅执行根包的 composer.json 中定义的脚本。如果根包的依赖项指定了它自己的脚本,Composer 不会执行那些额外的脚本。

【讨论】:

以上是关于嵌套包的 Composer 运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

更改包的 Composer git 源

Composer 安装程序脚本未正确运行 [退出代码 1]

如何在 Composer 中显示需要包的内容

使用外部项目文件夹中的composer

运行composer install时如何解决两个包需求冲突?

使用 composer 安装 Laravel 包的问题