abm/sassphp

PHP 对 libsass 的绑定 - PHP 中的快速原生 Sass 解析!

0.7 2020-01-31 05:16 UTC

This package is auto-updated.

Last update: 2024-09-21 15:13:34 UTC


README

PHP 的 sass 扩展为您提供了在 PHP 应用程序中解析 Sass 的面向对象系统。底层使用 libsass 提供快速且兼容的 Sass 解析。

Libsass 3.6.3 Build Status codecov Patreon

什么是 Sass?

Sass 是一种 CSS 预处理器语言,它为 CSS 添加了令人兴奋、新颖、出色的功能。Sass 是这一类语言中的第一种语言,也是迄今为止最成熟和最新的代码库。

Sass 最初由 Hampton Catlin (@hcatlin) 创建。该语言的扩展和持续发展都是 Natalie Weizenbaum (@nex3) 和 Chris Eppstein (@chriseppstein) 多年工作的结果。

有关 Sass 自身的更多信息,请访问 https://sass-lang.cn

安装

目前,安装该扩展的唯一方式是手动

$ git clone git://github.com/absalomedia/sassphp

请记住获取您的子模块

$ git submodule init
$ git submodule update

同时请记住,libsass 现在也使用自己的子模块,因此也需要更新这些。

...然后编译它!我已经编写了一个小 PHP 脚本来执行您需要执行的所有操作

$ php install.php

运行测试

$ make test

最后,您可以使用 make 进行安装

$ make install

然后将它添加到您的 php.ini

extension=sass.so

请始终记得在 PHP 中启用它

phpenmod sass

二进制安装/部署

只要您有最终的 'sass.so' 扩展文件,就可以在任何服务器上部署 SASS PHP。当然也有一些注意事项。开发环境和生产服务器必须运行相同版本的 PHP。然后,将开发环境中的 /usr/lib/php/ 目录下显示的已安装 'sass.so' 复制到生产服务器上的同一目录。

像往常一样,请确保您将扩展添加到您生产环境中的 php.ini

extension=sass.so

请始终记得在 PHP 中启用它

phpenmod sass

使用方法

此扩展具有非常简单的 API

$sass = new Sass();
$css = $sass->compile($source);

您可以使用 compileFile() 编译文件

$sass = new Sass();
$css = $sass->compileFile($source);

您可以设置库的包含路径

$sass = new Sass();
$sass->setIncludePath('/tmp');
$css = $sass->compile($source);

您可以设置 SASS 文件的样式以适应您的需求

$sass = new Sass();
$sass->setStyle(Sass::STYLE_NESTED);

$sass = new Sass();
$sass->setStyle(Sass::STYLE_EXPANDED);

$sass = new Sass();
$sass->setStyle(Sass::STYLE_COMPACT);

$sass = new Sass();
$sass->setStyle(Sass::STYLE_COMPRESSED);

随着 Libsass 库的成熟,接近 100% 的 SASS 覆盖率,因此此扩展也趋于成熟

  • 当指定源映射文件时,SASS 文件编译是一个数组
  • 定义源注释的能力
  • 将源映射嵌入到 CSS 输出的能力
  • 指定 .SASS 文件输入而不是 .SCSS 的能力
  • 设置源映射路径的能力,当生成专用的 .map 文件时是必需的
  • 为源映射本身定义根目录的能力
  • SASS 导入器和函数功能
  • 支持 PHP 7.0 到 PHP 7.4,并对 PHP 8 进行了测试

当创建源映射文件时,compileFile() 的输出是一个数组,允许在同一个函数调用中生成编译后的 SASS 文件和 .map 文件。

由于生成源注释有多种方式,现在有了PHP级别的设置来控制输出。

为了在文件内生成源注释

$sass = new Sass();
$sass->setComments(true);
$css = $sass->compileFile($source);

别名也存在,所以你还可以使用

$css = $sass->compile_file($source);

你可以告诉编译器使用缩进语法(SASS语法)。默认情况下它期望SCSS语法

$sass = new Sass();
$sass->setIndent(true); //TRUE -> SASS, FALSE -> SCSS
$css = $sass->compile($source);

你可以告诉编译器将源映射嵌入到实际的CSS文件中

$sass = new Sass();
$sass->setEmbed(true);
$css = $sass->compile($source);

你可以设置库使用的源映射文件

$sass = new Sass();
$sass->setMapPath('/random.output.css.map');
$css = $sass->compileFile($source);

这需要在获取映射文件输出之前完成。目前,SASS文件编译的输出和SASS源映射文件生成序列都是字符串。

第一个数组项始终是编译后的SASS文件:$css[0]

第二个数组项始终是源映射输出:$css[1]

你可以这样设置生成的源映射文件的根目录

$sass = new Sass();
$sass->setMapRoot('/some/dir');
$sass->setMapPath('/random.output.css.map');
$css = $sass->compileFile($source);

如果有问题,扩展将抛出SassException

$sass = new Sass();

try
{
    $css = $sass->compile('dayrui3dui36di37');
}
catch (SassException $e)
{
    // $e->getMessage() - ERROR -- , line 1: invalid top-level expression

    $css = FALSE;
}

变体构建

这些扩展也利用了Libsass库,并且处于不同的完成状态

  • Facebook HHVM本地(非Zend)扩展 - 使用Libsass 3.5.5 - 测试到HHVM 3.11.x
  • Nginx模块 - 使用Libsass 3.5.5

变更日志