Ric*_*nop 30 php jenkins composer-php
这是我的composer.json文件:
"require": {
"php": ">=5.4",
"zendframework/zendframework": "2.*",
"doctrine/doctrine-module": "dev-master",
"doctrine/doctrine-orm-module": "0.*",
"gedmo/doctrine-extensions": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
},
"scripts": {
"post-update-cmd": [
"rm -rf vendor/Behat",
"git clone git://github.com/Behat/Behat.git",
"cp composer.phar Behat/composer.phar",
"cd Behat && git submodule update --init",
"cd Behat && php composer.phar install",
"cd Behat && php composer.phar require guzzle/guzzle:3.0.*",
"mv Behat vendor/Behat",
"ln -sf ../Behat/bin/behat vendor/bin/"
]
}
Run Code Online (Sandbox Code Playgroud)
如何才能使脚本只在开发环境中运行?
基本上我希望脚本只在我调用时运行:
php composer.phar update --dev
Run Code Online (Sandbox Code Playgroud)
hak*_*kre 43
要做到非开发环境更新,而不会触发任何脚本,使用了--no-scripts在命令行开关update命令:
php composer.phar update --no-scripts
^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
默认情况下,Composer脚本仅在基础包中执行.因此,您可以拥有一个用于开发的包,并且在生活环境中使其成为实时系统的依赖项.
除此之外,我没有看到任何自动区分脚本的方法.
Chr*_*och 12
这不是可以选择默认安装和不同的脚本--dev选项,但你可以使用的方法isDevMode()在作曲\脚本\事件仅在一个开发环境运行命令.http://getcomposer.org/apidoc/master/Composer/Script/Event.html
Web*_*ber 11
介绍
一些答案有些简短,并且没有详细说明完成此操作的上下文。阅读之前的答案后,我仍然想与仍然困惑的人分享一些知识。
确定适合您的选项
首先,花一点时间意识到您正在有效地创建针对特定环境(即您的开发服务器/容器)的不同流程。这违反任何最佳做法,因为它通常容易出错。话虽如此,您可以通过多种方式实现所需的目标。
不触发任何脚本(docs)
如果在某些环境中您不想触发任何脚本,则可以使用该--no-scripts标志来防止这种情况。
文档内容如下--no-scripts::跳过执行composer.json中定义的脚本。
composer upgrade --no-scripts
Run Code Online (Sandbox Code Playgroud)
当您的代码当前不工作时升级软件包时,这特别有用。如果您唯一的脚本是与开发和测试相关的,它也将起作用。
单独运行一个脚本(docs)
只需根据需要运行特定命令:
composer run-script [--dev] [--no-dev] script
Run Code Online (Sandbox Code Playgroud)
当您只想在特定情况下运行脚本时,此功能很有用。
例如,在运行任何测试之前必须执行特定脚本的构建系统上;构建系统提供配置选项来调用上述自定义脚本。
在命令中定义条件(docs)
文档内容如下:在作曲家的安装或更新过程中,一个名为的变量COMPOSER_DEV_MODE将被添加到环境中。如果命令是使用--no-dev标志运行的,则此变量将设置为0,否则将设置为1。
一个例子可能看起来像
"scripts": {
"post-install-cmd": [
"[ $COMPOSER_DEV_MODE -eq 0 ] || <your command>"
]
}
Run Code Online (Sandbox Code Playgroud)
我个人认为如果您使用容器,这是推荐的方法。
注意:这在Windows上不起作用,因为它需要%COMPOSER_DEV_MODE%。
还有一些软件包(如neronmoon的scriptsdev),可以帮助您实现相同的目标,而不必在composer.json dev-scripts中的extra部分中的所有命令中都键入以上内容。
在PHP脚本中定义条件(docs)
调用一个PHP方法,该方法根据您的应用程序已执行此操作的方式检查您的环境。您甚至可以通过与上面的方法结合使用此条件;“在命令中定义条件”。
"scripts": {
"post-update-cmd": [
"AppNameSpaceName\\YourClassName::methodName"
]
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以继续创建类,如下所示:
<?php
namespace AppNameSpaceName;
class YourClassName
{
methodName() {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在许多现代框架中,已经存在一种机制来确定应用程序的运行时环境(Symfony方式,Laravel方式)。
纱线运行(docs)
由于当今大多数PHP应用程序还可以转换其javascript文件,因此将安装NPM或Yarn。您可以使用脚本部分仅在开发机器/容器上运行此部分。例如:
yarn run dev-only-script
Run Code Online (Sandbox Code Playgroud)
在package.json中有一个部分
"scripts": {
"dev-only-script": "rm some/folder && ln -s path/to/your/folder some/"
}
Run Code Online (Sandbox Code Playgroud)
关键是将您的composer.json清理干净。在纱,你可以有脚本dev-server,test和build。
您可以通过为dev路径设置自定义脚本而不是使用post-update-cmd钩子来实现相同的效果.
"scripts": {
"update-behat": [
"rm -rf vendor/Behat",
"git clone git://github.com/Behat/Behat.git",
"cp composer.phar Behat/composer.phar",
"cd Behat && git submodule update --init",
"cd Behat && php composer.phar install",
"cd Behat && php composer.phar require guzzle/guzzle:3.0.*",
"mv Behat vendor/Behat",
"ln -sf ../Behat/bin/behat vendor/bin/"
],
"dev-update": [
"@composer update --dev",
"@update-behat"
]
}
Run Code Online (Sandbox Code Playgroud)
然后简单地运行 php composer.phar dev-update
您可以使用COMPOSER_DEV_MODE环境变量(版本1.3.0-RC-2016-12-11中的新功能):
"scripts": {
"post-install-cmd": [
"[ $COMPOSER_DEV_MODE -eq 0 ] || echo devmode only"
]
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25032 次 |
| 最近记录: |