nesting name css reactjs sass webpack

name - webpack resolve css



ResoluciĆ³n de URL de importaciĆ³n de Webpack Sass (1)

en su webpack.config

resolve: { modulesDirectories: [ ''src'', ''node_modules'' ], alias: { styles: /*put the base folder of your styles here*/ } }

y luego en su hoja de estilo de importación usando un @styles luego la ruta relativa

@import ''~styles/yourStyle.scss'';

Estoy construyendo una aplicación web usando React y Webpack con esta estructura de directorios

/src /components /containers App.js App.scss /assets /fonts MarkOT/ MarkOT.css MarkOT.eot ... ... /images /styles _vars.scss

Estoy tratando de importar _vars.scss desde App.scss así:

@import ''../../styles/vars'';

y eso funciona bien Lo que no funciona es si tengo importaciones dentro de _vars.scss

@import "../assets/fonts/MarkOT-ExtraLight/MarkOT-ExtraLight.css"; @import "../assets/fonts/MarkOT-Light/MarkOT-Light.css"; @import "../assets/fonts/MarkOT/MarkOT.css"; @import "../assets/fonts/MarkOT-Medium/MarkOT-Medium.css"; @import "../assets/fonts/MarkOT-Book/MarkOT-Book.css";

donde esas importaciones deberían resolverse en relación con la carpeta de styles . En cambio, las importaciones se están resolviendo en relación con los containers/App/App.scss . Leí en el sitio web de sass-loader que uno debería usar resolve-url-loader para resolver este problema, pero no puedo hacerlo funcionar.

Una importación para como @import "~../assets/fonts/MarkOT-ExtraLight/MarkOT-ExtraLight.css"; solo contiene una declaración @font-face :

@font-face { font-family: ''MarkOT''; src: url(''MarkOT.eot?#iefix'') format(''embedded-opentype''), url(''MarkOT.otf'') format(''opentype''), url(''MarkOT.woff'') format(''woff''), url(''MarkOT.ttf'') format(''truetype''), url(''MarkOT.svg#MarkOT'') format(''svg''); font-weight: normal; font-style: normal; }

Aquí está mi configuración de paquete web:

var webpack = require(''webpack''); var path = require(''path''); var ExtractTextPlugin = require(''extract-text-webpack-plugin''); module.exports = { devtool: ''source-map'', context: path.resolve(__dirname, ''..''), entry: { app: path.resolve(__dirname, ''../src/client/index.js''), vendors: [''react'', ''react-dom'', ''react-router''] }, output: { path: path.resolve(__dirname, ''../dist''), pathInfo: true, filename: ''bundle.js'', css: ''main.css'' }, module: { preLoaders: [ { test: //.js?$/, loader: "eslint-loader", exclude: /node_modules/ } ], loaders: [ { test: /src//.+.js$/, exclude: /node_modules/, loader: ''babel'', query: { presets: [''react'', ''es2015'', ''stage-0''] } }, { test: //.jpe?g$|/.gif$|/.png$|/.svg$|/.woff$|/.ttf$/, loader: "file-loader" }, { test: //.scss?$/, loader: ExtractTextPlugin.extract(''style'', ''!css?sourceMap!resolve-url!sass?outputStyle=expanded&sourceMap&includePaths[]='' + encodeURIComponent(require(''node-bourbon'').includePaths) + ''&includePaths[]='' + encodeURIComponent(require(''node-neat'').includePaths[1])) } ] }, resolve: { modulesDirectories: [ ''src'', ''node_modules'' ] }, plugins: [ new webpack.optimize.CommonsChunkPlugin(''vendors'', ''vendors.js''), new ExtractTextPlugin(''main.css'') ] };

Esta línea en particular es para manejar mis estilos:

{ test: //.scss?$/, loader: ExtractTextPlugin.extract(''style'', ''!css?sourceMap!resolve-url!sass?outputStyle=expanded&sourceMap&includePaths[]='' + encodeURIComponent(require(''node-bourbon'').includePaths) + ''&includePaths[]='' + encodeURIComponent(require(''node-neat'').includePaths[1])) }

Como decía en el sitio web resolve-url-loader , incluí mapas de origen en los cargadores sass y css (así como las rutas incluidas a las bibliotecas bourbon y ordenadas, todo lo cual carga bien).

¿Hay algo descaradamente obvio que me estoy perdiendo que no puedo ver?

EDITAR:

Pude solucionar el problema creando un archivo _font.scss en el mismo directorio que _var.scss , moviendo todas las declaraciones @font-face a _font.scss y luego reemplazando todas las instancias de url con require dentro de las declaraciones de fuentes.

No me gusta que no haya podido descubrir por qué el otro estaba funcionando pero funciona, así que está bien. Lo que me pareció interesante es que la url no funcionó, tenía la impresión de que css-loader se encargó de eso.