在哪种情况下,我们需要运行此命令magento setup:di:compile
?
pub/static
在哪种情况下,我们需要运行此命令magento setup:di:compile
?
pub/static
Answers:
部署期间(即,在生产模式下对系统进行更改时)
请注意,在生产模式(版本2.0.5和更早版本)中,必须使用“多租户”编译。在2.0.6及更高版本中已修复。
bin/magento setup:di:compile-multi-tenant
请参阅:http : //devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html
您还可以在开发模式下使用编译,这会加快站点速度,但另一方面,它会减慢开发速度,因为bin/magento setup:di:compile
每次添加具有依赖项(构造函数参数)的新类或更改现有类的依赖项时,都需要运行。
这是可选的,可能不是一个好主意。如果您已经在开发环境中运行了编译,请删除其中的文件以var/di
将其禁用。
var/generation
怎么办?
Action
要测试。-加载页面,错误。-删除di
和generation
文件夹,重新加载,工作。-添加新的依赖项,重新加载页面,错误。但是,不会di
生成任何文件夹。- generation
再次删除,重新加载即可。结论:添加依赖项后删除generation文件夹,您无需运行setup:di:compile
。如果其他人可以确认这一点,那就太好了。
根据我对另一个答案的评论:
您可以setup:di:compile
在每次添加依赖项后避免运行该命令,只需在重新加载页面之前删除var/di
和var/generation
文件夹即可。
根据我自己的测试,Magento将重新创建var/generation
文件夹,但不会重新创建文件夹,var/di
直到setup:di:compile
再次运行。这意味着您只应var/generation
删除该文件夹。
有趣的是,这也适用于pub/static/*
和setup:static-content:deploy
。这是因为如果静态内容是通过页面重新加载而不是CLI构建的,则Magento似乎会创建指向所需文件的符号链接。
我们办公室的人们在使用Docker for Mac时无法运行上述命令。文件处理太慢。通过使用上述步骤,开发应该会更快。
最好注意,这在生产或默认模式下将不起作用。这仅用于发展。如Fabian Schmengler所述,初始页面重新加载的速度将比正常情况慢,但不应像运行setup:static-content:deploy
或`setup:di:compile 一样慢。
供参考,我正在运行版本2.1.5。
依赖注入编译
首先,我们应该解释这些命令试图解决的问题。将Magento 2系统交付生产时,需要运行以下命令
php bin/magento setup:di:compile
该命令扫描系统中的代码,并预生成在开发人员模式下运行时Magento动态加载的许多东西(主要与对象管理器系统和依赖项注入有关)。这既涉及性能,又涉及安全性,因此全面讨论不在本文讨论范围之内。