webpack live hot reload для sass - PullRequest
       25

webpack live hot reload для sass

0 голосов
/ 27 августа 2018

Я создаю рабочий процесс для реактивного стартера и хотел бы, чтобы мой браузер автоматически перезагружался при внесении изменений в мои файлы scss.

В настоящее время веб-пакет будет «горячо» перезагружаться, когда я внесу изменения в мой файл index.js (заданный как точка входа). Однако, когда я изменяю / добавляю код scss в мой файл scss, он компилируется, но css нигде не выводит и не запускает перезагрузку браузера.

Я новичок в вебпаке, буду очень признателен за понимание.

Вот мой webpack.config.js

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

module.exports = {
    entry: ['./src/js/index.js', './src/scss/style.scss'],
    output: {
        path: path.join(__dirname, 'dist'),
        filename: 'js/index_bundle.js',
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader'
                }
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.scss$/,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: '[name].css',
                            outputPath: 'css/'
                        }
                    },
                    {
                        loader: 'extract-loader'
                    },
                    {
                        loader: 'css-loader'
                    },
                    {
                        loader: 'postcss-loader'
                    },
                    {
                        loader: 'sass-loader'
                    }
                ]
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'    
        })
    ]
}

Мой файл точек входа index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from '../components/App';


ReactDOM.render(
    <App/>,
    document.getElementById('App')
);

И мой компонент приложения

import React, {Component} from 'react';
import '../../dist/css/style.css';



class App extends Component {
    render() {
        return (
            <div>
                <p>Test</p>         
            </div>
        )
    }
}

export default App;

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Попробуйте использовать Parcel вместо Webpack. Раньше я часами настраивал Webpack для работы таких вещей, как горячая перезагрузка. С Parcel большинство вещей просто «работают» без файла конфигурации. Например, я хотел начать использовать шаблоны Pug. Parcel распознал расширение .pug и автоматически загрузил необходимые зависимости NPM!

В вашем случае просто включите файл SCSS в ваше приложение, например, так: import '../scss/style.scss' (обратите внимание, путь к исходному файлу .scss относительно index.js). Посылка автоматически сделает «разумную» вещь.

Вот несколько ссылок для начала работы с Parcel + React + SASS:


Заметные преимущества и недостатки Parcel vs WebPack:

  • Посылка требует минимальной настройки; часто без конфигурации.
  • Посылка обычно собирается намного быстрее, чем WebPack.
  • Сервер разработки WebPack выглядит более стабильным. (Сервер Parcel dev необходимо перезапускать время от времени, и он не очень хорошо работает с Dropbox. Очевидно, это следует исправить в версии 2.0.)
  • Когда требуется (необычная) конфигурация, может быть неочевидно, как это сделать в Parcel; по крайней мере, в WebPack вся конфигурация находится в одном месте.
  • Иногда автоматическая конфигурация Parcel делает то, чего люди не ожидают, путая их.
0 голосов
/ 05 июня 2019
npm install --save-dev style-loader CSS-loader
npm install --save-dev html-webpack-plugin

добавить скрипт npm в package.json для запуска webpack-dev-server:

"scripts": { 
  "start": "webpack-dev-server" 
}, 

Webpack нужен файл конфигурации, чтобы знать, как обрабатывать различные типы зависимостей, которые вы используете в нашем приложении, и для этого создать файл с именем webpack.config.js, добавьте три атрибута в webpack.config.js: Первый - это запись, которая сообщает Webpack, где находится основной файл нашего приложения:

entry: './index.js'

Второй модуль - это модуль, в котором мы говорим Webpack, как загружать внешние зависимости. У него есть атрибут с именем loaders, где мы устанавливаем определенный загрузчик для каждого из типов файлов:

module: { 
 loaders: [ 
{ 
  test: /\.js$/, 
  exclude: /(node_modules|bower_components)/, 
  loader: 'babel', 
  query: { 
    presets: ['es2015', 'react'], 
  } 
}, 
{ 
  test: /\.css$/, 
  loader: 'style!css?}]}

Мы говорим, что файлы, соответствующие регулярному выражению .js, загружаются с помощью babel-loader, поэтому они переносятся и загружаются в пакет. Вторая запись в массиве loaders указывает Webpack, что делать при импорте CSS-файла, и использует css-загрузчик с включенным флагом модулей для активации CSS-модулей. Затем результат преобразования передается в загрузчик стилей, который вставляет стили в заголовок страницы.

Наконец, мы включаем плагин HTML для генерации страницы для нас.

const HtmlWebpackPlugin = require('html-webpack-plugin') 

plugins: [new HtmlWebpackPlugin()] 
0 голосов
/ 27 августа 2018

На самом деле, style-loader является тем, кто отвечает за CSS HMR.

Вы должны добавить его в конец конвейера стилей, только для dev. Для производства вы можете оставить свой конфиг.

Это должно выглядеть примерно так:

const devMode = process.env.NODE_ENV !== 'production'

{
  test: /\.scss$/,
  use: [
    devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
    {
      loader: 'css-loader'
    },
    {
      loader: 'postcss-loader'
    },
    {
      loader: 'sass-loader'
    }
  ]
}

Обратите внимание , лучшая практика извлечения CSS в отдельный файл - это использование MiniCssExtractPlugin, если вы используете webpack 4, или ExtractTextWebpackPlugin, если вы используете веб-пакет <4. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...