Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.4k views
in Technique[技术] by (71.8m points)

webpack-dev-server为什么能运行,也识别到了变更,可是页面就是收不到更新信号无法自动刷新。

问题描述

我更改代码他能识别到是哪个文件更新了,但是页面就是接收不到更新信号,手动刷新才行......
image.png

package.json

image.png

webpack.config.json

/**
 * webpack.config.js 是webpack的配置文件
 * 作用: 指示webpack 做什么 和 webpack运行时的一些配置。
 * 所有构建工具都是基于node.js环境运行的 所有模块化默认为 commonjs
 */
const webpack = require('webpack');
const { resolve } = require('path');
// 创建或复制模板
const HtmlWenpackPlugin = require('html-webpack-plugin');
// 打包目录清空
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
// css提取
const MiniCssExtractPlugin = require('mini-css-extract-plugin');


module.exports = {
    //入口
    entry: './src/main.js',
    // 出口
    output: {
        // 公共资源路径
        publicPath: '/',
        // 输出路径
        path: resolve(__dirname, 'dist'),
        // 文件名
        filename: 'static/js/index.js'
    },
    // 模块 下载 - 使用
    module: {
        rules: [{
                // 匹配指定文件
                test: /.css$/,
                // 使用哪些loader 执行顺序为:由后到前 
                use: [
                    // 创建style标签,将js中的样式资源插入,添加到head中
                    // 'style-loader',
                    MiniCssExtractPlugin.loader,
                    // 将css文件变成commonjs模块加载到js中,内容类型是字符串
                    'css-loader',
                    // css兼容 npm i postcss-loader postcss-preset-env -D
                    // 记得去package.json里配置browserslist
                    // postcss-preset-env帮postcss到package.json中的browserslist里面的配置,通过配置加载指定兼容的css样式
                    {
                        loader: 'postcss-loader',
                        options: {
                            postcssOptions: () => {
                                return {
                                    // cssnano 是基于postcss生态系统的压缩插件
                                    plugins: ['postcss-preset-env', 'cssnano']
                                }
                            }
                        }
                    }
                ]
            }, {
                test: /.less$/,
                use: [
                    // 创建style标签,将js中的样式资源插入,添加到head中
                    // 'style-loader',
                    MiniCssExtractPlugin.loader,
                    // 将css文件变成commonjs模块加载到js中,内容类型是字符串
                    'css-loader',
                    // 将less文件翻译成css文件
                    'less-loader'
                ]
            }, {
                // 无法处理html里的图片资源
                test: /.(jpe?g|png|gif|svg)$/,
                // 只有一个loader可以直接这样子写
                // 下载 url-loader file-loader
                loader: 'url-loader',
                options: {
                    // 图片小于8kb,就会被base64处理
                    // 优点: 减少请求数量 (减轻服务器压力)
                    // 缺点: 图片体积变大 (文件请求速度变慢)
                    limit: 200 * 1024,
                    // 问题:url-loader 默认使用es6模块化解析,而html-loader引入图片是commonjs
                    // 解析完后html的图片资源会变成: [Object Module]
                    // 解决:关闭url-loader的es6模块化,使用commonjs
                    esModule: false,
                    name: '[name].[hash:7].[ext]',
                    outputPath: 'static/images'
                }
            }, {
                test: /.html$/,
                // 处理html文件的img图片 (负责引入img,从而能被url-loader处理)
                loader: 'html-loader',
                // use: ['file-loader', 'html-loader']
            },
            {
                test: /.(woff2?|eot|ttf|otf)(?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: '[name].[hash:7].[ext]',
                    outputPath: 'static/font'
                }
            },
            {
                test: /.js$/,
                exclude: /node_modules/,
                // npm i babel-loader @babel/preset-env @babel-core -D
                // @babel/preset-env 只能兼容简单的js语法
                // @babel/polyfill 来兼容全部 体积大
                // core-js 按需加载
                loader: 'babel-loader',
                options: {
                    presets: [
                        [
                            '@babel/preset-env',
                            {
                                // 按需加载
                                useBuiltIns: 'usage',
                                corejs: {
                                    version: 3
                                },
                                targets: {
                                    chrome: '60',
                                    firefox: '60',
                                    ie: '9',
                                    safari: '10',
                                    edge: '17'
                                }
                            }
                        ]
                    ]
                }
            }
        ]
    },
    // 插件 下载 - 引入 - 使用
    plugins: [
        // 默认创建一个空的HTML文件,自动引入打包输出的所有资源(js/css : main.js)
        // 需要有结构的html文件
        // 安装 npm i html-webpack-plugin -D
        new HtmlWenpackPlugin({
            template: './public/index.html'
        }),
        new MiniCssExtractPlugin({
            filename: "static/css/[name].css"
        }),
        // 删除后再打包
        new CleanWebpackPlugin(),
        new webpack.HotModuleReplacementPlugin()
    ],
    // 环境模式
    mode: "development",
    // 开发服务器 devServer : 用来自动化(编译、自动打开/刷新浏览器)
    // 特点:只会在内存中编译打包,不会有任何输出
    // 安装 npm i webpack-dev-server -D
    devServer: {
        // 启动的目录
        contentBase: resolve(__dirname, 'dist'),
        // 启动gzip压缩
        compress: true,
        // 端口号
        port: 8088,
        // 浏览器自动打开
        open: true,
        inline: true,
        hot: true
    }
}

有没有大佬能帮帮忙看看为什么?
还有打包后放2级目录的话要怎么配置publicPath啊?
还望大佬指点指点!谢谢!
这个问题我猜可能是由插件之间冲突引起的,有大佬遇到过这个问题吗?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

你有没有配置 browserslist?
我今天也遇到这个问题搞了半天,各种尝试,最后发现把 browserslistrc 删了就可以。

不知道是什么原因,即使是一个空的 browserslistrc 也不行,在 package.json 里面配置 browserslist 字段也不行,删了就可以了。

不知道对你有没有用。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...