使用composer在非空文件夹上安装包

问题描述 投票:0回答:7

我尝试通过composer安装包,但它一直告诉我该目录不为空,那么如何使用composer在非空文件夹上安装包?有强制安装命令吗?

错误信息:

  [InvalidArgumentException]
  Project directory Yii-GZero-2b/ is not empty.
php composer-php yii2
7个回答
63
投票

目前还不能。 GitHub 上正在进行一场讨论,您可以在这里阅读:https://github.com/composer/composer/issues/1135

但是现在,您需要创建一个新目录,然后迁移文件,反之亦然。


2
投票

您可以检查所有 .文件夹中的文件。

$ ls -la

删除任何 .将文件放入文件夹中,然后重试。这对我有用。


1
投票

对我来说,授予文件夹写入权限效果非常好。在 Windows 上,我右键单击提到的文件夹,取消选中“只读”复选框,然后保存它,它就可以工作了。也许您也可以尝试一下,希望它也对您有用。


0
投票

这是使用 docker 容器的人的解决方法。基本思想也适用于任何使用 unix/bsd 操作系统文件系统的人。

就我而言,我有一个容器,它映射项目目录,其中一些现有文件映射到

docker-compose.yml
文件中的 php 和 apache 容器,如下所示:

  php:
    build: './php'
    restart: always
    networks: 
      - backend
    volumes:
      - ./:/usr/local/apache2/htdocs
      - ./tmp:/usr/local/tmp

这假设在项目目录中有一个 /php 目录,其

Dockerfile
包含如下内容:

FROM php:7.4.33-fpm-alpine3.16
RUN apk update; \
    apk upgrade; \
    apk add bash; \
    apk add shadow;
RUN docker-php-ext-install mysqli opcache pdo pdo_mysql
RUN apk add freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev zlib-dev icu-dev
RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ 
RUN docker-php-ext-install -j$(nproc) gd
RUN docker-php-ext-install intl
COPY ./conf/php.ini /usr/local/etc/php/php.ini
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

为了我的需要,我仍在使用 php 7.x,但这个想法将适用于最新的 PHP。需要注意的是,PHP 容器已从官方 Composer 容器中添加了 Composer。

容器启动后,我将使用

docker-compose ps
来获取 php 容器名称,大多数情况下类似于
project-php-1

然后使用 docker 执行到容器中

docker exec -it project-php-1 /bin/bash

这应该会将您放入容器中,并将您的项目目录映射到

/usr/local/apache2/htdocs

cd /usr/local/apache2/htdocs

cd ..

现在运行composer create命令,就像您在本地目录中一样,否则您将让composer创建一个新项目,并将其命名为您通常使用的任何名称。我将使用相同的项目/文件夹名称,因为容器中没有冲突。

例如,这将初始化 symphony 5.x 项目所需的骨架:

composer create-project symfony/skeleton:"^5.4" myproject

不,您将在容器中拥有一个名为“myproject”的目录

cd 进入该目录并使用 cp 命令递归地将所有内容复制到映射的 /usr/local/apache2/htdocs 目录(这将是您实际存在的项目目录)。

cd myproject

cp -R * ../htdocs

您现在将拥有项目中继续工作所需的所有文件。

我的项目目录中也已经复制了 .gitignore,这样我就可以忽略 git 中不需要的目录。

它看起来像这样:

vendor
tmp
var
.idea
.buildpath
.project
.env
apache-local.conf

此时,您已拥有继续开发所需的所有文件和目录。您可以删除容器中创建的目录 Composer,因为您不再需要它。

当然可以使用同样的想法来创建目录并将由作曲家创建的文件和目录复制到现有项目,只要您意识到任何潜在的命名冲突,以及您可能会覆盖任何现有文件或目录。


-1
投票

对于Docker,我在启动容器后删除所有与docker相关的文件,运行composer,然后将文件放回文件夹。


-5
投票

而不是运行命令

composer.phar create-project flarum/flarum . --stability=beta

使用特定的文件夹名称,例如

composer.phar create-project flarum/flarum /var/www/html/forum/ --stability=beta

-7
投票

文件夹必须为空,这是必需的,因为当您运行 create-project 时,composer 的目标是从头开始创建一个完全干净的全新项目。

© www.soinside.com 2019 - 2024. All rights reserved.