buduję aplikacji internetowych przy użyciu React i WebPACK z tej struktury katalogówWebPACK Sass import URL rozwiązywania
/src
/components
/containers
App.js
App.scss
/assets
/fonts
MarkOT/
MarkOT.css
MarkOT.eot
...
...
/images
/styles
_vars.scss
próbuję zaimportować _vars.scss
z App.scss
tak:
@import '../../styles/vars';
i to działa dobrze. Co nie działa to czy mam importu wewnątrz od _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";
gdzie przywóz powinno rozwiązać stosunku do folderu styles
. Zamiast tego przywóz jest rozwiązywany w stosunku do containers/App/App.scss
. Czytałem na stronie internetowej sass-loader
s, że należy użyć resolve-url-loader
, aby rozwiązać ten problem, ale nie mogę go uruchomić.
import lubić @import "~../assets/fonts/MarkOT-ExtraLight/MarkOT-ExtraLight.css";
tylko zawiera deklarację @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;
}
Oto mój WebPack config:
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')
]
};
Linia ta jest w szczególności do obsługi moje style:
{ 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])) }
Jak to zostało powiedziane na resolve-url-loader
stronę, zawierałem mapy źródłowe zarówno w ładowarkach sass
i css
(jak również w dołączonych ścieżkach do bourbon i zgrabnych bibliotek, z których wszystkie ładują się dobrze).
Czy jest coś oczywistego, czego mi brakuje, czego nie widzę?
EDIT:
udało mi się obejść ten problem, tworząc plik w tym samym katalogu _font.scss
jak _var.scss
, przenosząc wszystkie deklaracje @font-face
do _font.scss
a następnie zastąpienie wszystkich wystąpień url
z require
wewnątrz deklaracji czcionek .
Nie podoba mi się, że nie byłem w stanie zrozumieć, dlaczego ten drugi pracował, ale działa tak, że to dobrze. Ciekawe, że url
nie działa, miałem wrażenie, że zajął się tym css-loader
.
Czy też usłyszeć prawidłowe rozwiązanie tego problemu bez konieczności zhackuj pliki źródłowe. W moim przypadku próbuję załadować pliki '.scss' dla Foundation 6. Plik' foundation-sites/scss/foundation.scss' ładuje się dobrze, ale instrukcje @import nie są dołączane. – jpunk11
Polecenia '@ import' są obsługiwane, przynajmniej w moim przypadku, przez trzy rzeczy: 1) Rozwiązane aliasy w samym obiekcie konfiguracyjnym Webpack, więc zamiast robić' @import '../../ styles/vars'' I może zrobić '@import 'styles/vars''. 2) w tym.scss for foundation jako punkt wejścia w konfiguracji (podobnie jak zaleca to font-awesome). 3) w programie css-loader, używając parametru 'importLoaders'. Co to oznacza, to w zasadzie hej dla X (gdzie x jest wartością parametru), zastosuj x ilość programów ładujących, które śledzą program ładujący css do moich instrukcji '@ import'. – barndog
@ jpunk11 Mogę opublikować pełne rozwiązanie, jeśli tego potrzebujesz. – barndog