默认情况下,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.css
和broccoli-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自动完成。
答案 0 :(得分:1)
就我个人而言,我认为SCSS将是一个不错的选择。这是最简单的解决方案,除了将内容导入一个文件(例如,重复模式的变量)之外,使用SCSS还有其他优点。
此外,手动添加文件使开发人员可以精确配置包含每段代码的位置。我不认为这是一个弊端,但是我可以理解另一种观点,我肯定花了500万美元试图弄清楚为什么未应用我的样式,直到我意识到这是因为我没有包括新样式文件。
编辑:如果这是一个大秀场阻止者,那么可能会添加一些可用的node-sass globing解决方案。