baldwin / magento2-module-less-js-compiler
允许 Magento 2 使用 less nodejs 编译器编译 less 文件
Requires
- php: ~5.5.0 || ~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
- magento/framework: ^100.0.9 || ^101.0.0 || ^102.0.0 || ^103.0.0
- magento/module-developer: ^100.0.5
- symfony/process: ^2.8 || ^4.1 || ^5.0 || ^6.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-17 12:54:08 UTC
README
描述
此模块是在对使用 bin/magento setup:static-content:deploy
部署静态资产到生产环境速度缓慢感到沮丧的情况下构建的。特别是,此模块试图解决使用默认的 less.php 库编译 less 文件时的缓慢问题。
此模块通过使用 原始 less.js 编译器提供解决方案,该编译器是用 JavaScript 编写的,并通过 node.js 执行。
我们已经对 less.php 和 less.js 编译器的性能进行了基准测试,less.js 编译器的速度是 less.php 编译器的 1.5 到 3 倍左右,尽管这取决于您的 PHP 版本。如果您运行 PHP 5.x,性能提升将更高,PHP 7.x 本身其实相当快,但 nodejs 版本仍然胜出。
更新:自 Magento 2.3.0 以来,less.php 和 less.js 之间的性能差异似乎已经不大了。我有这样的怀疑,这可能与新版的 less.php 库有关。该库大约在 Magento 2.2.3 & 2.1.12 发布期间发布。因此,升级 less.php 库到最新版本(写作时为 v1.7.0.14)后,对于 Magento 2.2.x 和 2.1.x 的性能差异可能也不那么显著了。
这只是一些猜测,因为不幸的是,我没有跟踪在基准测试中使用的 less.php 库的版本,所以我不确定这个陈述。
自 Magento 2.4.0(或更新的 PHP 版本)以来,性能差异似乎有所改变,有利于 less.php。但是,您可能仍然想使用此模块,以确保本地开发环境和生产环境输出的 CSS 一致。
要求
您至少需要 Magento 2.0.7。我们没有对旧版本进行测试。
如果您想使用此模块,您需要在您构建静态资产的服务器上安装 node.js 和 npm。
您还需要确保 node
二进制文件可在构建静态资产的用户的 $PATH
环境变量中可用。
您还需要 composer 将此模块添加到您的 Magento 2 商店中。
安装
首先,我们建议您安装 less 编译器本身,并将其保存到您的 package.json
文件中作为生产依赖项
npm install --save less@3.13.1
请注意:从Magento 2.1版本开始,
package.json
文件被重命名为package.json.sample
,以便您可以有自己的nodejs依赖项,而不会因为每次更新Magento而将其覆盖。所以如果您使用的是Magento >= 2.1,确保在运行上述命令之前,将package.json.sample
文件复制到package.json
,如果您想使用Magento的grunt
设置。
然后运行shrinkwrap,以固定less(及其依赖项)的版本,这将生成一个包含所有nodejs生产依赖项及其依赖项的确切版本的npm-shrinkwrap.json
文件,这样您就可以确保在另一台机器上安装时使用这些确切版本。
npm shrinkwrap
并确保将这两个文件添加到您的版本控制系统。
与composer的类比,您可以将
package.json
文件与composer.json
文件进行比较,将npm-shrinkwrap.json
与composer.lock
文件进行比较。
现在安装此模块
composer require baldwin/magento2-module-less-js-compiler
并在Magento中启用它
bin/magento module:enable Baldwin_LessJsCompiler bin/magento setup:upgrade
最后一步,在您的部署脚本中,确保调用npm install --production
。您应该在composer install
和bin/magento setup:static-content:deploy
之间执行此操作。
配置
您有机会配置我们发送给lessc
和node
命令的参数。默认值是
lessc --no-color
node --no-deprecation
如果您想覆盖默认参数,可以通过修改您的app/etc/config.php
或app/etc/env.php
文件来实现,添加如下内容
'system' => [ 'default' => [ 'dev' => [ 'less_js_compiler' => [ 'less_arguments' => '--no-color --ie-compat', 'node_arguments' => '--no-deprecation --no-warnings', ] ] ] ]
您还可以通过配置在您的app/etc/config.php
或app/etc/env.php
文件中启用在less编译过程中遇到警告/错误时抛出异常,默认情况下这是禁用的,您应该在var/log/system.log
文件中找到日志记录的问题。但如果您想在编译过程中启用抛出异常,可以在您的app/etc/config.php
或app/etc/env.php
文件中进行配置
'system' => [ 'default' => [ 'dev' => [ 'less_js_compiler' => [ 'throw_on_error' => true, ] ] ] ]
调查less编译错误
当您的.less
文件有语法错误或包含无法正确编译的内容时,请查看var/log/system.log
文件,它将包含有关导致问题的输出。
备注
- 安装此模块将有效地替换默认的less编译器。如果您想回到默认的less编译器,您需要禁用此模块或卸载它。
- 此模块期望less编译器位于
{MAGENTO_ROOT_DIR}/node_modules/.bin/lessc
,这是一个硬编码的路径,被模块使用。如果遵循上述安装步骤,编译器将位于那里,但如果出于某种原因您希望将nodejs模块安装在别处,则此模块将无法工作。如果有人遇到这个问题并且希望我们使其可配置,请告诉我! - 默认的less处理器在Magento 2中将一个选项传递给less编译器,表示应该压缩生成的css文件。在此模块中,我们选择不这样做,因为我们认为这不是在编译less文件时要执行的任务。这应该在后续阶段完成,例如在压缩阶段。如果有人不同意这一点,请告诉我,我对此持开放态度。
- 此模块针对Magento版本2.0.7、2.1.x、2.2.x、2.3.x、2.4.x进行了测试
基准测试
简介
这绝对不是非常专业地进行的,但这里有一些我们在我们正在工作的某些Magento 2商店上进行的测试。
我们禁用了并行性,以便更容易理解不同版本之间的比较。
我们只测量了bin/magento setup:static-content:deploy
命令的持续时间,由于它会导致严重的性能下降,所以已经禁用了xdebug,并且在每次运行之前,我们都会通过运行以下命令来确保所有缓存都是干净的:
rm -R pub/static/* var/cache/* var/view_preprocessed/* var/generation/* var/di/* var/page_cache/* generated/*
机器
- 较旧的服务器是一台经常使用的服务器,上面安装了较旧的软件。
- 较新的服务器是一台新服务器,目前没有流量,并且安装了所有最新的软件版本(撰写本文时)。
- 较旧的本地机器是一台2011年的Macbook Pro(硬盘已升级为SSD,没有使用vagrant或docker,只使用Macports本机软件)
- 较新的本地机器是一台2017年的Macbook Pro(使用Homebrew或Macports的本机软件)
结果
* 快速策略部署在这里有描述,目前在Magento 2.2.x和2.3.x和2.4.x版本中存在bug,并且与标准策略表现相同