webpack学习中遇到的坑

算法破浪者
• 阅读 13746

最近由于项目中使用了vuejs,所以顺带学习相关的知识,webpack作为目前广泛使用的一种前端编译工具,也一起进行学习。本文记录了在学习中遇到的一些问题。持续更新中……

一、使用webpack-dev-server时无法更改端口号

问题描述:
最近在学习webpack,尝试使用webpack-dev-server,想更换接口,但是更改了webpack的devServer配置,发现一直无法生效。具体配置如下:

devServer: {
    contentBase: path.join(__dirname, "dist"),
    port:8999
},

解决方式:
经过排查问题发现在使用webpack时配置了多环境,所以修改了配置文件的名称,具体如下图所示:
webpack学习中遇到的坑
在使用npm的sripts时,并没有配置该文件信息,所以无法读取配置文件,导致配置无法生效。
修改scripts,加入配置信息后生效。
webpack学习中遇到的坑

二、webpack使用tree shaking 无法显示未引入的方法【已解决】

问题描述:
使用webpack4时,并没有引入相应的的function,但是在生成的bundle文件中,并没有提示unused harmony export信息。具体代码如下:
index.js代码

import { sum } from "./math.js";

function component() {
    var element = document.createElement('div');
    element.innerHTML = ["3+2=" + sum(3)].join("\n");
    element.classList.add('hello');
    return element;
}
document.body.appendChild(component());

math.js代码:

export function square(x) {
    return x*x;
}

export function sum(x) {
    return x + x;
}

解决方式:
webpack4中mode=development时,将不进行tree-shaking和Scope hoisting,在使用production时才会进行这些操作。webpack4的新特性参见https://segmentfault.com/a/11...

三、webpack4.0中使用“extract-text-webpack-plugin”报错

具体报错信息如下:


    (node:12712) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
    E:\***\myproject\webpack-vue-elementUi\node_modules\webpack\lib\Chunk.js:460
                    throw new Error(
                    ^
    
    Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
        at Chunk.get (E:\***\myproject\webpack-vue-elementUi\node_modules\webpack\lib\Chunk.js:460:9)
        at E:\***\myproject\webpack-vue-elementUi\node_modules\extract-text-webpack-plugin\dist\index.js:176:48
        at Array.forEach (<anonymous>)
        at E:\***\myproject\webpack-vue-elementUi\node_modules\extract-text-webpack-plugin\dist\index.js:171:18

解决方式:
经过排查发现是由于extract-text-webpack-plugin目前还没有webpack4版本。可以使用该方式npm install extract-text-webpack-plugin@next解决 具体问题描述: https://github.com/webpack-co...

四、extract-text-webpack-plugin 提取css文件时url()解析问题

问题描述:
使用extract-text-webpack-plugin提取css文件时,url()解析出来的路径是相对于css文件地址的,导致图片无法查找到。
提取的css如下:

.hello {
    color: red;
    background: url(img/shop-logo.png);
}

解决方式:
经过网上搜索,定位问题是extract-text-webpack-plugin使用css-loader解析css时出现的问题,更改css-laoder的配置即可。具体配置如下:

{
    test:/\.css$/,
    use : ExtractTextPlugin.extract({
        fallback : "style-loader",
        //这样使用会出现url()解析路径错误的问题
        //use : "css-loader"
        use:[
            {
                loader:"css-loader",
                options:{
                    //用于解决url()路径解析错误
                    url:false,
                    minimize:true,
                    sourceMap:true
                }
            }
        ]
    })
}

https://github.com/webpack-co...

五、SplitChunkPlugin使用遇到的问题

问题描述:由于CommonChunkPlugin已被webpack4废弃,webpack4推荐使用SplitChunkPlugin来提取公共模块。由于webpack官网(https://webpack.js.org)上面该...,网上资料介绍又不是很详细,综合网上搜索结果,终于实现了公共模块的分离,但是还是有很多疑问没有解决,后面还需要在查找相关资料。
可以参考官方的例子:https://github.com/webpack/we...
解决方式:
使用SplitChunkPlugin有两种方式:
一、optimization.splitChunks

optimization: {
        //提取公共模块,webpack4去除了CommonsChunkPlugin,使用SplitChunksPlugin作为替代
        //主要用于多页面
        //例子代码 https://github.com/webpack/webpack/tree/master/examples/common-chunk-and-vendor-chunk
        //SplitChunksPlugin配置,其中缓存组概念目前不是很清楚
        splitChunks: {
            // 表示显示块的范围,有三个可选值:initial(初始块)、async(按需加载块)、all(全部块),默认为all;
            chunks: "all",
            // 表示在压缩前的最小模块大小,默认为0;
            minSize: 30000,
            //表示被引用次数,默认为1
            minChunks: 1,
            //最大的按需(异步)加载次数,默认为1;
            maxAsyncRequests: 3,
            //最大的初始化加载次数,默认为1;
            maxInitialRequests: 3,
            // 拆分出来块的名字(Chunk Names),默认由块名和hash值自动生成;设置ture则使用默认值
            name: true,
            //缓存组,目前在项目中设置cacheGroup可以抽取公共模块,不设置则不会抽取
            cacheGroups: {
                //缓存组信息,名称可以自己定义
                commons: {
                    //拆分出来块的名字,默认是缓存组名称+"~" + [name].js
                    name: "test",
                    // 同上
                    chunks: "all",
                    // 同上
                    minChunks: 3,
                    // 如果cacheGroup中没有设置minSize,则据此判断是否使用上层的minSize,true:则使用0,false:使用上层minSize
                    enforce: true,
                    //test: 缓存组的规则,表示符合条件的的放入当前缓存组,值可以是function、boolean、string、RegExp,默认为空;
                    test:""
                },
                //设置多个缓存规则
                vendor: {
                    test: /node_modules/,
                    chunks: "all",
                    name: "vendor",
                    //表示缓存的优先级
                    priority: 10,
                    enforce: true
                }
            }
        }
    }

第二种:new webpack.optimize.SplitChunksPlugin
具体配置同optimization.splitChunks

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
4年前
storybook配置之基本配置和webpack配置
默认配置Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用reactapp,他类似于创建一个reactapp的配置,并经过调整(tweaked),使其与vuecli的webpack配置非常相似开始学习Storybook配置学习内容(TableofContents)BabelES2016
Easter79 Easter79
4年前
Vue+Webpack配置css
  使用VueWebpack搭建工程时,在webpack.config.js中的module的rules里针对各种文件配置加载工具。在针对css文件配置时遇到一个问题:打包构建时报错——Modulebuildfailed:Unknownword。  配置内容如下:{  test:/\.css$/,  use:
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
4年前
vite2 引入 vectorize
这个库在webpack中是正常的,但是在vite2项目中无法使用也不报错,只是结果总是空....看了下是个老项目了,依赖的也都是好几年没更新的库...看来webpack在兼容性方面还是要强不少的    尝试使用parcel打包后使用,不太行...用webpack打包后使用....也不行...有时间再研究研究,看看能不能写个类似的.
可莉 可莉
4年前
18个常用 webpack插件,总会有适合你的!
!(https://oscimg.oschina.net/oscnet/71317da0c57a8e8cf5011c00e302a914609.jpg)来源| https://github.com/Michaellzg/myarticle/blob/master/webpack/Plugin何为插
Wesley13 Wesley13
4年前
解决webpack因新版本打包失败问题
最近在学习webpack打包过程中遇到的一个问题向大家分享下!创建了一个webpacksty的目录,目录下放着dist,src子目录,然后通过node环境下,npminity初始化项目出现package.json文件,src子目录下又存放着index.html和main.js文件,接下来尝试着在main.js输入一句代码当验证打包后续是否成功的过
Wesley13 Wesley13
4年前
C#调用mysql,使用带参数mysql语句
最近学习中,尝试使用带参数的mysql语句。sqlserver中参数以@para替换,但是Mysql语句中参数需要以?para替换,不支持@para方式。例如://mysqlstringcmd"selectuserBackImagefromuserswhereuserName?name";      MySql
算法破浪者
算法破浪者
Lv1
出师未捷身先死,长使英雄泪满襟。
文章
3
粉丝
0
获赞
0