* +---------------------------------------------------------------------- */ namespace crmeb\command; use crmeb\services\FileService; use crmeb\utils\Terminal; use think\console\Command; use think\console\input\Argument; use think\console\input\Option; /** * Class Npm * @author 等风来 * @email 136327134@qq.com * @date 2023/4/13 * @package crmeb\command */ class Npm extends Command { /** * @author 等风来 * @email 136327134@qq.com * @date 2023/4/13 */ protected function configure() { $this->setName('npm') ->addOption('path', 'dp', Option::VALUE_OPTIONAL, '默认路径') ->addOption('build', 'bu', Option::VALUE_OPTIONAL, '打包存放路径') ->setDescription('NPM打包工具'); } /** * @author 等风来 * @email 136327134@qq.com * @date 2023/4/13 */ public function handle() { $path = $this->input->getOption('path'); $build = $this->input->getOption('build'); if (!$build) { $build = public_path() . 'admin'; } $terminal = new Terminal(); $terminal->setOutput($this->output); $adminPath = $path ?: $terminal->adminTemplatePath(); $adminPath = dirname($adminPath); if (is_dir($adminPath . DS . 'dist')) { $question = $this->output->confirm($this->input, '检测到已经生成打包文件是否重新打包?', false); if (!$question) { $this->output->info('已退出打包程序'); return; } } $dir = $adminPath . DS . 'node_modules'; if (!is_dir($dir)) { $terminal->run('npm-install'); } $terminal->run('npm-build'); if (!is_dir($adminPath . DS . 'dist')) { $this->output->error('打包失败'); return; } $this->app->make(FileService::class)->copyDir($adminPath . DS . 'dist', $build); $this->output->info('执行成功'); } }