【问题标题】:How to add broccoli-compass to ember-cli v0.0.28?如何将 broccoli-compass 添加到 ember-cli v0.0.28?
【发布时间】:2014-06-05 09:51:59
【问题描述】:

我希望能够在 ember-cli 项目中使用 compass 将我的 SASS 预处理为 CSS。

使用broccoli-sass 执行此操作很简单,因为只需要bower install broccoli-sass,因为已经内置了对它的支持。

但是,使用broccoli-compass 执行此操作非常棘手……如何?


详情:

这个问题之前有人问过,for ember-cli v0.0.23; 它的答案似乎已经过时了- 主要问题似乎是 ember-cli 抽象了Brocfile.js 中的许多内容,并使用Registry 将其放入另一个文件preprocessor.js,因此解决方案与标准外观不同Brocfile.js


更新:

@saygun 已经回答了这个问题,解决方案允许使用 broccoli-compass 编译 SCSS --> CSS。但是有几点需要注意:

  • 小问题:meber-cli 中现有的minifyCss 预处理器将不起作用。您需要配置 compass 以缩小自己的 CSS。
  • 主要问题:如果 SCSS 文件引用图像,则生成的 CSS 文件包含指向图像的链接,其中路径位于 Broccoli 创建的临时树文件夹中。我不知道如何解决这个问题,并提出了一个后续问题:How to generate image sprites in ember-cli using compass?

【问题讨论】:

  • @JordyLangen 在项目文件夹中,找到node_modules/ember-cli/lib/preprocessors.js,我找到了这个Registry系统。我试图向其中添加一个新函数(modules.exports.preprocessCompass = function...),但只是得到了一些相当神秘的堆栈跟踪......所以不是很远。我将在下面尝试@saygun 的建议。
  • @JordyLangen 我在这个issue on github 中更详细地介绍了一些细节,尽管在这种情况下,它并不特定于broccoli-compass,而是关于添加在main Brocfile.js 并使其与preprocessors.js 中的内置功能很好地集成。

标签: javascript ember.js compass-sass ember-cli broccolijs


【解决方案1】:

我最近发布了 ember-cli-compass-compiler,这是一个 ember-cli 插件,适用于较新的 ember-cli 应用 (>= 0.0.37)。

只需使用命令安装:

npm install --save-dev ember-cli-compass-compiler

不需要其他配置,它将app/styles/appname.scss正确转换为appname.css。顾名思义,除了 sass 之外,它还允许您使用 Compass。

【讨论】:

  • 对于最近的项目,这就是要走的路。这对 ember-cli 0.1.1 项目立即起作用。
【解决方案2】:

你需要安装broccoli-compass:

npm install broccoli-compass --save-dev

你需要安装 ruby​​ gem sass-css-importer:

gem install sass-css-importer --pre

然后在您的 brocfile 中执行以下操作:

var compileCompass = require('broccoli-compass');

app.styles = function() {
  var vendor = this._processedVendorTree();
  var styles = pickFiles(this.trees.styles, {
    srcDir: '/',
    destDir: '/app/styles'
  });

  var stylesAndVendor = mergeTrees([vendor, styles, 'public']);

  return compileCompass(stylesAndVendor, 'app' + '/styles/app.scss', {
    outputStyle: 'expanded',
    require: 'sass-css-importer',
    sassDir: 'app' + '/styles',
    imagesDir: 'images',
    fontsDir: 'fonts',
    cssDir: '/assets'
  });
};

【讨论】:

  • +1 并检查 - 非常感谢您解决所有这些问题。为了使其正常工作,需要进行一些额外的调整,但对于so here's a gist 的评论来说太长了。
  • ... 但总之app.scss 不起作用,请改用*.scss。另外,你是怎么想出来的?我找不到app.styles 和_processedVendorTree() 的文档。
  • @saygun - 当 SCSS 文件引用图像文件时,此解决方案似乎不起作用 - 输出 CSS 中的 URL 包含临时树文件。如果可以,请查看我对此的后续问题:stackoverflow.com/q/24074351/194982
  • 如果它对其他人有帮助:我最终不得不通过指南针代码本身进行调试,以查看它是如何解析路径的。这看起来很老套而且很耗时,所以如果对你不起作用,请检查那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
相关资源
最近更新 更多