如何将项目的CSS文件编译成一个文件

时间:2015-02-25 23:46:19

标签: ember.js ember-cli broccolijs

默认情况下,ember-cli似乎设置为不将css文件编译成一个(与JS文件一样)。

配置ember-cli以将app/styles(和子目录)中的所有文件合并为一个app.css文件(然后是指纹等)的最佳方法是什么?这可以通过Brocfile实现,还是需要覆盖EmberApp.styles()


更新:据我所知,有以下(不是很优雅)选项:

1)单独将SASS和@import CSS文件用于app.scss。这样做的缺点是我需要使用额外的插件(SASS),并且SASS似乎不允许@import中的通配模式(例如@import('**/*.scss')),这使得这个解决方案对于大型项目来说很麻烦

2)覆盖EmberApp.styles(),使其不复制CSS文件(这当前由broccoli-static-compiler的包装器完成)并配置Broccoli使其将css文件连接到{{1 }}。这个解决方案看起来有些笨拙,并且存在与较新版本的ember-cli不兼容的风险。

3)解决方法:使用app.cssbroccoli-funnel自行进行连接。

在Brocfile.js中:

broccoli-concat

这将在var appTree = app.toTree() var concatenated = concat(appTree, { inputFiles: [ '**/*.css' ], outputFile: '/assets/app.css', }); module.exports = mergeTrees([appTree, concatenated], { overwrite: true }); 中创建一个包含所有连接CSS的新app.css。但是,此文件不是指纹识别的。我们的资产目录现在看起来像这样:

/assets/app.css

所以 - 不可否认 - 第二步是1)获取指纹/assets/app.css /assets/app-<fingerprint>.css 的文件名,2)删除app-<fingerprint>.css和3)将app.css重命名为app-<fingerprint>.css。最后一步可以使用Grunt或gulp自动完成。

1 个答案:

答案 0 :(得分:1)

就我个人而言,我认为SCSS将是一个不错的选择。这是最简单的解决方案,除了将内容导入一个文件(例如,重复模式的变量)之外,使用SCSS还有其他优点。

此外,手动添加文件使开发人员可以精确配置包含每段代码的位置。我不认为这是一个弊端,但是我可以理解另一种观点,我肯定花了500万美元试图弄清楚为什么未应用我的样式,直到我意识到这是因为我没有包括新样式文件。

编辑:如果这是一个大秀场阻止者,那么可能会添加一些可用的node-sass globing解决方案。