carrooi/assets

Nette 框架的模块化资源系统

1.0.2 2015-01-26 14:20 UTC

This package is auto-updated.

Last update: 2024-09-06 03:51:44 UTC


README

Build Status Donate

为 Nette 框架提供的简单模块化资源系统。

安装

$ composer require carrooi/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;
	});
}

此过滤器将“使用 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

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