gears / asset
Robo Task Runner 的资产最小化管道。
Requires
- php: ^7.0
- consolidation/robo: ^1.0.0
- gears/string: ^1.1
- leafo/scssphp: ^0.6.0
- natxet/cssmin: ^3.0
- oyejorge/less.php: ^1.0
- patchwork/jsqueeze: ^2.0
- symfony/filesystem: ^2.0|^3.0
- symfony/finder: ^2.0|^3.0
- vladkens/autoprefixer: ^0.1
Requires (Dev)
- beelab/bowerphp: ^0.5.1
- phpunit/phpunit: ^6.0
- satooshi/php-coveralls: ^1.0
README
正在寻找维护者,我不再进行太多PHP开发,我已经转向其他领域,现在主要在 dotnet core、node.js & golang 上工作。如果有任何人对接管这些项目感兴趣,请联系 - brad@bjc.id.au
资产齿轮
Robo Task Runner 的资产最小化管道。
如何安装
通过 composer 安装非常简单
composer require gears/asset
如何使用
首先,我假设你知道什么是 Robo Task Runner 以及其基本工作原理。如果你不了解,请访问 robo 网站,并熟悉它: http://robo.li/
在你的 RoboFile.php
中,你需要像这样导入 Gears\Asset\loadTasks
特性
class RoboFile extends Robo\Tasks { use Gears\Asset\loadTasks; }
资产目标
你必须提供的第一个参数是你正在构建的资产的最终目标。这可以是当前工作目录的相对路径或绝对路径。
$this->taskBuildAsset('/where/do/you/want/me');
资产类型
任务很智能,它会根据文件扩展名检测你正在尝试构建的资产类型。不言而喻,你 不能 在一个构建任务中混合资产类型。
例如,以下是不合法的
$this->taskBuildAsset('script.js')->source('styles.css')->run();
资产源
任务需要知道将用于构建最终资产的源文件。
你可以通过多种方式提供源文件。
-
单个源文件
最简单的资产是只有一个源文件的资产。这只会将unbuilt.js
通过配置的 Js Minifier 运行。$this->taskBuildAsset('built.js')->source('unbuilt.js')->run();
-
单个源文件夹
你可以定义一个文件夹而不是源文件。任务将搜索与目标文件具有相同扩展名的文件夹中的文件。$this->taskBuildAsset('built.css')->source('/my/styles')->run();
注意:文件夹内的文件按名称排序。因此,你可以通过在每个源文件前添加数字索引来操作文件连接的顺序。
-
多个源
你可以提供任何源文件和/或文件夹的数组。$this->taskBuildAsset('built.js')->source ([ '/js/jquery.js', '/js/jquery/plugins', '/js/main.js' ])->run();
-
Symfony Finder
最后一个选项是提供您自己的配置好的 Finder 实例。$this->taskBuildAsset('built.js') ->source ( (new Finder) ->files() ->in('/path/to/assets') ->name('*.js') ->sortByName() ) ->run();
有关 Finder 的文档,请参阅: https://symfony.ac.cn/doc/current/components/finder.html
Css 转换
如果您正在构建一个CSS资源,这会自动为您完成。任何检测到带有 less
或 scss
文件扩展名的源文件都将使用以下之一进行转换:
注意:您不能提供包含less或scss文件的文件夹。如果您确实有一个这样的源文件文件夹,您可以配置一个Finder实例来查找这些文件。每个文件都将单独转换,然后输出结果连接在一起。
Js转换
为了节省未来的问题,我认为没有必要支持如TypeScript 或 Babel,因为,为了运行这两个转换器,您必须安装 node。
如果您有node,并且您正在使用TypeScript或ES6进行编程,那么您可能已经在使用某种js打包器了。
更新 2017-03-16: 发现了一个有趣的项目 v8js。这可以在纯PHP环境中运行像babel这样的工具。查看 php-babel-transpiler。
然而,由于插件的安装障碍(需要处理v8等编译),似乎直接使用node.js会更容易。
Docker可能提供了解决安装问题的方案,但使用此包的项目(主要是wordpress网站)尚未在Docker上运行,可能永远不会。
尽管我很想将此转变为2017年PHP的终极资源构建管道,但事实是,直接使用为前端构建设计的工具比尝试将它们塞入PHP生态系统更有意义。
因此,此包将保持原样,提供一种较老式的、但成熟且简单的资源构建管道。如果项目需要任何复杂的功能,如ES6、TypeScript或React,那么还有其他工具,如 Browserify、Webpack 和 RollupJs,它们会比在PHP中构建的任何东西都做得更好。
选项
-
调试
默认情况下,任务将始终压缩您的CSS或js资源。如果您只想构建资源(这只会连接源文件),您可以设置调试为true,如下所示$this->taskBuildAsset(...)->source(...)->debug(true)->run();
-
gzip
可选地,任务可以创建最终资源的gzip版本。这样,Web服务器可以配置为提供预压缩的文件版本,而不是即时压缩文件。$this->taskBuildAsset(...)->source(...)->gz(true)->run();
-
自动前缀
如果正在构建CSS资源,任务将在输出文件之前自动运行css autoprefixer。自动前缀解析CSS,并使用来自https://caniuse.cn/的值添加供应商前缀到CSS规则。要关闭此功能
$this->taskBuildAsset(...)->source(...)->autoprefix(false)->run();
-
模板
这是一个缓存破坏功能。如果您提供了有效的HTML模板文件路径,任务将使用当前Unix时间戳在基本名称和扩展名之间保存最终的资源。例如:
script.1456298250.js
然后它将在模板文件中搜索和替换对资产的任何引用。任务很智能,使用正则表达式。因此,如果模板中包含没有时间戳的资产名称或包含先前构建的时间戳的资产名称,它仍然会更新引用。
$this->taskBuildAsset(...)->source(...)->template('view.html')->run();
注意:模板不必严格是HTML文件。它可以任何基于文本的文件。因此,它可以与Laravel Blade、Twig、Plates、Foil等视图框架正常工作。
由Brad Jones开发 - brad@bjc.id.au