Vla*_*vic 7 javascript sass webpack webpack-dev-server hot-reload
我正在为反应启动器构建一个工作流程,并希望在我对scss文件进行更改时自动重新加载浏览器.
目前,当我在index.js文件中进行更改(设置为我的入口点)时,webpack将热重新加载.但是当我在我的scss文件中更改/添加scss代码时,它会被编译,但是css不会在任何地方输出,也不会触发浏览器重新加载.
我是webpack的新手,非常感谢这里的一些见解.
这是我的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'
})
]
}
Run Code Online (Sandbox Code Playgroud)
我的index.js入口点文件
import React from 'react';
import ReactDOM from 'react-dom';
import App from '../components/App';
ReactDOM.render(
<App/>,
document.getElementById('App')
);
Run Code Online (Sandbox Code Playgroud)
和我的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;
Run Code Online (Sandbox Code Playgroud)
fel*_*osh 10
实际上,style-loader是负责 CSS HMR的那个.
您应该在样式管道的末尾添加它,仅用于开发.对于生产,您可以保留配置.
看起来应该是这样的:
const devMode = process.env.NODE_ENV !== 'production'
{
test: /\.scss$/,
use: [
devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
{
loader: 'css-loader'
},
{
loader: 'postcss-loader'
},
{
loader: 'sass-loader'
}
]
}
Run Code Online (Sandbox Code Playgroud)
注意,MiniCssExtractPlugin如果您使用webpack 4,或者ExtractTextWebpackPlugin如果您使用webpack <4,则将css提取到单独文件中的最佳做法是使用.
| 归档时间: |
|
| 查看次数: |
5266 次 |
| 最近记录: |