在我的composer.json文件中,脚本部分有以下内容:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"npm install",
"bower install"
]
当运行"composer install"时,这将导致npm和bower安装它们的所有依赖项,默认情况下包括devDependencies。当涉及到产品推出时(例如,"composer install-no dev"我想启动"npm install-production"one_answers"bower install-production"(
据我所知,似乎没有办法根据传递的标志来更改为"安装后命令"指定的列表,也没有办法设置变量,然后将这些变量传递给安装后命令中的命令。
我是不是错过了什么?似乎不可能使用composer来同时使用配置进行开发和生产安装。我真的必须在生产中使用composer install --no-scripts
,然后自己手动运行所有四个命令吗?这看起来有点笨拙。
您可以始终使用PHP为您进行环境检测,然后从同一脚本安装其他依赖项。这不是很好也不干净,就像在安装后的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命令。
这会起作用;
"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"
]
也就是说,您应该在开发环境中运行"update",并且只在生产环境中运行过"install"。
这有点麻烦,但您可以在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。
因为我使用npm、bower和gullow来构建我的资产,所以我在生产中不需要它们中的任何一个,所以这里是我使用的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"
]
但在我看来,使用这样一个棘手的命令来检测开发环境很奇怪,或者不。。。