我的目标是创建项目后更改当前的用户目录。
我正在运行 composer create-project vendor/repo some-directory
,并且我在composer.json文件中有以下部分。
{
"scripts": {
"post-create-project-cmd": [
"cd /some/destination"
]
}
}
因此,我需要动态替换/某些/目的地,用某个主导地位,在命令行参数中指定。
可能吗?
,如文档中所述:
什么是脚本?
用作曲家的话来说,脚本可以是PHP 回调(定义为静态方法(或任何命令行可执 命令。
因此,您可以在终端中使用mv
- 类型man mv
之类的命令以获取更多信息 - :
{
"scripts": {
"post-create-project-cmd": [
"mv /some/destination /some-directory",
"cd /some-directory"
]
}
}
或通过创建可呼叫的方法来为您处理此操作。
{
"scripts": {
"post-create-project-cmd": [
"SomeVendor\SomeObject::renameMyDirMethod"
]
}
}
作曲家运行composer create-project vendor/repo some-directory
是什么(简化(:
- 创建 directory 目录(如果目录不是空的,则作曲家提高了异常 project indirectory some-directory/不是空的。((
- 将当前目录更改为某个指导
- 执行project composer.json文件的脚本部分中报告的脚本(在您的情况下是供应商/repo中使用的脚本。(
因此,如果您正在显示脚本 从供应商/repo 中使用的部分,请将当前目录更改为不需要创建项目的目录,由于作曲家已经做到了。
如果您需要从正在创建的项目的脚本部分中列出的bash脚本中获取当前目录,则只需检查变量 $PWD
的内容,该内容相当于php中的 getcwd()
。/p>
作为作曲家项目完成的示例,请参见Composer Project Drupal-Composer/Drupal-Project使用的Scripthandler.php的内容。它在目录中创建一些文件,其文件名是从getcwd()
返回的。
$fs = new Filesystem();
$drupalFinder = new DrupalFinder();
$drupalFinder->locateRoot(getcwd());
$drupalRoot = $drupalFinder->getDrupalRoot();
$dirs = [
'modules',
'profiles',
'themes',
];
// Required for unit testing
foreach ($dirs as $dir) {
if (!$fs->exists($drupalRoot . '/'. $dir)) {
$fs->mkdir($drupalRoot . '/'. $dir);
$fs->touch($drupalRoot . '/'. $dir . '/.gitkeep');
}
}
实际上,它正在创建当前目录内找到的目录内的目录,但这并没有改变创建项目的目录是从作曲家设置为当前目录的。