require和require-dev在composer.json中有什么区别?

11 浏览
0 Comments

require和require-dev在composer.json中有什么区别?

我开始使用composer,对它了解很少,对Web应用程序开发也没有太多经验。

我刚刚阅读了Nettuts+教程,所以我对composer有一些基本的问题。

{

"require": {

"laravel/framework": "4.0.*",

"way/generators": "dev-master",

"twitter/bootstrap": "dev-master",

"conarwelsh/mustache-l4": "dev-master"

},

"require-dev": {

"phpunit/phpunit": "3.7.*",

"mockery/mockery": "0.7.*"

},

"autoload": {

"classmap": [

"app/commands",

"app/controllers",

"app/models",

"app/database/migrations",

"app/database/seeds",

"app/tests/TestCase.php"

]

},

"scripts": {

"post-update-cmd": "php artisan optimize"

},

"minimum-stability": "dev"

}

  1. "require-dev"部分出现的内容,只会在使用composer install --dev命令时下载和安装吗?
  2. 我阅读了一些composer的文档,但仍然不明白为什么我们要有"require-dev"部分?这是因为我们想要获取特定的版本而不总是获取最新的稳定版本吗?
0
0 Comments

在composer.json中,require和require-dev是两个不同的部分。require部分列出了项目所需的包,只有在满足这些要求的情况下才会安装该包。而require-dev部分列出了开发和测试项目所需的包,这些包在生产环境中是不需要的。在上传项目到生产服务器时,使用git时,会忽略require-dev部分。

使用Composer的require-dev可以声明开发和测试项目所需的依赖关系,但在生产环境中不需要。当将项目上传到生产服务器时(使用git),require-dev部分会被忽略。

为什么"way/generators": "dev-master"在"require"部分中,我在生产环境中不再需要它。这是一个猜测,但我能想到的唯一解释是,因为way/generators被添加为服务提供者,如果在生产环境中缺少它,Laravel将无法正常工作。

"dev requirements of the root package are installed by default"这部分明确说明了require-dev的依赖关系会被默认安装,即使在生产服务器上也是如此。

解决方法是在生产环境中使用--no-dev标志。

require和require-dev是composer.json中的两个不同部分,分别用于声明生产环境和开发环境所需的依赖关系。在上传项目到生产服务器时,可以使用--no-dev标志来忽略require-dev部分。

0
0 Comments

根据composer的文档,composer.json文件中的require-dev部分用于列出开发该软件包所需的软件包,或者用于运行测试等。根软件包的开发需求默认会被安装。在运行composer install命令时,会自动下载开发依赖项。

出现这种需求的原因很简单。当向特定库做贡献时,可能需要运行测试套件或其他开发工具(如symfony)。但是,如果将该库安装到项目中,可能并不需要这些开发依赖项:并不是每个项目都需要测试运行器。

解决方法是在运行composer install命令时使用--no-dev选项,这样可以阻止安装开发依赖项。这样可以避免将开发依赖项安装到项目中,从而使项目保持轻量和高效。

总结起来,require和require-dev两个部分的区别在于:require部分列出的是项目运行所需的软件包,而require-dev部分列出的是开发和测试过程中需要的软件包。通过使用--no-dev选项,可以避免将开发依赖项安装到项目中,使项目保持简洁和高效。

0
0 Comments

composer.json文件中的require和require-dev部分有什么区别?

开发和测试中常常需要不同的环境,如开发环境、测试环境、预发布环境和生产环境。在composer.json文件的require部分声明的依赖通常用于在预发布环境和生产环境中运行应用程序或包,而在require-dev部分声明的依赖通常用于在开发和测试环境中运行。

例如,除了用于运行应用程序的包,开发软件可能还需要一些用于开发软件的包,例如friendsofphp/php-cs-fixer(用于检测和修复代码风格问题)、squizlabs/php_codesniffer(用于检测和修复代码风格问题)以及phpunit/phpunit(用于使用测试驱动开发)等。

在开发和测试环境中,通常会运行“composer install”命令来安装生产环境和开发环境的依赖。然而,在预发布环境和生产环境中,你只想安装用于运行应用程序的依赖。因此,在部署过程中,通常会运行“composer install --no-dev”命令来只安装生产环境的依赖。

换句话说,require和require-dev部分告诉composer在运行“composer install”或“composer install --no-dev”命令时应该安装哪些包。

需要注意的是,应用程序或包所依赖的开发依赖将不会被安装。

对于使用FTP上传整个vendor文件夹进行部署的情况,是可以的,但需要确保使用了--no-dev参数进行安装。另外,FTP可能会比较慢。

至于只需要用于构建应用程序的依赖,在构建和部署流水线中,你可以在构建时安装它们,然后在部署之前将其删除。有人使用phar.io,有人检入PHARs,还有人使用Docker镜像,还有一些人使用单独的composer.json文件来实现这个需求。详细可以参考https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/2.16/dev-tools的示例。

0