koodimonni / composer-dropin-installer
安装包或从包中安装少量文件到自定义路径,而不会覆盖现有内容。
Requires
- php: >=5.3.2
- composer-plugin-api: ^1.0 | ^2.0
Requires (Dev)
- phpunit/phpunit: ^5.7
README
此Composer插件帮助您将Composer打包的文件移动或复制到您想要的位置。
Composer仅允许您将完整目录安装到它们自己的目录中。对于自定义安装路径,composer/installers 非常有用,但它会覆盖文件夹中的所有内容,并且不允许两个或更多项目共存。我们只是让Composer安装东西,然后继续。
我最初创建此插件是为了使用Composer安装多个WordPress语言。我需要将多个包放在同一个目录 htdocs/wp-content/languages
中。请看如何使用Composer 更新WordPress语言。
如何使用它
跟随这些简单的步骤
1. 需要 "koodimonni/composer-dropin-installer": "*" 或 "dev-master"
"require": { "koodimonni/composer-dropin-installer": "dev-master" }
2. 将自定义路径添加到您的 composer.json -> extra -> dropin-paths。
"extra": { "dropin-paths": { "htdocs/wp-content/languages/": ["type:wordpress-language"] } }
3. 享受Composer提供的良好依赖关系管理,并将东西安装到您想要的位置。
最终结果看起来像这样
{ "name": "koodimonni/wordpress", "type": "project", "description": "WordPress with composer languages using Koodimonni dropin installer", "homepage": "http://github.com/koodimonni/composer-dropin-installer", "authors": [ { "name": "Onni Hakala", "email": "onni@koodimonni.fi", "homepage": "https://github.com/onnimonni" } ], "keywords": [ "wordpress", "composer", "wp", "languages" ], "config": { "preferred-install": "dist" }, "repositories": [ { "type": "composer", "url": "https://wpackagist.org" }, { "type": "composer", "url": "https://wp-languages.github.io" } ], "require": { "php": ">=5.3.2", "koodimonni/composer-dropin-installer": "*", "johnpbloch/wordpress": "*", "composer/installers": "~1.0", "vlucas/phpdotenv": "~1.0.6", "koodimonni-language/fi": "*", "koodimonni-language/et": "*", "koodimonni-language/ru_ru": "*", "wpackagist-plugin/akismet": "*", "wpackagist-plugin/wp-redis": "*", "wpackagist-plugin/woocommerce": "*", "wpackagist-plugin/wordpress-mu-domain-mapping": "*" }, "extra": { "installer-paths": { "htdocs/wp-content/plugins/{$name}/": ["type:wordpress-plugin"], "htdocs/wp-content/themes/{$name}": ["type:wordpress-theme"] }, "dropin-paths": { "htdocs/wp-content/mu-plugins/": ["type:wordpress-muplugin"], "htdocs/wp-content/languages/": ["type:wordpress-language"], "htdocs/wp-content/languages/plugins/": ["vendor:wordpress-plugin-language"], "htdocs/wp-content/languages/themes/": ["vendor:wordpress-theme-language"], "htdocs/wp-content/": [ "package:wpackagist-plugin/wp-redis:object-cache.php", "package:wpackagist-plugin/wordpress-mu-domain-mapping:sunrise.php", "type:wordpress-dropin"] }, "wordpress-install-dir": "htdocs/wordpress" } }
移动与复制文件
默认情况下,此插件会从源移动文件到目标,这意味着文件将从源中消失。
如果您更喜欢复制而不是移动(这意味着在安装后文件仍然保留在源中),请将以下配置插入到您的 composer.json
的 config
声明中
"config": { "dropin-installer": "copy" }
但是关于这个看起来不可能的语法呢?
Dropin语法由四个部分组成:"{path}": "{directive}:{target}:{files}"
路径 是到目标文件夹的相对路径。
指令 是以下之一
- package - 例如
package:koodimonni-language/fi
- vendor - 例如
vendor:koodimonni-language
- type - 例如
type:wordpress-language
文件 是可选的,默认情况下将移动所有文件。
在某些情况下,您可能只想从包中移动一个文件。我发现WordPress dropins 需要这样做。一个好的例子是:域名映射 或 object-cache.php。
一些注意事项
- 脚本与 composer/installers 配合得很好
- 我会自动忽略这些文件
.DS_store
.git
.gitignore
composer.json
composer.lock
readme
readme.md
readme.txt
changelog.txt
license
license.md
license.txt
phpunit.xml
- 脚本需要类Unix文件系统(OS X,Linux)
测试
使用以下命令运行PHPUnit测试
composer test
测试在 tests/
目录中进行,其中使用了两个模拟Composer项目来测试插件安装方法。
待办事项
- 处理删除和更新时的删除。这可以通过 [vendor-dir] 中的 json-database 容易地完成
变更日志
- 1.4 自动忽略
readme
readme.txt
changelog.txt
和license.txt
文件。感谢 @ocean90! - 1.3 支持 composer 2.0
- 1.2 添加了复制文件而不是移动文件的功能。感谢 @rask 的贡献!
- 1.1.0 用
Composer\Script\PackageEvent
替换了Composer\Installer\PackageEvent
- 1.0.1 更新测试到新仓库 https://wp-languages.github.io
- 1.0 稳定版发布,更新到更新的composer-plugin-api
- 0.2.4 修复了在额外部分未定义'dropin-paths'时崩溃的问题。
- 0.2.3 修复了错误并添加了当运行dropins时对用户的简短通知
- 0.2.2 修复了错误
- 0.2.1 修复了错误
- 0.2 将自定义composer脚本来插件转换
- 0.1 初次发布
最后
感谢 @Seldaek 为packagist.org所做的一切辛勤工作!