gpt4 book ai didi

sass - 基础全局样式在 Grunt 文件中意外重复

转载 作者:行者123 更新时间:2023-12-04 18:06:23 25 4
gpt4 key购买 nike

这是一个很难解释的问题,我会尽量做到彻底:

我的设置 - 使用 Jekyllrb 生成器

我拿了 Jekyllrb Yeoman generator并按照 Zurb 的说明以最基本的方式(仅使用 Sass 文件)将 Zurb 的 Foundation 5 集成到其中。

我在 中的 Sass 路径grunt.js 如下面所述:

loadPath: 'app/_bower_components/foundation/scss'

在我的/_scss 中,我有:
app.scss
_settings.scss

在 app.scss 中 - 我包含了许多 Foundation 组件(例如, Accordion 、类型、标签等)。每个都带有一组全局样式。这些样式包含在以下内容中:
@include exports("global") { ... }

其中根据 this link :

"When included in a SASS module, sass-import-once will prevent the styles being duplicated if @import is called somewhere else. This is cool because it allows every SASS file to declare its own dependencies. This promotes encapulation and allows modules to standalone if need be."



我的 Grunt.js
// Generated on 2014-09-28 using generator-jekyllrb 1.2.1
'use strict';

// Directory reference:
// css: css
// sass: _scss
// javascript: scripts
// images: img
// fonts: fonts

module.exports = function (grunt) {
// Show elapsed time after tasks run
require('time-grunt')(grunt);
// Load all Grunt tasks
require('load-grunt-tasks')(grunt);

grunt.initConfig({
// Configurable paths
yeoman: {
app: 'app',
dist: 'dist'
},
watch: {
sass: {
files: ['<%= yeoman.app %>/_scss/**/*.{scss,sass}'],
tasks: ['sass:server']
},
autoprefixer: {
files: ['<%= yeoman.app %>/css/**/*.css'],
tasks: ['copy:stageCss', 'autoprefixer:server']
},
jekyll: {
files: [
'<%= yeoman.app %>/**/*.{html,yml,md,mkd,markdown}',
'!<%= yeoman.app %>/_bower_components/**/*'
],
tasks: ['jekyll:server']
},
livereload: {
options: {
livereload: '<%= connect.options.livereload %>'
},
files: [
'.jekyll/**/*.html',
'{.tmp,<%= yeoman.app %>}/css/**/*.css',
'{.tmp,<%= yeoman.app %>}/<%= js %>/**/*.js',
'<%= yeoman.app %>/img/**/*.{gif,jpg,jpeg,png,svg,webp}'
]
}
},
connect: {
options: {
port: 9000,
livereload: 35729,
// change this to '0.0.0.0' to access the server from outside
hostname: 'localhost'
},
livereload: {
options: {
open: true,
base: [
'.tmp',
'.jekyll',
'<%= yeoman.app %>'
]
}
},
dist: {
options: {
open: true,
base: [
'<%= yeoman.dist %>'
]
}
},
test: {
options: {
base: [
'.tmp',
'.jekyll',
'test',
'<%= yeoman.app %>'
]
}
}
},
clean: {
dist: {
files: [{
dot: true,
src: [
'<%= yeoman.dist %>/*',
// Running Jekyll also cleans the target directory. Exclude any
// non-standard `keep_files` here (e.g., the generated files
// directory from Jekyll Picture Tag).
'!<%= yeoman.dist %>/.git*'
]
}]
},
server: [
'.tmp',
'.jekyll'
]
},
sass: {
options: {
bundleExec: true,
debugInfo: false,
lineNumbers: false,
loadPath: 'app/_bower_components/foundation/scss'
},
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/_scss',
src: '**/*.{scss,sass}',
dest: '.tmp/css',
ext: '.css'
}]
},
server: {
options: {
debugInfo: false,
lineNumbers: false
},
files: [{
expand: true,
cwd: '<%= yeoman.app %>/_scss',
src: '**/*.{scss,sass}',
dest: '.tmp/css',
ext: '.css'
}]
}
},
jekyll: {
options: {
bundleExec: true,
config: '_config.yml,_config.build.yml',
src: '<%= yeoman.app %>'
},
dist: {
options: {
dest: '<%= yeoman.dist %>',
}
},
server: {
options: {
config: '_config.yml',
dest: '.jekyll'
}
},
check: {
options: {
doctor: true
}
}
},
useminPrepare: {
options: {
dest: '<%= yeoman.dist %>'
},
html: '<%= yeoman.dist %>/index.html'
},
usemin: {
options: {
assetsDirs: '<%= yeoman.dist %>',
},
html: ['<%= yeoman.dist %>/**/*.html'],
css: ['<%= yeoman.dist %>/css/**/*.css']
},
htmlmin: {
dist: {
options: {
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeRedundantAttributes: true
},
files: [{
expand: true,
cwd: '<%= yeoman.dist %>',
src: '**/*.html',
dest: '<%= yeoman.dist %>'
}]
}
},
// Usemin adds files to concat
concat: {},
// Usemin adds files to uglify
uglify: {},
// Usemin adds files to cssmin
cssmin: {
dist: {
options: {
check: 'gzip'
}
}
},
imagemin: {
dist: {
options: {
progressive: true
},
files: [{
expand: true,
cwd: '<%= yeoman.dist %>',
src: '**/*.{jpg,jpeg,png}',
dest: '<%= yeoman.dist %>'
}]
}
},
svgmin: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.dist %>',
src: '**/*.svg',
dest: '<%= yeoman.dist %>'
}]
}
},
copy: {
dist: {
files: [{
expand: true,
dot: true,
cwd: '<%= yeoman.app %>',
src: [
// Jekyll processes and moves HTML and text files.
// Usemin moves CSS and javascript inside of Usemin blocks.
// Copy moves asset files and directories.
'img/**/*',
'fonts/**/*',
// Like Jekyll, exclude files & folders prefixed with an underscore.
'!**/_*{,/**}'
// Explicitly add any files your site needs for distribution here.
//'_bower_components/jquery/jquery.js',
//'favicon.ico',
//'apple-touch*.png'
],
dest: '<%= yeoman.dist %>'
}]
}
},
filerev: {
options: {
length: 4
},
dist: {
files: [{
src: [
'<%= yeoman.dist %>/scripts/**/*.js',
'<%= yeoman.dist %>/css/**/*.css',
'<%= yeoman.dist %>/img/**/*.{gif,jpg,jpeg,png,svg,webp}',
'<%= yeoman.dist %>/fonts/**/*.{eot*,otf,svg,ttf,woff}'
]
}]
}
},
buildcontrol: {
dist: {
options: {
remote: '../',
branch: 'gh-pages',
commit: true,
push: true
}
}
},
jshint: {
options: {
jshintrc: '.jshintrc',
reporter: require('jshint-stylish')
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/scripts/**/*.js',
'test/spec/**/*.js'
]
},
csslint: {
options: {
csslintrc: '.csslintrc'
},
check: {
src: [
'<%= yeoman.app %>/css/**/*.css',
'<%= yeoman.app %>/_scss/**/*.scss'
]
}
},
concurrent: {
server: [
'sass:server',
'jekyll:server'
],
dist: [
'sass:dist',
'copy:dist'
]
}
});

// Define Tasks
grunt.registerTask('serve', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'connect:dist:keepalive']);
}

grunt.task.run([
'clean:server',
'concurrent:server',
'connect:livereload',
'watch'
]);
});

grunt.registerTask('server', function () {
grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
grunt.task.run(['serve']);
});

// No real tests yet. Add your own.
grunt.registerTask('test', [
// 'clean:server',
// 'concurrent:test',
// 'connect:test'
]);

grunt.registerTask('check', [
'clean:server',
'jekyll:check',
'sass:server',
'jshint:all',
'csslint:check'
]);

grunt.registerTask('build', [
'clean',
// Jekyll cleans files from the target directory, so must run first
'jekyll:dist',
'concurrent:dist',
'useminPrepare',
'concat',
'cssmin',
'uglify',
'imagemin',
'svgmin',
'filerev',
'usemin',
'htmlmin'
]);

grunt.registerTask('deploy', [
'check',
'test',
'build',
'buildcontrol'
]);

grunt.registerTask('default', [
'check',
'test',
'build'
]);
};

问题

这些全局样式在最终编译的样式表中被复制,而不管“@include 导出”函数告诉它解决重复项。我以前使用过 grunt-contrib-sass 并且从未遇到过这个问题。导致我认为其他任务可能导致它?

更多的事情:

我知道 Foundation 的 _settings.scss 中有一个变量,它具有:
$include-html-global-classes: $include-html-classes;

不要想关闭它 - 正如我 想要我的样式表中的全局样式 - 我只希望它们出现一次。

我已经设置了一个 repo

我会 非常感谢如果有人可以帮我看看这个。我整理了一个最基本的例子来说明这个问题。快速查看检查器(在提供页面时)将向您展示 DOM 中一堆重复的样式。

https://github.com/liquidvisual/jekyllrb-foundation-test

最佳答案

根据 this issue在基金会的 GitHub 上,基金会行动迅速并破坏了周围的事物,这有点困惑 exports行为。

我在 Foundation 回滚到版本 5.4.4 的情况下尝试了您的测试存储库(而不是最新的,即 5.4.5 )并且对我有用。

因此,您只需要更改 bower.json 中的 Foundation 依赖项即可。到:

"dependencies": {
"foundation": "zurb/bower-foundation#5.4.4"
},

事情应该有效。

从我在那个问题线程上读到的,一旦基金会发布 5.5你应该能够毫无问题地切换到那个。

希望有帮助!

关于sass - 基础全局样式在 Grunt 文件中意外重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26188949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com