默认情况下,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 文件(目前由. 不过,这个解决方案似乎有点老套,并且存在与新版本的 ember-cli 不兼容的风险。broccoli-static-compiler
app.css
3) 解决方法:使用broccoli-funnel
andbroccoli-concat
自己进行连接。
在 Brocfile.js 中:
var appTree = app.toTree()
var concatenated = concat(appTree, {
inputFiles: [
'**/*.css'
],
outputFile: '/assets/app.css',
});
module.exports = mergeTrees([appTree, concatenated], { overwrite: true });
app.css
这将使用我们所有连接的 CSS 在.However 中创建一个新/assets/app.css
文件。但是,该文件没有指纹。我们的资产目录现在看起来像这样:
/assets/app.css
/assets/app-<fingerprint>.css
所以 - 公认的 hacky - 第二步是 1)获取指纹的文件名app-<fingerprint>.css
,2)删除app-<fingerprint>.css
和 3)将 app.css 重命名为app-<fingerprint>.css
. 最后一步可以使用 Grunt 或 gulp 自动化。