Java的SASS实现? [关闭]

Posted

技术标签:

【中文标题】Java的SASS实现? [关闭]【英文标题】:SASS implementation for Java? [closed] 【发布时间】:2010-12-17 14:42:31 【问题描述】:

我正在寻找 Java 中的 SASS 实现(可以与 JSP/JSF 一起使用)。对于 Python,我找到了 CleverCSS,但对于 Java 则没有。有人听说过这种用于生成 CSS 的工具吗?

【问题讨论】:

SASS/SCSS 是用 Ruby 开发的。要获得最佳和最新的功能,最好使用 Ruby,然后使用 Java 中的本机实现。本地实现也将落后于最新和最好的。 @Joepie,对我来说,减少依赖比拥有最新版本更重要。目前的 SASS/SCSS 足以满足我的需求。我只是想要一种轻量级的方式来使用它。 另外,仅仅因为某些东西不是“本机”实现并不意味着它会自动过时。可以使用机器翻译,或者一位热心的开发人员可以使其保持最新状态。 【参考方案1】:

使用 ANT:

    下载JRuby完整jar文件(JRuby Complete jar download page) 下载最新的 HAML/SASS 代码 (HAML/SASS tarball),并解压。放入“/libs/sass-[VERSION]” 将以下内容添加到 ant 构建文件中。 将脚本中的[VERSION]替换为JRuby和SASS的对应版本 运行ant脚本,编译sass或scss文件!

<path id="JRuby">
    <fileset file="libs/jruby-complete-[VERSION].jar"/> <!-- Location of JRuby jar file -->
</path>  

<target name="compileSCSS">
    <echo message="Compiling scss files..." />
    <property name="filesIn" value="$dir.css/scss/**/[^_]*.scss" />
    <property name="fileOutDir" value="/$dir.css/$dir.css.build" />
    <script language="ruby" classpathref="JRuby">
        <![CDATA[
            require 'libs/sass-[VERSION]/lib/sass'
            require 'sass/exec'

            files = Dir.glob($project.getProperty('filesIn'))
            Dir.mkdir($project.getProperty('fileOutDir')) unless File.exists?($project.getProperty('fileOutDir'))
            files.each do 
                | file |
                puts "     [sass compiler] " + file + " -> " + $project.getProperty('fileOutDir') + "/" + File.basename(file, ".*") + ".css"
                opts = Sass::Exec::Sass.new(["--load-path", File.dirname(file), file, File.join($project.getProperty('fileOutDir'), File.basename(file, ".*") + ".css")])
                opts.parse
            end
        ]]>
    </script>
    <echo message="Done compiling scss files!" />
</target>

使用 MAVEN:

Maven 也可以这样做: 使用antrun插件:

<project>
<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>compileAndMinify</id>
            <phase>compile</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <mkdir dir="$project.build.directory/compiled" />

                    <echo message="Compiling scss files..."/>
                    <path id="JRuby">
                        <fileset file="$basedir/jars/jruby-complete-[VERSION].jar"/>
                    </path>
                    <property name="filesIn" value="$project.build.directory/css/**/[^_]*.scss" />
                    <property name="fileOutDir" value="$project.build.directory/compiled/css" />
                    <script language="ruby" classpathref="JRuby">
                        <![CDATA[
                            require 'libs/sass-[VERSION]/lib/sass'
                            require 'sass/exec'

                            files = Dir.glob($project.getProperty('filesIn'))
                            Dir.mkdir($project.getProperty('fileOutDir')) unless File.exists?($project.getProperty('fileOutDir'))
                            files.each do 
                                | file |
                                puts "     [sass compiler] " + file + " -> " + $project.getProperty('fileOutDir') + "/" + File.basename(file, ".*") + ".css"
                                opts = Sass::Exec::Sass.new(["--load-path", File.dirname(file), file, File.join($project.getProperty('fileOutDir'), File.basename(file, ".*") + ".css")])
                                opts.parse
                            end
                        ]]>
                    </script>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>
</plugins>
</build>
</project>  

【讨论】:

是否也可以通过 Maven 实现? 你在哪里提取 haml/sass 存档?我是否需要将它放在 JRuby 的 gemfiles 中,或者我可以以某种方式直接引用它们?也就是说,不使用 JRuby 安装程序,只使用 jar。谢谢! 第一个 require "require 'libs/sass/lib/haml'" 是相对于你的项目文件夹的路径。 由于某种原因,require 'libs/sass-[VERSION]/lib/sass' 对我来说不是相对的,我不得不从我手头的财产中取出绝对值。所以它与require $project.getProperty('project.root') + '/sass/sass-3.2.9/lib/sass'一起工作 嗨 Joepie,指向 HAML/SASS 的链接似乎已失效,如果可能,您能否更新链接?【参考方案2】:

ZUSS 是 LESS 和 SASS 的一个很好的替代品。它类似于 LESS。与 LESS 和 SASS 不同,ZUSS 文件的处理不需要 javascript 解释器。

免责声明:我是 ZUSS 的开发者。我开发它只是因为我找不到适用于 Java 的简洁解决方案。

【讨论】:

IMO,Zuss最适合Java环境,比如Java方法调用、变量解析器和资源定位器。 哇,不错的解决方案。我会在未来的 Java 项目中考虑这个!非常好。在使用 servlet 时,您是否有更多关于缓存的信息?文档并不清楚...使用 servlet 时编译步骤有多快? 默认 servlet 不提供任何缓存。如果你喜欢,请延长它。 GitHub 位置:github.com/tomyeh/ZUSS; Maven 仓库:mvnrepository.com/artifact/com.github.tomyeh/zuss/…【参考方案3】:

有一个项目:http://code.google.com/p/jsass/(但处于非常早期的阶段)。

如果你对 Less 感兴趣,这里有一个现成的 Java 版本:http://www.asual.com/lesscss/

【讨论】:

我只是为了了解更多信息才这么说,上面的项目使用 rhino 来运行一个 javascript 文件。 jsass 看起来像废弃软件。赞成 asual 的 lesscss-servlet【参考方案4】:

您还可以查看Web Resource Optimizer 4 J (WRO4J),它允许做很多事情(缩小、资源合并)并支持 Less CSS(据我所知在运行时)。

这意味着:您将 wro4j 过滤器添加到您的 web.xml 中,当您请求 CSS 时,您的 .scss(或 .saas)文件将被编译为标准 CSS。

我还没有使用过,但它似乎比这里列出的其他产品更先进。


事实上,我在 Less for Java 网站 (http://www.asual.com/lesscss/) 上阅读 cmets,WRO4J 使用这个库来提供它的“动态 Less 编译”。所以我认为 Less for Java 是可行的方法。

【讨论】:

【参考方案5】:

您知道 Vaadin Web 框架带有它自己的内置 Sass 编译器吗?见https://vaadin.com/blog/-/blogs/state-of-sass-support-in-vaadin-7-today ...

【讨论】:

【参考方案6】:

我个人觉得 SASS 语法很深,非常烦人。对于 Ruby / Python 人群来说,它可能是第二天性;对我作为 Java 人来说 - 不是那么多。我强烈更喜欢LESS,它建立在 CSS 语法之上,而不是提出新的语法。这有一个很好的附加优势,即能够“按原样”使用现有的 CSS 文件并根据需要合并 LESS 功能。

也就是说,据我所知,SASS 和 LESS 都没有 java 端口。但是,两者都是基于 ruby​​ 的,因此您可以将它们安装在 JRuby 下。这种方法的唯一问题是 JRuby 的启动速度非常慢。不过,这并不是什么大问题,因为您可能会在开发中使用文件监控(一旦启动,它就会运行得非常顺畅),而且您不会太在意在部署期间构建需要多几秒钟的时间.

还有一些基于 php 的实现,例如 LessPhp、xCSS 等。不过,还没有亲自尝试过。

【讨论】:

Sass 语法已经被淡化:它现在很像没有括号的 CSS。即将发布的 Sass 版本将允许使用可选括号。 Sass 的一个优点是编译器和工具比 Less 对应物要成熟得多。 IntelliJ 9 支持 Sass(安装 Ruby 插件即可获得)。我们从 Less 切换到 Sass 主要是为了对编辑器的支持。我现在比 Less 更喜欢它(父引用 '&' 是无价的) css2sass 工具使转换 css 文件变得非常容易 - 它还会在可能的情况下嵌套选择器。我们转换了一个大型项目,没有遇到任何问题。 我也讨厌 sass 语法。据说更容易查看,但大括号对​​我来说更容易。 顺便说一句,现在有使用大括号的 SCSS 语法。【参考方案7】:

似乎毕竟有一个(可能在提出这个问题后开发了一段时间)

https://github.com/Jasig/sass-maven-plugin

【讨论】:

遗憾的是它引入了 jRuby:&lt;dependency&gt;&lt;groupId&gt;org.jruby&lt;/groupId&gt;&lt;artifactId&gt;jruby-complete&lt;/artifactId&gt;&lt;version&gt;1.6.7.1&lt;/version&gt;&lt;/dependency&gt; 我更喜欢没有任何依赖关系的东西。 @SamHasler 明白了,为什么你更喜欢不依赖呢?除了它会改变许可证/破坏/膨胀你的代码库的机会之外,甚至 maven 本身也有大量的依赖关系......任何好的东西实际上都有很多依赖关系,这是开源的好处的一部分,不是吗? 如果我的某个依赖项中的某些内容出现故障,我希望能够自行修复它。我不了解 ruby​​,所以我更喜欢不是建立在它之上的东西。 Ruby 很棒 :) 我是 Java 人,学习 Ruby 是我最近做过的最有趣的事情之一...... 这里是 sass-maven-plugin 的作者。除非有人用 Java 完全重写 SASS,否则总是需要 jRuby。这明显更加稳定,因为 maven 插件正在使用提供的工具中使用的相同 SASS 代码。【参考方案8】:

鉴于必须将 SASS 转换为 CSS 才能使用,使用与 Ruby SASS 一起分发的 sass2css 有什么问题?

【讨论】:

【参考方案9】:

你可以试试我刚刚整理的这个过滤器 - https://github.com/darrinholst/sass-java

【讨论】:

【参考方案10】:

我在使用 Ant 的 Eclipse 项目中使用 Compass & Sass。

我在这里学习了这个教程:

http://caueguerra.com/tutorial-using-sass-in-a-java-project

Compass 扩展了 Sass 并允许我的其他附加功能。

http://compass-style.org/

【讨论】:

链接失效了。【参考方案11】:

我知道我迟到了,但这是我在具有 Ant 构建的 Java 项目中使用 SASS 的方法: http://workingonthecoolstuff.blogspot.com/2011/02/using-sass-in-ant-build.html 总而言之,我在安装了 Ruby 和 Sass 的机器上进行构建,所以它就像使用 Ant“应用”任务调用 sass 命令/应用程序一样简单,文件集包含所有 SCSS/SASS 文件.

【讨论】:

【参考方案12】:

Sassc 是 C 中的命令行实现,应该很容易添加到构建过程中。根据作者,我认为它应该与 sass 保持同步:

Sass 最初是由这个库的共同创建者 Hampton Catlin (@hcatlin) 创建的。该语言的扩展和持续发展都是 Nathan Weizenbaum (@nex3) 和 Chris Eppstein (@chriseppstein) 多年努力的结果。

【讨论】:

以上是关于Java的SASS实现? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Vue + Sass 实现简单的换肤功能

实现选项必须传递给 Sass 任务

实现 sass-loader webpack 时出错

使用 dart sass 实现,grunt-sass 不编译 css 文件而不抛出错误

如何实现 SASS 以与原始 webpack 做出反应?

SASS @at-root,然后 LESS 啥来实现同样的功能