dejvidecz/assets

Nette 框架模块化资产系统的分支

1.0.3 2022-02-14 21:58 UTC

This package is auto-updated.

Last update: 2024-09-15 03:49:58 UTC


README

Build Status Donate

Nette 框架的简单模块化资产系统。

安装

$ composer require dejvidecz/assets
$ composer update

然后只需在您的 config.neon 中启用 nette 扩展

extensions:
	assets: Carrooi\Assets\DI\AssetsExtension

配置

extensions:
	assets: Carrooi\Assets\DI\AssetsExtension

assets:
	
	front:
		css:
			compiler: css
			paths:
				- %appDir%/../www/css/style.css
				- [mask: '*.css', from: %appDir%/../www/css/components]
				- [mask: '*.css', in: %appDir%/../www/css/core]
			target: %appDir%/../www/public/style.css
			publicPath: /public/style.css

		js:
			compiler: js
			paths:
				- %appDir%/../www/js
			target: %appDir%/../www/public/web.js
			publicPath: /public/web.js

现在我们有一个名为 front 的命名空间,其中包含两个资源 cssjs。您可以根据需要创建任意数量的命名空间或资源,并指定任意名称。

每个资源都需要其编译器、编译路径以及带有公共路径的目标构建文件。

  • 编译器:目前仅限 cssjs。也可以是自定义编译器类的名称
  • 路径:文件、目录或配置的名称,用于 nette/finder
  • 目标:文件系统中的结果文件路径
  • PublicPath:浏览器可访问的构建文件路径

用法

namespace App\Presenters;

use Nette\Application\UI\Presenter;

class BasePresenter extends Presenter
{

	/**
	 * @var \Carrooi\Assets\UI\IAssetsControlFactory
	 * @inject
	 */
	public $assetsControlFactory;


	/**
	 * @return \Carrooi\Assets\UI\AssetsControl
	 */
	protected function createComponentAssets()
	{
		return $this->assetsControlFactory->create();
	}

}
{control assets, front, css}

这将合并我们注册的所有 CSS 文件到一个文件中,并通过我们的组件添加到模板中。

过滤器

public function __construct(\Carrooi\Assets\Assets $assets)
{
	$resource = $assets->getResource('front', 'css');
	$resource->getCompiler()->addFileFilter(function($file) {
		return "/* Author: John Doe */\n". $file;
	});
}

此文件过滤器将在每个编译文件前添加作者的名称。

或者,也有针对最终构建文件的过滤器。

public function __construct(\Carrooi\Assets\Assets $assets)
{
	$resource = $assets->getResource('front', 'css');
	$resource->addFilter(function($file) {
		return "/* Built with Carrooi/Assets */\n". $file;
	});
}

此过滤器将在目标文件开头添加 "Built with Carrooi/Assets" 文本。

添加路径

public function __construct(\Carrooi\Assets\Assets $assets)
{
	$resource = $assets->getResource('front', 'css');
	$resource->addPath(__DIR__. '/../../widget.css'); // just like in neon configuration
}

CompilerExtension

您的编译器扩展也可以实现 \Carrooi\Assets\DI\IAssetsProvider 接口以进行一些额外的配置。

namespace App\DI;

use Carrooi\Assets\DI\IAssetsProvider;
use Nette\DI\CompilerExtension;

class AppExtension extends CompilerExtension implements IAssetsProvider
{


	/**
	 * @return array
	 */
	public function getAssetsConfiguration()
	{
		return [
			'front' => [
				'css' => [
					'paths' => [
						__DIR__. '/../widget.css',
					],
				],
			],
		]
	}

}

变更日志

  • 1.0.0

    • 第一个版本
  • 1.0.1

    • IAssetsProvider::getAssetsFiles() 已重命名为 ::getAssetsConfiguration() [向后不兼容]
  • 1.0.2

    • 优化依赖项
    • 移除未使用的异常
    • 优化文件修改检查