【问题标题】:webpack reload styles without page refreshwebpack 重新加载样式而不刷新页面
【发布时间】:2018-08-20 13:38:12
【问题描述】:

我使用 webpack 和 livereload 插件,但是当我更改样式时,页面刷新但我不想要它。

当我使用 gulp 时,我会更改样式中的任何内容并保存它,然后在不刷新页面的情况下重新加载 css。

为什么在 webpack 上不能像 gulp 那样工作?

代码如下

webpack.config.js

const path = require("path");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const WebpackNotifierPlugin = require("webpack-notifier");
const webpack = require("webpack");
const LiveReloadPlugin = require("webpack-livereload-plugin");
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const Dotenv = require('dotenv-webpack');

module.exports = {
    entry: [
        "./resources/js/app.jsx",
        "./resources/scss/app.scss",
    ],
    devtool: "source-map",
    output: {
        path: path.resolve(__dirname, "public/assets"),
        filename: "js/app.js",
        publicPath: "/public/assets/"
    },
    module: {
        rules: [{
            test: /\.(js|jsx)$/,
            exclude: /node_modules/,
            use: {
                loader: "babel-loader",
                options: {
                    presets: ["env", "react", 'stage-2']
                }
            }
        }, {
            test: /\.(scss)$/,
            loader: ExtractTextPlugin.extract(['css-loader', 'sass-loader', "postcss-loader"])
        }]
    },
    resolve: {
        extensions: ["*", ".js", ".jsx"]
    },
    watch: true,
    plugins: [
        new CopyWebpackPlugin([{
            from: "node_modules/bootstrap/dist",
            to: "plugins/bootstrap"
        }, , {
            from: 'node_modules/font-awesome/css',
            to: 'plugins/font-awesome/css',
        }, {
            from: 'node_modules/font-awesome/fonts',
            to: 'plugins/font-awesome/fonts',
        }]),
        new WebpackNotifierPlugin({
            alwaysNotify: true
        }),
        new webpack.LoaderOptionsPlugin({
            debug: true
        }),
        new LiveReloadPlugin(),
        new ExtractTextPlugin({
            filename: 'css/app.css'
        }),
        new Dotenv({
            path: './.env',
            safe: true
        }),
        new webpack.EnvironmentPlugin(['NODE_ENV'])
    ],
    node: {
        fs: "empty"
    }
};

package.json

"scripts": {
    "start": "webpack-dev-server --history-api-fallback --progress --colors",
    "dev": "cross-env NODE_ENV=development webpack --progress --color",
    "prod": "cross-env NODE_ENV=production webpack -p --progress --color"
  },

我使用“npm run dev”命令。 问题出在哪里?

【问题讨论】:

  • 您可能想看看github.com/lshih/webpack-extract-css-hot-reload 您可以在 prod 模式下使用常规提取文本,在 dev 模式下使用热重载文本。
  • 我不使用开发服务器。我认为问题就在这里。所有给定示例中都使用了开发服务器和开发服务器热重载。我说的对吗?

标签: javascript webpack livereload


【解决方案1】:

这样试试就行了。

{
   test: /\.(s*)css$/,
   loader: ExtractTextPlugin.extract(['style-loader', 'css-loader', "sass-loader"])
}

如果您共享 package.json 将有助于其他人解决问题。

【讨论】:

  • 我会试试的。共享 package.json 的全部?
  • 好的。我假设你安装了我提到的依赖项。我会试着让你知道。
【解决方案2】:

ExtractTextPlugin 遗憾的是不支持热模块替换。

来自页面插件说明:

无需热更换模块

您需要做的是在生产中使用该插件。

rules: [
  ...
  {
    test: /\.scss$/,
    use: process.env.NODE_ENV === 'production' ?
      ExtractTextPlugin.extract([
        "css-loader", "sass-loader", "postcss-loader"
      ]) : [
        { loader: "style-loader" },
        { loader: "css-loader" },
        { loader: "sass-loader" },
        { loader: "postcss-loader" }
      ]
  }
]

【讨论】:

  • 我的第一个猜测是你缺少一些配置,几个月前我和你一样。您可以查看here 以了解它是如何工作的(仔细查看 config 文件夹)。
  • 我检查过了,但这次对我来说非常复杂,因为我是新手,所以很抱歉
  • 别担心,这是我的错。 Here我有一个更简单的例子。也许你现在是新手,但过一段时间你会足够好来帮助别人。正如我前段时间告诉你的那样,我和你一样,继续前进。
  • 非常感谢您的鼓励。我工作很努力,我很快就会学会并帮助像你这样的其他人。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2012-03-06
  • 1970-01-01
  • 2021-12-23
  • 2017-12-24
  • 2011-05-17
  • 2014-02-14
相关资源
最近更新 更多