magento 2-在哪种情况下,我们需要运行此命令magento setup:di:compile?


12

在哪种情况下,我们需要运行此命令magento setup:di:compile


一旦您安装了新模块并希望清除某些目录
Jaleel

还有什么?
MrTo-Kane'3

同样,当您切换到生产模式时,因为在该模式下,不会生成任何静态内容。所有内容都来自pub/static
Steve Johnson

Answers:


8
  • 部署期间(即,在生产模式下对系统进行更改时)

    请注意,在生产模式(版本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将其禁用。


1
setup:di:compile-multi-tenant已经删除
Antonino Bonumore,2016年

我们能否确认删除var / di文件夹技巧是否有效?它似乎并不适合我
Wildcard27

@ Wildcard27如果还删除其中的目录var/generation怎么办?
Fabian Schmengler'17

@FabianSchmengler刚刚创建了一个Action要测试。-加载页面,错误。-删除digeneration文件夹,重新加载,工作。-添加新的依赖项,重新加载页面,错误。但是,不会di生成任何文件夹。- generation再次删除,重新加载即可。结论:添加依赖项后删除generation文件夹,您无需运行setup:di:compile。如果其他人可以确认这一点,那就太好了。
Wildcard 27年

1

根据我对另一个答案的评论:

您可以setup:di:compile在每次添加依赖项后避免运行该命令,只需在重新加载页面之前删除var/divar/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


0

摘自Alan Storm的博客

依赖注入编译

首先,我们应该解释这些命令试图解决的问题。将Magento 2系统交付生产时,需要运行以下命令

php bin/magento setup:di:compile

该命令扫描系统中的代码,并预生成在开发人员模式下运行时Magento动态加载的许多东西(主要与对象管理器系统和依赖项注入有关)。这既涉及性能,又涉及安全性,因此全面讨论不在本文讨论范围之内。


1
“这既涉及性能,又涉及安全性,而对其进行完整讨论不在本文讨论范围之内。” 这给了它。来自Alan Storm的公然副本:alanstorm.com/magento_2_di_compile_pre-scan_with_commerce_bug
Fabian Schmengler,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.