Как загрузить изображения, используемые в таблице стилей sass в webpack?
Я использую Webpack для связывания моих модулей и использования Сасс для целей укладки в приложении на основе react.
используя отдельную таблицу стилей, я устанавливаю фоновое изображение компонента и загружаю эту таблицу стилей в index.js
. Все стили в таблице стилей применяются к этому компоненту кроме фонового изображения.
вот мой образец таблицы стилей
$bg-img: url('/img/bg.jpg');
.show {
position: relative;
background: $black $bg-img center center;
width: 100%;
height: 100%;
background-size: cover;
overflow: hidden;
}
один из способов решить эту проблему явным образом требуйте изображения, а затем создайте встроенный стиль для компонентов react.
img1 = document.createElement("img");
img1.src = require("./image.png");
но я хочу загрузите все изображения из моей папки изображений, как только загрузится моя таблица стилей не требуя каждого изображения отдельно.
мой конфигурационный файл webpack -
module.exports = {
devtool: 'source-map',
entry: {
main: [
'webpack-dev-server/client?http://localhost:8080',
'webpack/hot/only-dev-server',
'./src/index.js'
]
},
output: {
path: path.join(__dirname, 'public'),
publicPath: '/public/',
filename: 'bundle.js'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
{
test: /.jsx?$/,
include: path.join(__dirname, 'src'),
loader: 'react-hot!babel'
},
{
test: /.scss$/,
include: path.join(__dirname, 'sass'),
loaders: ["style", "css?sourceMap", "sass?sourceMap"]
},
{
test: /.(png|jpg)$/,
include: path.join(__dirname, 'img'),
loader: 'url-loader?limit=10000'
} // inline base64 URLs for <=10k images, direct URLs for the rest
]
},
resolve: {
extensions: ['', '.js', '.jsx']
},
devServer: {
historyApiFallback: true,
contentBase: './'
}
};
Я могу пропустить некоторые тривиальные моменты. Любая помощь приветствуется.
3 ответов
Аааа.... После долгих часов отладки я, наконец, нашел проблему. Это была моя глупость, из-за которой я боролся. Я хотел удалить этот вопрос, но подумал, что это поможет новичкам, как я, когда застрял в подобных проблемах.
здесьloader: 'url-loader?limit=10000'
я устанавливал ограничение на размер файла 10kb не зная, что он делает. И изображение, которое я загружал, было размером 21kb ! Это происходит, когда вы копируете некоторые другие файлы конфигурации webpack:)признак усталости javascript !
при использовании webpack для загрузки css и активов, к которым они обращаются, ваш css должен следовать тем же правилам именования модулей, которые вы используете в JavaScript import
или require
звонки.
предполагая, что img
папка находится в корне вашего исходного дерева, вы должны ссылаться на нее так в scss:
// note there is no leading /, which tells "require()" to start from the root of your source tree
$bg-img: url('img/bg.jpg');
или просто полностью относительный. Предполагая, что ваш исходный код выглядит следующим образом:
/src/styles.scss
/img/bg.jpg
код styles.scss
можно использовать относительный путь:
// note the path is relative to where the style.scss is in your source tree.
$bg-img: url('../img/bg.jpg');
У меня была аналогичная проблема, но с изображениями с '.расширение jpeg. Расширение изменить.по какой-то причине мне помог jpg.