imports - sass[]
Error "variable indefinida" falso positivo al compilar SCSS (4)
En tu registro de compás, dice:
A) create css/generated/partial/catalog.css
B) create css/generated/partial/base.css
Estos deben ser:
A) create css/generated/partial/base.css
B) create css/generated/partial/catalog.css
Supongo que tu screen.scss tiene instrucciones de importación incorrectas.
Obteniendo un mensaje de error al compilar mi SCSS usando la gema brújula brújula.
run: /var/lib/gems/1.8/gems/compass-0.12.2/bin/compass compile
out: unchanged sass/partial/grid.scss
out: error sass/partial/catalog.scss (Line 5: Undefined variable: "$paragraphFont".)
out: create css/generated/partial/catalog.css
out: create css/generated/partial/base.css
out: overwrite css/generated/screen.css
Mi screen.scss
importa parciales como este:
@import "partial/base";
@import "partial/catalog";
En mi base
parcial tengo el $paragraphFont
definido.
$paragraphFont: ''Lucida Sans'', arial;
$regularFontSize: 14px;
Y en catalog.scss
lo uso:
.product-view #price-block {
p {
font-weight: normal;
font-family: $paragraphFont;
....
}
}
Lo extraño es que el CSS se compila muy bien, y $paragraphFont
está poblado correctamente. Así que no sé por qué el compilador se queja de un error.
Está generando archivos que no necesitan ser generados.
- screen.scss -> screen.css
- base.scss -> base.css
- catalog.scss -> catalog.css
El archivo de catálogo se está compilando por sí mismo. Como no está importando base.scss, las variables no están establecidas. Su archivo screen.scss genera como espera porque está importando toda la información necesaria.
Lo que desea hacer es cambiar el nombre de sus parciales para comenzar con un guión bajo para evitar que se compilen solos:
- screen.scss -> screen.css
- _base.scss (no compilado)
- _catalog.scss (no compilado)
Recomiendo examinar las estructuras organizativas comunes del directorio Sass. Mi favorito personal es The 7-1 Pattern .
La naturaleza del mismo divide los elementos comúnmente utilizados en otros archivos, que son importados por un main.scss
para eliminar redundancias.
Pero también, en primer lugar, preste atención a la respuesta de @ cimmanon, ya que aborda más directamente su pregunta.
Una explicación más simple que probablemente se ajuste a la mayoría de los usuarios aquí:
Estás compilando todos tus sass, cuando solo necesitas compilar el archivo de nivel superior
sass comúnmente se modulariza de la siguiente manera:
toplevel.scss
include child1.scss
include child2.scss (that also uses variables from child1.sass but does not import child1.scss)
include child3.scss (that also uses variables from child1.sass but does not import child1.sass)
Al compilar, solo necesita compilar toplevel.scss. Compilar otros archivos por su cuenta (p. Ej., Child2.scss) generará errores sobre variables indefinidas.
En tu gulpfile:
gulp.task(''sass'', function () {
gulp
.src(''./static/scss/toplevel.scss'') // NOT *.scss
.pipe(sass())
// Rest is just decoration
.pipe(prefixer(''last 2 versions'', ''ie 9''))
.pipe(gulp.dest(''./static/css/dist''))
.pipe(livereload(livereloadServer));
});