jow*_*wey 5 sass angular-cli angular
Angular CLI提供了在构建项目时替换文件的可能性。我想使用此功能将默认样式的SCSS文件替换为包含客户特定CSS的SCSS文件。
但是Angular CLI似乎不能替换SCSS文件。我怎样才能做到这一点?
我尝试过的
environment.default.ts
export const environment = {
name: 'default'
};
Run Code Online (Sandbox Code Playgroud)
环境特殊
export const environment = {
name: 'special'
};
Run Code Online (Sandbox Code Playgroud)
默认/_scss-config.scss
@debug ('default'); // gets called but should never be called
Run Code Online (Sandbox Code Playgroud)
特殊的/_scss-config.scss
@debug ('special'); // never gets called
Run Code Online (Sandbox Code Playgroud)
angular.json(仅相关部分)
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"fileReplacements": [
{
"replace": "src/environments/environment.default.ts",
"with": "src/environments/environment.special.ts"
},
{
"replace": "src/scss/default/_scss-config.scss",
"with": "src/scss/special/_scss-config.scss"
}
],
"stylePreprocessorOptions": {
"includePaths": [
"src/scss/default"
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
主要
import { environment } from './environments/environment.default';
console.log(environment.name); // 'special' --> replacement works!
Run Code Online (Sandbox Code Playgroud)
结果:可以用
文件替换.ts文件,但不能用.scss文件替换,因为永远不会调用特殊的调试语句,但是默认情况下,即使文件已经被重新放置,它也不会被调用。
jow*_*wey 10
Angular.io指出:
CLI的主要配置文件angular.json可让您用该文件的目标特定版本替换任何文件。
这实际上是愿景,但是根据此GitHub线程,目前还不正确。
看来,到目前为止,只有.ts和.html文件都支持。
因此,当前问题的答案是“否”,尚无法替换SCSS文件。
但是有一个解决方法:
可以使用不同的配置angular.json来实现相同的目标-替换SCSS文件。
文件夹结构:
src/
scss/
default/
_scss-config.scss
special/
_scss-config.scss
Run Code Online (Sandbox Code Playgroud)
src / scss / default / scss-config.scss
body { background-color: blue; }
Run Code Online (Sandbox Code Playgroud)
src / scss / special / scss-config.scss
body { background-color: red; }
Run Code Online (Sandbox Code Playgroud)
angular.json
<!-- language: lang-json -->
{
[...]
"architect": {
"build": {
"options": {
"stylePreprocessorOptions": {
"includePaths": [
"src/scss/default"
]
}
},
"configurations": {
"default": {
"stylePreprocessorOptions": {
"includePaths": [
"src/scss/default/"
]
}
},
"special": {
"stylePreprocessorOptions": {
"includePaths": [
"src/scss/special/"
]
}
}
}
},
"serve": {
"configurations": {
"default": {
"browserTarget": "angular-scss-replacement:build:default"
},
"special": {
"browserTarget": "angular-scss-replacement:build:special"
}
}
}
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
style.scss或component.scss
@import 'scss-config';
/* use your SCSS variables and stuff as you normally would */
Run Code Online (Sandbox Code Playgroud)
请注意,您不得_在import语句中包含文件名中的(下划线)
(有关更多详细信息,请参阅Partials部分)
如何使用它:
// 'ng serve'-command uses default configuration as defined in angular.json > build
ng serve
// default config creates blue background
ng serve --configuration=default
// specail config create red background
ng serve -c=special
Run Code Online (Sandbox Code Playgroud)
(此解决方案来自上述线程-thx到richardtreier)
这种方法的缺点:
"includePaths": ["src/scss"]由于SCSS配置无法单独加载,因此不适用于上述文件夹结构。| 归档时间: |
|
| 查看次数: |
889 次 |
| 最近记录: |