问题
I use boostrap with bower and gulp.
First time I copied the bootstrap.css from the bower_components to my site's dist folder and everything seemd to work.
Hovever I observed that I have no glyphicons. This because of the fonts, that I keep in a relative folder other that defined in bootstrap.css
I observed that there is less folder in bootstrap directory having the variables.less file:
//** Load fonts from this directory.
@icon-font-path: "../fonts/";
OK, perhaps if I change that relative path in the variables.less, take with gulp the bootstrap.less and output as css in my dist folder, it may work, but what if I update bootstrap then I will loose all my modifications...
bower_components
-- bootstrap
---- less
------ bootstrap.less
------ variables.less // @icon-font-path = "../fonts/"
------ ...
---- fonts
------ glyphicons.ttf // etc
dist
-- css
---- bootstrap
------ bootstrap.css // here I need @icon-font-path = "../../fonts/bootstrap/"
-- fonts
---- bootstrap
------ glyphicons.ttf // etc
Is there a way to override that value with a custom file with gulp?
Restrictions
- I don't want to change any file in the
bower_componentsfolder because they will be replaced on the next bower restore operation. So I can't modify directly thebootstrap.lessnorvariables.lessfiles from the bower folder... - As that folder structure is used by multiple modules, I can't change the font location to adapt it to the existing CSS bootstrap file, so my problem is to adapt the CSS via the less and gulp, not to move fonts to correspond to the existing CSS...
回答1:
Finally I was be able to override that variable by doing the follwing:
/bower_components
--/bootstrap
----/less
------/boostrap.less
------/variables.less
----/fonts
------/glyp..etc..ttf
/dev
--/bootstrap
----/main.less
----/myVariables.less
/dist
--/bootstrap
----/bootstrap[.min].css
--/fonts
----/bootstrap
------/glyp..etc...ttf
The content of myVariables.less:
//** Load Bootsrap fonts from this directory.
@icon-font-path: "../../fonts/bootstrap/";
The content of main.less is the folowing:
@import '../../../bower_components/bootstrap/less/bootstrap.less';
// override boostrap variables
@import 'variables.less';
The override magic lasts in the fact that less variables are lazy loaded and the latest declaration/attribution wins the others when the file is compiled.
So the bootstrap sources for the gulp processing are the following:
css: devFolder + '/bootstrap/main.less' // compile/minimize to css
fonts: bowerFolder + '/bootstrap/dist/fonts/*.*' // copy to dist
js: bowerFolder + '/bootstrap/dist/js/bootstrap.js' // minimize to dist
Articles to read :
- Adding Less to our build
- LESS lazy loading
回答2:
You don't have to override bootstrap icon-font-path variable here. Referencing the glyphicons, that are in bower_components, from the stylesheet in dist is not how this problem should be handled.
In fact, the local resources on which your application depends should be deployed to dist, and that includes glyphicons.
You could make a gulp task so as to copy resources to dist. Here is an example:
gulp.task('copy:resources', function () {
var glyphiconsGlob = 'bower_components/bootstrap/fonts/*.*';
return gulp.src(glyphiconsGlob).pipe(gulp.dest(conf.paths.dist + 'css/fonts/'));
});
You might have to adapt the path in gulp.dest according to where the file bootstrap.css is in dist folder.
来源:https://stackoverflow.com/questions/33153649/building-bootstrap-with-less-to-change-the-icon-font-path