hostnet/asset-lib

此包已被弃用且不再维护。未建议替代包。

根据一组输入文件查找所有依赖项的工具。

安装数: 61,911

依赖者: 1

建议者: 0

安全: 0

星标: 1

关注者: 4

分支: 12

开放问题: 2

类型:hostnet-lib

2.0.1 2022-05-02 14:23 UTC

README

注意:由于生态系统变化迅速且主流框架对javascript的支持更好,此库已被弃用,没有直接的替代方案。

68747470733a2f2f7777772e686f73746e65742e6e6c2f696d616765732f686f73746e65742e737667

Build Status

资产可以通过不同的方式管理。本项目旨在提供一种无需专用工具(如监视器)即可增量构建资产的方法,因此无需更改您的开发流程。

此库允许您创建通用的资产管道,并提供一些内置处理器以帮助您快速入门。

核心功能包括

  • 无需监视器的增量更改
  • 插件架构以添加自己的处理
  • 利用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.jsoncomposer.json的文件夹。

Symfony框架集成已通过asset-bundle的形式存在。

包含已生成的javascript

要使用入口点,您需要做

  1. 在HTML文件的头部包含输出的require.js文件
  2. 包含输出的资产(例如dist/app.js
  3. 导入入口点模块。

例如

<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
    • 使用压缩技术压缩输出文件
    • 需要额外安装uglifyjscleancss
  • 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