Composer windows兼容脚本

时间:2016-09-09 04:01:18

标签: php windows composer-php compatibility

我在这里遇到一个小问题。我正在尝试使用composer的脚本来lint我的PHP项目。到目前为止,我所做的是拥有一个作曲家文件,并在其中输入一些脚本。我的作曲家文件片段看起来像这样:

"scripts": {
    "document": "vendor/bin/apigen generate -s ./src -d ./docs",
    "codecept": "vendor/bin/codecept",
    "test": "vendor/bin/codecept run",
    "lint": "vendor/bin/phpcs --standard=PSR2 src",
    "bootstrap": "composer install && composer codecept bootstrap"
}

我已经定义了依赖项,它在符合POSIX标准的机器(基于MAC / Linux的操作系统)上运行良好,但是当使用Windows的人想要使用任何脚本时,它根本不起作用。

我面临的问题是,我有/作为目录分隔符但是Windows理解\我认为Windows足够智能自动转换它。

我正在考虑的脏解决方案是使用windows-lint命令真的很烦人。我只是想知道当他们想要在多个操作系统上工作时其他人在做什么。

提前致谢!

3 个答案:

答案 0 :(得分:7)

只使用脚本而不指定vendor/bin路径,它将由作曲家自动完成,请参阅https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands

中的注意部分
"scripts": {
    "document": "apigen generate -s ./src -d ./docs",
    "codecept": "codecept",
    "test": "codecept run",
    "lint": "phpcs --standard=PSR2 src",
    "bootstrap": "composer install && composer codecept bootstrap"
}

答案 1 :(得分:2)

我在考虑同样的问题,可能有多种解决方案。

选项1,没有shell脚本,仅限纯PHP

shell脚本解释器在您的平台之间有所不同,并且很难做出一些东西"通用"够了。

但是你可能只使用纯PHP。作曲家文件this quite well。您的PHP应该能够轻松适应Windows案例或POSIX案例。

但是你可能不喜欢在PHP中包装外部程序调用和shell命令。

选项2,从Linux VM运行脚本

例如,您将启动由Vagrant文件定义的Linux VM,然后运行composer trough" vagrant ssh"。

优点:

  • 每个人都有相同的外壳

  • 正确定义Vagrant环境可以简化开发人员的大量本地测试,删除众所周知的#34;这可以在我的机器上运行"。每个开发人员都拥有相同的"当地环境。

缺点:

  • 一些初始设置(包括具有适当权限的项目文件夹的双面同步),很多在线示例都可以提供帮助。

  • 在本地运行VM需要足够的RAM。

选项3,在Windows上使用另一个shell而不是cmd

不要使用标准shell来启动作曲家。还有很多其他选择,包括:

  • cygwin(如果我可以避免的话,我不会使用它)

  • git bash(类似MINGW32,可以使用git客户端轻松安装,使用git不是强制性的)

答案 2 :(得分:0)

我已经创建了一个编辑器包,如果在Windows操作系统上执行,它会将斜杠转换为反斜杠。

在你的composer.json中你只需要添加:

{
  "require": {
    "instituteweb/composer-scripts": "^1.0",
  },
  "scripts": {
    "test": [
      "\\InstituteWeb\\ComposerScripts\\ImprovedScriptExecution::apply",
      "vendor/bin/whatever"
    ]
  }
}

因此,当您执行composer run test时,它将适用于Unix和Windows操作系统。

工作原理:

在脚本队列中使用 apply 方法,停止传播原始"测试"命令。相反,它创建并执行一个名为" _test"的新命令。 (前置下划线),其中包含原始命令,仅使用转换后的斜杠。

应用方法调用之后的命令会受到影响。

指向包裹的链接:https://packagist.org/packages/instituteweb/composer-scripts