Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2017, 14:41
Новичок на форуме
Отправить личное сообщение для СергейТВ Посмотреть профиль Найти все сообщения от СергейТВ
 
Регистрация: 17.07.2017
Сообщений: 1

При компиляции в webpack с отложенной загрузкой (System.import) не подгружаются стили
Подскажите, почему не подгружаются стили и что необходимо сделать?
Совсем простой код. С заглавной странички вызываются либо первая либо вторая страницы. При этом, несмотря на то, что в скомпилированных файлах первой и второй страницы классы присутствуют, по факту они не привязываются к элементам

Код index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title></title>
    <link rel="stylesheet" href="dist/styles.css">

</head>
<body>
    <div id="app"></div>
    <script src="dist/bundle.js"></script>
</body>
</html>



Код index.js

var style = require('./style/globalStyle.css');

var app = document.getElementById('app');

app.innerHTML = `
    <div id="menu">
        <button id="loadPage1">First page</button>
        <button id="loadPage2">Second page</button>
    </div>
    <div id="content">
        <h1>Main page</h1>
    </div>
`;

document.getElementById('loadPage1').addEventListener('click', () => {
    System.import('./page1')
        .then(pageModule => {
            document.getElementById('content').innerHTML = pageModule.default;
        })
});

document.getElementById('loadPage2').addEventListener('click', () => {
    System.import('./page2')
        .then(pageModule => {
            document.getElementById('content').innerHTML = pageModule.default;
        })
});

if (DEVELOPMENT) {
    if (module.hot){
        module.hot.accept();
    }
}


Код page1.js

var style1 = require('./style/css1.css');

const page = `<div class="red">This is the first page</div>`;
export default page;


Код page2.js

var style2 = require('./style/css2.css');

const page = `<div class="green">This is the second page</div>`;
export default page;


css1

.red{
    background-color: red;
    width: 100%;
    height: 100px;
}


css2

.green{
    background-color: green;
    width: 100%;
    height: 100px;
}


Код webpack.config

var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');

var DEVELOPMENT = process.env.NODE_ENV === 'development';
var PRODUCTION = process.env.NODE_ENV === 'production';

var entry = PRODUCTION
    ? [ './src/index.js']
    : [
        './src/index.js',
        'webpack/hot/dev-server',
        'webpack-dev-server/client?http://localhost:8080'
];

var plugins = PRODUCTION
    ? [
        new webpack.optimize.UglifyJsPlugin(),
        new ExtractTextPlugin('style-[contenthash:10].css'),
        new HtmlWebpackPlugin({
            template: 'index-template.html'
        })
      ]
    : [ new webpack.HotModuleReplacementPlugin() ];

plugins.push(
    new webpack.DefinePlugin({
        DEVELOPMENT: JSON.stringify(DEVELOPMENT),
        PRODUCTION: JSON.stringify(PRODUCTION)
    })
);

const cssIdentifier = PRODUCTION ? '[hash:base64:10]' : '[path]{name]---[local]';

const cssLoader = PRODUCTION
    ?   ExtractTextPlugin.extract({
            loader: 'css-loader?localIdentName=' + cssIdentifier
        })
    :   ['style-loader', 'css-loader?localIdentName=[path][name]---[local]']


module.exports = {
    devtool: 'source-map',
    entry: entry,
    plugins: plugins,
    module: {
        loaders: [{
            test: /\.js$/,
            loaders: ['babel-loader'],
            exclude: '/node_modules/'
        } , {
            test: /\.(png|jpg|gif)$/,
            loaders: ['url-loader?limit=10000&name=images/[hash:12].[exit]'],
            exclude: '/node_modules/'
        } , {
            test: /\.css$/,
            loaders:cssLoader,
            exclude: '/node_modules/'
        }]
    },
    output: {
        path:path.join(__dirname, 'dist'),
        publicPath: PRODUCTION ? '/' : '/dist/',
        filename: PRODUCTION ? 'bundle.[hash:12].min.js' : 'bundle.js'
    }
};


Содержимое скомпилированных файлов первой (ниже второй) страницы включают css файлы с классами, но вот по факту что-то происходит (или чего-то нужное не происходит) в результате чего элементам первой и второй страниц их стили не присваиваются

Содержимое первой страницы
webpackJsonp([1],{4:function(i,e,n){"use strict";var s=(n(6),'<div class="red">This is the first page</div>');e.default=s},6:function(i,e,n){e=i.exports=n(3)(void 0),e.push([i.i,".red{\n    background-color: red;\n    width: 100%;\n    height: 100px;\n}",""])}});


Содержимое второй страницы
webpackJsonp([0],{5:function(e,n,i){"use strict";var s=(i(7),'<div class="green">This is the second page</div>');n.default=s},7:function(e,n,i){n=e.exports=i(3)(void 0),n.push([e.i,".green{\n    background-color: green;\n    width: 100%;\n    height: 100px;\n}",""])}});
Ответить с цитированием
  #2 (permalink)  
Старый 20.07.2017, 01:37
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 602

Очень странно, так как всё у вас должно работать нормально, рабочий код точь-в-точь Ваш во вложение.
Вложения:
Тип файла: zip test-webpack.zip (31.1 Кб, 0 просмотров)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при наведении на родительский элемент "вкл" стили :hover::before для дочернего? Gera Herbst Events/DOM/Window 4 30.08.2015 15:41