【问题标题】:Why is my composer.json automatically deleted or missing after composer install?为什么我的 composer.json 在 composer 安装后会自动删除或丢失?
【发布时间】:2016-01-07 20:00:47
【问题描述】:

$ composer install 之后,一切顺利,但 composer.json 不见了(删除?)。

也就是说,composer.jsoncomposer install 之后将不再存在。

这很奇怪。


这是我的composer.json

{
  "repositories": [
    {
      "type": "composer",
      "url": "http://wpackagist.org"
    },
    {
      "type": "package",
      "package": {
        "name": "wordpress",
        "type": "webroot",
        "version": "4.4.1",
        "dist": {
          "type": "zip",
          "url": "https://github.com/WordPress/WordPress/archive/4.4.1.zip"
        },
        "require": {
          "fancyguy/webroot-installer": "1.0.0"
        }
      }
    }
  ],
  "require": {
    "php": ">=5.3.0",
    "wordpress": "4.4.1",
    "fancyguy/webroot-installer": "1.0.0"
  },
  "extra": {
    "webroot-dir": "./",
    "webroot-package": "wordpress"
  }
}

vendor 目录和composer.lock 仍然存在。

myMBP:testtt erwai$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing fancyguy/webroot-installer (1.0.0)
    Loading from cache

  - Installing wordpress (4.4.1)
    Loading from cache

Writing lock file
Generating autoload files

myMBP:testtt erwai$ ls
composer.lock       wp-blog-header.php  wp-load.php
index.php       wp-comments-post.php    wp-login.php
license.txt     wp-config-sample.php    wp-mail.php
readme.html     wp-content      wp-settings.php
vendor          wp-cron.php     wp-signup.php
wp-activate.php     wp-includes     wp-trackback.php
wp-admin        wp-links-opml.php   xmlrpc.php

myMBP:testtt erwai$ ls composer.json
ls: composer.json: No such file or directory

myMBP:testtt erwai$ ls composer.lock
composer.lock

myMBP:testtt erwai$ ls vendor
autoload.php    composer

  • 操作系统:OS X 10.11.2
  • PHP:5.5.30
  • 作曲家:1.0-dev (64b0d721838cdceef679761c5cf69a0d070d14c9)

编辑

我认为这可能会在安装 wordpress 时发生。

由于wordpress是安装在根目录("webroot-dir": "./")的,所以好像清理了所有目录。

有什么想法吗?

【问题讨论】:

  • 您应该在github.com/fancyguy/webroot-installer/issues 上将其报告为一个问题,因为它显然是该插件中的一个错误,它在安装时会清除目录。
  • 插件只返回自定义文件夹($extra['webroot-dir'])。它的 Composer,提取到此文件夹中(覆盖内容)。当 root 成为目标时,插件可以/应该更具防御性并警告用户。
  • FileDownloaderVcsDownloader 在下载前清空目录。我不确定如何优雅地处理非空目录,因为如果已经安装了以前的版本,那么它应该是非空的。

标签: php composer-php


【解决方案1】:

由于wordpress是安装在根目录下(“webroot-dir”:“./”),所以好像清理了所有目录。

Composer 将 ZIP 存档解压缩到您的文件夹中,并覆盖其内容。 当 Composer 完成时,它会添加 composer.lock 文件和 Composer 自动加载文件(vendor/autoload.phpvendor/composer/*.php)。


此插件的目的是将 Wordpress 安装到自定义文件夹(而不是项目文件夹):

/home/user/composer-wp-installer-projectwebroot-dir: /var/www/abc.com/wordpress

因此,我们的想法是不要安装到项目的根文件夹中。

请试一试:

"extra": {
    "webroot-dir": "wordpress",
    "webroot-package": "wordpress"
}

这将为 WP 创建一个新文件夹 wordpress,并将“安装程序”内容及其 composer.json 保存在您的项目文件夹中。

【讨论】:

  • 关于composer使用的正常安装方法还有一点需要注意,webroot目录下不应该有安装目标。例如composer-installers 配置为将 wordpress-plugin 安装在同一目录中,因为对 webroot 软件包的更新将删除其中安装的软件包。
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 2021-11-22
  • 2013-03-25
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
相关资源
最近更新 更多