hostnet / asset-lib
根据一组输入文件查找所有依赖项的工具。
Requires
- php: >=7.3
- psr/log: ^1.0.0
- psr/simple-cache: ^1.0.0
- symfony/console: ^4.0.0 || ^5.0.0
- symfony/event-dispatcher: ^4.0.0 || ^5.0.0
- symfony/process: ^4.2.8 || ^5.0.0
Requires (Dev)
- hostnet/phpcs-tool: ^9.1.0
- mikey179/vfsstream: ^1.6.6
- phpspec/prophecy-phpunit: ^2.0.1
- phpunit/phpunit: ^9.5.5
This package is auto-updated.
Last update: 2023-08-21 09:40:57 UTC
README
注意:由于生态系统变化迅速且主流框架对javascript的支持更好,此库已被弃用,没有直接的替代方案。
资产可以通过不同的方式管理。本项目旨在提供一种无需专用工具(如监视器)即可增量构建资产的方法,因此无需更改您的开发流程。
此库允许您创建通用的资产管道,并提供一些内置处理器以帮助您快速入门。
核心功能包括
- 无需监视器的增量更改
- 插件架构以添加自己的处理
- 利用NodeJS的并行化进行快速处理
- 在Linux和Windows上均适用
为什么使用这个而不是webpack?
此项目允许进行增量更改,无需监视器。此外,由于检查更改的代码内置在PHP中,当集成到PHP开发工作流程中时,开销非常小。
为什么不使用监视器?
监视器在开发单个项目时很棒。然而,当有多个项目时,资源使用量可能会增长。只有在实际需要时才在页面重新加载时构建资产(在开发中)才会对您的系统征税。
安装
可以使用composer进行安装
composer require hostnet/asset-lib
用法
在以下示例中,我们有一个将多个JS文件构建成一个大型JS文件的设置,并添加了对less的支持。
对于我们的输入,我们有
./assets/app.js
./assets/module-a.js
(由app.js导入)./assets/module-b.js
(由app.js导入)./assets/styles.less
这将输出
./web/dist/app.js
./web/dist/styles.css
使用以下片段构建资产。建议将其添加到类似前端控制器的东西中,以便每次请求时都构建,这样一旦响应返回,所有资产都准备好了。
$config = new \Hostnet\Component\Resolver\Config\SimpleConfig( true, // is dev __DIR__, [], ['app.js'], ['styles.less'], 'web', 'dist', 'assets', __DIR__ . '/var', [ new \Hostnet\Component\Resolver\Plugin\CorePlugin(), new \Hostnet\Component\Resolver\Plugin\LessPlugin(), ], new \Hostnet\Component\Resolver\Import\Nodejs\Executable('/usr/bin/node', __DIR__ . '/node_modules/') ); $packer = new \Hostnet\Component\Resolver\Packer(); $packer->pack($config);
项目根目录应该是包含您的
package.json
和composer.json
的文件夹。
Symfony框架集成已通过asset-bundle的形式存在。
包含已生成的javascript
要使用入口点,您需要做
- 在HTML文件的头部包含输出的
require.js
文件 - 包含输出的资产(例如
dist/app.js
) - 导入入口点模块。
例如
<html> <head> <script type="text/javascript" src="/dist/require.js"></script> </head> <body> <script type="text/javascript" src="/dist/app.js"></script> <script> require('app.js'); </script> </body> </html>
内置处理器
此库提供了一些内置处理器,以便您更快地开始常见的任务。这些是
\Hostnet\Component\Resolver\Plugin\CorePlugin
- 允许将JavaScript文件组合成模块
- CSS资产
Hostnet\Component\Resolver\Plugin\BrotliPlugin
- 用于压缩输出文件
- 需要额外安装
brotli/compress
Hostnet\Component\Resolver\Plugin\CssFontRewritePlugin
- 重新编写CSS文件中的字体,并将其添加到输出列表中
Hostnet\Component\Resolver\Plugin\GzipPlugin
- 用于压缩输出文件
Hostnet\Component\Resolver\Plugin\LessPlugin
- 允许进行less编译
- 需要额外安装
less
Hostnet\Component\Resolver\Plugin\MinifyPlugin
- 使用压缩技术压缩输出文件
- 需要额外安装
uglifyjs
和cleancss
Hostnet\Component\Resolver\Plugin\TsPlugin
- 允许进行typescript编译
- 需要额外安装
typescript
创建自己的插件
如果内置支持不足,您可以通过创建一个插件来添加自己的。您通过实现Hostnet\Component\Resolver\Plugin\PluginInterface
接口,并将您的类添加到配置中来实现。
<?php use Hostnet\Component\Resolver\Plugin\PluginApi; use Hostnet\Component\Resolver\Plugin\PluginInterface; class MyPlugin implements PluginInterface { public function activate(PluginApi $plugin_api): void { // $plugin_api->addBuildStep(new MyBuildStep()); // $plugin_api->addCollector(new MyCollector()); // $plugin_api->addWriter(new MyWriter()); } }
BuildStep类
每个构建步骤代表一个文件或模块的处理动作。这可以是将typescript转换为javascript,压缩或其他在文件输出之前需要完成的操作。
有关更多信息,请参阅Hostnet\Component\Resolver\Builder\AbstractBuildStep。
ImportCollector类
每个导入收集器负责找到在构建步骤中需要包含的额外文件,以确保您的资源正常工作。收集器返回的所有文件都将被跟踪更改。例如,导入的javascript文件或样式表中的字体等。
有关更多信息,请参阅Hostnet\Component\Resolver\Import\ImportCollectorInterface。
Writer类
每个writer将生成的资源内容写入磁盘。有多个writer意味着您可以以不同的格式写入文件。例如,如果您的主机服务器不原生压缩文件,则可能需要输出gzip版本的文件。
有关更多信息,请参阅Hostnet\Component\Resolver\Builder\AbstractWriter。
许可证
hostnet/asset-lib
许可证下是MIT许可证,这意味着您可以在专有软件中重用代码,前提是所有受许可软件的副本都包含MIT许可证条款和版权声明。
联系
- 如果您有问题、问题或功能请求,您可以使用github问题跟踪器。
- 或者通过我们的电子邮件:opensource@hostnet.nl。