在我的composer.json文件中,我在脚本部分中有以下内容:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"npm install",
"bower install"
]
运行'composer install'时,这将导致npm和bower安装所有依赖项,默认情况下包括devDependencies。在进行生产推广时(例如'作曲家安装--no-dev'我要启动'npm install --production'和'bower install --production')
据我所知,似乎没有办法根据传递的标志更改为'post-install-command'指定的列表,或者设置可以传递给的变量的方法post-install-cmd中的命令。
我错过了什么吗?似乎不可能使用composer仅使用配置来进行开发和生产安装。我是否真的必须在生产中使用composer install --no-scripts
,然后自己手动运行所有四个命令?这看起来有点笨重。
答案 0 :(得分:12)
您可以随时使用PHP为您执行环境检测,然后从同一脚本安装其他依赖项。这不是很干净,比如在post-install-cmd中包含npm和bower,但它会为你提供你正在寻找的东西。
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"php path/to/installer.php"
]
示例installer.php:
// Logic to determine the environment. This could be determined many ways, and depends on how your
// application's environment is determined. If you're making use of Laravel's environment
// capabilities, you could do the following:
$env = trim(exec('php artisan env'));
// Clean up response to get the value we actually want
$env = substr($env, strrpos($env, ' ') + 1);
$envFlag = ($env === 'production')
? '--production'
: '';
// Install npm
passthru("npm install {$envFlag}");
// Install bower
passthru("bower install {$envFlag}");
你可以让这个例子更加健壮,甚至可以为它创建一个Artisan命令。
答案 1 :(得分:2)
这有点黑客但你可以在bash中使用$PPID
获取父命令的PID。从那里你可以获得命令行参数。
"post-install-cmd": [
"ps -ocommand= -p $PPID | grep no-dev > /dev/null && echo called with no-dev || echo called without no-dev",
],
如果你这样做,我会把它放在一个bash脚本中并像这样运行:run-if-env-is-production.sh "bower install --production"
我会推荐@ kwoodfriend的解决方案,因为它不太便携,因为它需要bash,ps& grep的。
答案 2 :(得分:1)
这样可行;
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"npm install",
"bower install"
],
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"npm install --production",
"bower install --production"
]
即。您应该在开发环境中运行“更新”,并且只在您的生产环境中运行“安装”。
答案 3 :(得分:1)
因为我使用npm,bower和gulp来构建我的资产,所以我不需要在制作中使用它们,所以这里是我使用的composer.json:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"(ps -ocommand= -p $PPID | grep -q no-dev && true) || npm --loglevel silent install",
"(ps -ocommand= -p $PPID | grep -q no-dev && true) || npm --loglevel silent install --global bower",
"(ps -ocommand= -p $PPID | grep -q no-dev && true) || bower --silent install"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"(ps -ocommand= -p $PPID | grep -q no-dev && true) || npm --loglevel silent update",
"(ps -ocommand= -p $PPID | grep -q no-dev && true) || bower --silent update"
]
...但是对于我来说,使用这样一个棘手的命令来检测开发环境是不是很奇怪......
答案 4 :(得分:0)
{
"scripts": {
"post-update-cmd": "MyVendor\\MyClass::postUpdate",
"post-package-install": [
"MyVendor\\MyClass::postPackageInstall"
],
"post-install-cmd": [
"MyVendor\\MyClass::warmCache",
"phpunit -c app/"
],
"post-create-project-cmd" : [
"php -r \"copy('config/local-example.php', 'config/local.php');\""
]
}
}