Composer无法运行安装后脚本

gri*_*rim 13 bash composer-php

尝试在Composer post install/update挂钩中运行bash脚本时出现以下错误:

> post-install.sh
sh: 1: post-install.sh: not found
Script post-install.sh handling the post-install-cmd event returned with an error



  [RuntimeException]
  Error Output: sh: 1: post-install.sh: not found
Run Code Online (Sandbox Code Playgroud)

原始composer.json

可以工作,但更新后安装/更新命令以便在两个地方运行真的很烦人.

{
  "require": {
    "twbs/bootstrap": "3.3.5"
    ...
    ...
  },
  "scripts": {
    "post-install-cmd": [
      "mkdir -p _libraries",
      "cp -r vendor/twbs/bootstrap/dist _libraries/bootstrap/",
      ...
      ...
    ],
    "post-update-cmd": [
      "mkdir -p _libraries",
      "cp -r vendor/twbs/bootstrap/dist _libraries/bootstrap/",
      ...
      ...
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

根据Composer文档:

用Composer的术语表示,脚本可以是PHP回调(定义为静态方法),也可以是任何命令行可执行命令.

所以我composer.json应该能够这样工作:

想要composer.json

{
  "require": {
    "twbs/bootstrap": "3.3.5"
    ...
    ...
  },
  "scripts": {
    "post-install-cmd": [
      "post-install.sh"
    ],
    "post-update-cmd": [
      "post-install.sh"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

post-install.sh

可由每个人(0775)执行,并与composer.json位于同一目录中

#!/bin/bash

mkdir -p _libraries
cp -r vendor/twbs/bootstrap/dist _libraries/bootstrap/
...
...
Run Code Online (Sandbox Code Playgroud)

Wir*_*one 12

实现单任务定义的其他方法是引用脚本:

{
  "require": {
    "twbs/bootstrap": "3.3.5"
    ...
  },
  "scripts": {
    "your-cmd": [
      "mkdir -p _libraries",
      "cp -r vendor/twbs/bootstrap/dist _libraries/bootstrap/",
      ...
    ],
    "post-install-cmd": [
      "@your-cmd",
      ...
    ],
    "post-update-cmd": [
      "@your-cmd",
      ...
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)


hek*_*mgl 11

在我建议使用的评论中

bash post-install.sh
Run Code Online (Sandbox Code Playgroud)

这似乎有效.