我想知道如何为Angular 2项目添加更少的编译。因为每个组件都有自己的.css文件(现在它将是.less文件)我不知道如何将文件编译成css ...
我也搜索了这个问题而没有找到解决问题的方法。
EDIT 让我的问题更清楚: 我希望每个组件都有一个.less,就像它在Angular 2中的.css文件一样默认。我只想要每个.less都要预编译,并且因为Angular将css包含在组件之后的内联脚本中由Angular处理,我想我需要一些较少的预处理脚本,它是否存在?
对于整个项目,我宁愿没有一个大的.less文件包含手册,这当然是一个可能的解决方案。虽然这个解决方案似乎不符合Angular环境......
答案 0 :(得分:27)
新项目
您可以使用--style
标志来设置CSS预处理器
ng new my-app --style less
现有项目
.angular-cli.json
文件并将defaults.styleExt
值设置为less
。或者您可以使用:ng set defaults.styleExt less
mycomp/mycomp.component.css
重新命名组件的CSS文件 - > mycomp/mycomp.component.less
styleUrls
中的mycomp/mycomp.component.ts
,例如styleUrls: ['./mycomp.component.css']
- > styleUrls: ['./mycomp.component.less']
答案 1 :(得分:18)
如果您要创建新应用,请在应用名称后添加--style
以选择预处理器。
ng new my-first-app --style less
答案 2 :(得分:9)
LESS(或SASS)是CSS预处理器,因此您需要将它们基本上编译为CSS。一种非常流行的方法是使用基于Grunt,Gulp,Brunch或Broccoli的JavaScript任务运行器。
这里有example直接从Broccoli入门页面。
npm install -g broccoli-cli
npm install --save-dev broccoli
npm install --save-dev broccoli-sass broccoli-merge-trees
broccoli build dist
示例Brocfile.js文件
/* Brocfile.js */
// Import some Broccoli plugins
var compileSass = require('broccoli-sass');
var mergeTrees = require('broccoli-merge-trees');
// Specify the Sass and Coffeescript directories
var sassDir = 'app/scss';
// Tell Broccoli how we want the assets to be compiled
var styles = compileSass([sassDir], 'app.scss', 'app.css');
// Merge the compiled styles and scripts into one output directory.
module.exports = mergeTrees([styles, scripts]);enter code here
顺便说一句:您可以轻松切换SASS以获得
答案 3 :(得分:1)
您仍然可以使用包含所有组件的所有样式规则的单个.css
,并在每个组件中导入相同的.css
文件(您必须使用选择器/标记名称而不是{ {1}})。浏览器无论如何都会缓存文件,因此它只会下载一次。
虽然小范围:host {
文件的优点已经丢失。
我不了解Less但是对于SASS我当前正在开发一个自定义导入器,其中导入路径可以带有id / name前缀,并且自定义导入器在本地检查是否覆盖了该id / name已定义并返回此值,否则导入将恢复为默认值 这样组件的创建者可以提供覆盖挂钩,用户可以在其中传递自己的变量,mixin,而不是构建时的默认值。