webpack 4.x 详细入门这是一个大佬的总结,但是我用webpack5重写该demo时,发现了几个有问题的地方
1:CleanWebpackPlugin

应该这样:

const { CleanWebpackPlugin } = require("clean-webpack-plugin");
plugins: [
new CleanWebpackPlugin(), // 所要清理的文件夹名称
]

2、merage

应该这样:

const { merge } = require('webpack-merge');

3、分离css 使用demo中的回报错extract-text-webpack-plugin报错TypeError: Cannot set property 'index' of undefined 查了原因是因为我我使用的版本是webpack5.x 而在webpack5.中分离css的配置如下:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
plugins: [
new MiniCssExtractPlugin({
filename: 'css/[name].css',
chunkFilename: "css/[id].css"
})
]

4、增加css前缀 (webpack5中测试未生效)

5、消除冗余css (webpack5中报错compiler.plugin is not a function)
6、未测试 处理图片 plugin

7、补充一个webpack配置 externals

8、预加载plugin  Preload&Prefetch 优化前端页面的资源加载

作用:当我们不想下载这个包,只想用CDN时,可以使用这个方法进行配置,减少打包体积。demo

 

面试常会问到Loader、Plugin的区别

loaders是在打包构建过程中用来处理源文件的(JSX,Scss,Less..),一次处理一个,通过不同的loader,webpack有能力调用外部的脚本或工具,实现对不同格式的文件的处理,例如把scss转为css,将ES66、ES7等语法转化为当前浏览器能识别的语法,将JSX转化为js等多项功能。

插件并不直接操作单个文件,它直接对整个构建过程其作用。从打包优化到压缩,到重新定义环境变量,webpack提供了很多开箱即用的插件

从运行时机的角度区分

1. loader运行在打包文件之前,loader为在模块加载时的预处理文件

2. plugins在整个编译周期 都起作用

在webpack中配置经常会用到

const path = require('path')

但是很多人不知道

path.join
path.resolve

细说二者的区别:

一、path.join()方法

  path.join()方法是将多个参数字符串合并成一个路径字符串
  console.log(path.join(__dirname,'a','b')); 假如当前文件的路径是E:/node/1,那么拼接出来就是E:/node/1/a/b。
  console.log(path.join(__dirname,'/a','/b','..')); 路径开头的/不会影响拼接,..代表上一级文件,拼接出来的结果是:E:/node/1/a
  console.log(path.join(__dirname,'a',{},'b')); 而且path.join()还会帮我们做路径字符串的校验,当字符串不合法时,会抛出错误:Path must be a string.

举个:

const path = require('path');
let myPath = path.join(__dirname,'/img/so');
let myPath2 = path.join(__dirname,'./img/so');
let myPath3=path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); console.log(__dirname);
console.log(myPath);
console.log(myPath2);
console.log(myPath3);
二、path.resolve()方法
  path.resolve()方法是以程序为根目录,作为起点,根据参数解析出一个绝对路径
  以应用程序为根目录
  普通字符串代表子目录
  /代表绝对路径根目录
  console.log(path.resolve());   得到应用程序启动文件的目录(得到当前执行文件绝对路径)   E:\zf\webpack\1\src
  console.log(path.resolve('a','/c'));   E:/c  ,因为/斜杠代表根目录,所以得到的就是E:/c
  所以我们一般拼接的时候需要小心点使用/斜杠
  console.log(path.resolve(__dirname,'img/so'));  E:\zf\webpack\1\src\img\so   这个就是将文件路径拼接,并不管这个路径是否真实存在。
  console.log(path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'))    E:\zf\webpack\1\src\wwwroot\static_files\gif\image.gif
  这个是用当前应用程序启动文件绝对路径与后面的所有字符串拼接,因为最开始的字符串不是以/开头的。
  ..也是代表上一级目录。
举个:
let myPath = path.resolve(__dirname,'/img/so');
let myPath2 = path.resolve(__dirname,'./img/so');
let myPath3=path.resolve('/foo/bar', './baz');
let myPath4=path.resolve('/foo/bar', '/tmp/file/'); console.log(__dirname);
console.log(myPath);
console.log(myPath2);
console.log(myPath3);
console.log(myPath4);

 

 

webpack踩坑日记的更多相关文章

  1. AI相关 TensorFlow -卷积神经网络 踩坑日记之一

    上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...

  2. 人工智能(AI)库TensorFlow 踩坑日记之一

    上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...

  3. hexo博客谷歌百度收录踩坑日记

    title: hexo博客谷歌百度收录踩坑日记 toc: false date: 2018-04-17 00:09:38 百度收录文件验证 无论怎么把渲染关掉或者render_skip都说我的格式错误 ...

  4. Hexo搭建静态博客踩坑日记(二)

    前言 Hexo搭建静态博客踩坑日记(一), 我们说到利用Hexo快速搭建静态博客. 这节我们就来说一下主题的问题与主题的基本修改操作. 起步 chrome github hexo git node.j ...

  5. Hexo搭建静态博客踩坑日记(一)

    前言 博客折腾一次就好, 找一个适合自己的博客平台, 专注于内容进行提升. 方式一: 自己买服务器, 域名, 写前端, 后端(前后分离最折腾, 不分离还好一点)... 方式二: 利用Hexo, Hug ...

  6. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

  7. webpack踩坑--webpack 2.x升级至4.x

    一.安装webpack-cli,webpack@4.26.1 1.npm install webpack-cli -D 2.npm install webpack@4.26.1 -D 二.踩坑 执行n ...

  8. JavaScript 新手的踩坑日记

    引语 在1995年5月,Eich 大神在10天内就写出了第一个脚本语言的版本,JavaScript 的第一个代号是 Mocha,Marc Andreesen 起的这个名字.由于商标问题以及很多产品已经 ...

  9. React Native Android配置部署踩坑日记

    万事开头难 作为一只进入ECMAScript世界不久的菜鸟,已经被React Native的名气惊到了,开源一周数万星勾起了我浓烈的兴趣.新年新气象,来个HellWorld压压惊吧^_^(故意少打个' ...

  10. 人工智能(AI)库TensorFlow 踩坑日记之二

    上次 踩坑日志之一 遗留的问题终于解决了,所以作者(也就是我)终于有脸出来写第二篇了. 首先还是贴上 卷积算法的示例代码地址 :https://github.com/tensorflow/models ...

随机推荐

  1. Flask----常用路由系统及自定义路由系统

    @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/post/<f ...

  2. chap3第三小组总结

      本周我们第三小组在张庆老师的带领下,走向编程的新一扇大门--分支结构.   我们第三小组是线下聚在一起学习,这样可以使我们的学习效率大大提高,我们在线下学习可以让我们的小组长更方便的指导我们的学习 ...

  3. reactHooks_useEffect

    当在直接在组件内使用setState时,会产生"渲染次数过多"的错误 例如: const A = ( ) => {   const [num,setNum] = useSta ...

  4. 2003031126-石升福-Python数据分析-五一假期作业

    项目 内容 班级链接 20级数据班(本) 作业链接 五一假期作业 博客名称 2003031126-石升福-Python数据分析-五一假期作业 要求 每道题要有题目,代码(使用插入代码,不会插入代码的自 ...

  5. 《JavaScript高级程序设计》Chapter03 JavaScript语言基础

    目录 Syntax Variable var let const Data Type Undefined Null Boolean Number String Symbol Object Operat ...

  6. 测试--MD5--加密

    CREATE TABLE `test`.`testmd5` ( `id` INT ( 4 ) NOT NULL, `name` VARCHAR ( 20 ) NOT NULL, `pwd` VARCH ...

  7. 通过简单实现一个阻塞队列了解ReentraintLock

    MyBlockingQueue 代码 package com.kms.test; import java.util.LinkedList; import java.util.concurrent.lo ...

  8. Hyper-V 直连主机USB设备

    因为授权问题不让用 Vmware 了.所以换成微软自带的 Hyper V 但是碰到一个很头痛的问题,就是外部设备没法像 Vmware 那样直接连接到虚拟机里面,很多第三方设备没法调试了. 找了很久终于 ...

  9. The Little Book of Rust Books

    https://lborb.github.io/book/title-page.html https://blog.logrocket.com/unsafe-rust-how-and-when-not ...

  10. What is RSS

    What is RSS?RSS (Rich Site Summary) is a format for delivering regularly changing web content. Many ...