webpack --- [读书笔记] webpack中常用的一些配置项

1. Webpack

当前Web开发面临的困境

  • 文件依赖关系错综复杂
  • 静态资源请求效率低
  • 模块化支持不友好
  • 浏览器对高级JavaScript特性兼容程度低

1.1 webpack概述

webpack是一个流行的前端项目构建工具,可以解决当前web开发中所面临的困境.

webpack提供了友好的模块化支持,以及代码压缩混淆、处理js兼容问题、性能优化等强大的功能,从而让程序员把工作的重心放到具体的功能实现上,提高了开发效率和项目的可维护性

1.2 webpack的基本使用

1.2.1 创建列表隔行变色项目

  1. 创建package.json: npm init -y
  2. 新建src: 源代码目录
  3. 新建 src -> index.html
  4. 初始化页面基本的结构
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./index.js"></script>
</head>
<body><ul><li>这是第1个li</li><li>这是第2个li</li><li>这是第3个li</li><li>这是第4个li</li><li>这是第5个li</li><li>这是第6个li</li><li>这是第7个li</li><li>这是第8个li</li><li>这是第9个li</li></ul>
</body>
// index.js
import $ from 'jquery'$(function() {$('li:odd').css('backgroundColor', 'lightblue')$('li:even').css('backgroundColor', '#ccc')
})
  1. 浏览器对ES6的兼容性不是很好,因此以上代码可能不会显示列表隔行变色.故下面需要使用webpack配置对ES6的支持

1.2.2 在项目中安装和配置webpack

  1. 安装webpack相关的包: npm install webpack webpack-cli -D
  2. 在项目根目录中,创建名为 webpack.config.js的webpack配置文件
  3. 在webpack的配置文件中,初始化如下基本配置:
module.exports = {mode: 'development'
}
  1. 在 package.json配置文件中的scripts节点下,新增dev脚本如下:
"scripts":{"dev": "webpack"
}

完成上述配置后,在命令行输入:npm run dev, webpack就会在当前目录的dist文件夹下面自动生成一个main.js文件.里面装的是浏览器兼容的JS代码,因此只需在index.html中导入main.js即可完成2.2.1的需求

1.2.3 入口与出口

webpack的4.x版本中默认约定:

  • 打包的入口文件为 src -> index.js
  • 打包的输出文件为 dist -> main.js

如果要修改打包的入口与出口,可以修改webpack.config.js:

const path = require('path');
module.exports = {entry: path.join(__dirname, './src/index.js'),output: {path: path.join(__dirname, './dist'),filename: 'bundle.js'}
}

1.2.4 自动打包功能

  1. 自动打包工具: npm install webpack-dev-server -D
  2. 修改 package.json -> scripts
// package.json
"scripts": {"dev": "webpack-dev-server"
}
  1. 执行后会有如下几行输出
i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from D:\series\17
i 「wdm」: Hash: 5ea127005e76e344e080
Version: webpack 4.41.6
Time: 429ms
Built at: 2020-02-12 18:46:23Asset     Size  Chunks             Chunk Names
bundle.js  671 KiB    main  [emitted]  main
Entrypoint main = bundle.js

第一句话说明项目运行在 'http://localhost:8080’中

第二句话说明项目的打包文件在当前目录下,最好一句话说明打包的名字为bundle.js(在内存中)

因此需要在index.html 导入打包的文件

  1. http://localhost:8080地址查看自动打包效果

1.2.5 html-webpack-plugin生成预览页面

  • 作用: 将src下面的index.html复制到内存中,且默认的路径是项目的根目录,还会自动导入内存中的bundle.js

  • 使用步骤:

    • npm install html-webpack-plugin

    • 修改webpack.config.js

    • const HtmlWebpackPlugin = require('html-webpack-plugin')
      const htmlPlugin = new HtmlWebpackPlugin({template: './src/index.html', // 指定要用到的模板文件filename: 'index.html'
      })module.exports = {plugins: [htmlPlugin]
      }
      

1.2.6 自动打包相关参数

// package.json
// --open 打包完成后自动打开浏览器
// --host 配置IP地址
// --port 配置端口
"scripts": {"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
}

1.3 通过loader打包非js模块

在实际开发中,webpack默认只能打包处理以 .js 后缀名结尾的模块,其他非 .js 后缀名的模块,webpack默认处理不了,需要调用 loader 加载器才可以正常打包.

1.3.1 打包处理CSS文件

  1. npm i style-loader css-loader -D
  2. webpack.config.js -> module -> rules
// webpack.config.js
module.exports = {module:{rules: {test: /\.css$/, use: ['style-loader', 'css-loader']}}
}
// 多个loader的调用顺序是: 从后往前调用的

1.3.2 打包处理less文件

  1. npm i less-loader less -D
  2. webpack.config.js -> module -> rules
// webpack.config.js
module.exports = {module:{rules: {test: /\.less$/, use: ['style-loader', 'css-loader','less-loader']}}
}
// 多个loader的调用顺序是: 从后往前调用的
// can not find module 'less' -> 是因为没用安装less

1.3.3 打包处理scss文件

  1. npm i sass-loader node-sass -D
  2. webpack.config.js -> module -> rules
// webpack.config.js
module.exports = {module:{rules: {test: /\.scss$/, use: ['style-loader', 'css-loader','sass-loader']}}
}
// 多个loader的调用顺序是: 从后往前调用的
// 安装的是sass,验证的是scss
// node-sass的安装可能需要改变源,

1.3.4 自动添加css的兼容前缀

  • npm i postcss-loader autoprefixer -D
// postcss.config.js
const autoprefixer = require('autoprefixer')
module.exports = {pulugins: [autoprefixer]
}
// webpack.config.js
module.exports = {module:{rules:[{ test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader']}]}
}

1.3.5 打包样式表中的图片和字体文件

  • npm i url-loader file-loader -D
// webpack.config.js
module.exports = {module:{rules:[{ test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, use:'url-loader?limit=16940' }]}
}

其中 ? 之后的是loader的参数项.

limit用来指定图片的大小,单位是字节(byte),只有小于limit大小的图片,才会被转为base64图片

1.3.6 打包处理js文件中的高级语法

  • babel转换器相关的: npm i babel-loader @babel/core @babel/runtime -D

  • babel语法插件相关的: npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D

// babel.config.js
module.exports = {presets: ['@babel/preset-env'],plugins: [ '@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties']
}
// webpack.config.js
module.exports ={module:{rules:[{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }]}
}

1.3.7 webpack中配置vue组件的加载器

  • npm i vue-loader vue-template-compiler -D

  • // webpack.config.js
    const VueLoaderPlugin = require('vue-loader/lib/plugin')
    module.exports = {module:{rules:[{ test: /\.vue$/, loader: 'vue-loader'}]},plugins:[new VueLoaderPlugin()]
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring中bean的作用域属性single与prototype的区别

https://blog.csdn.net/linwei_1029/article/details/18408363 转载于:https://www.cnblogs.com/stanljj/p/9907444.html

windows程序设计.第一个windos程序

Windows程序设计&#xff08;第5版&#xff09; windows程序需要调用API。 第一个Windows程序 1 /*HelloMsg.c -- Displays "Hello World!" in a message box*/ 2 #include <Windows.h> 3 4 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE…

java接口练习2

1、编写2个接口&#xff1a;InterfaceA和InterfaceB&#xff1b;在接口InterfaceA中有个方法voidprintCapitalLetter()&#xff1b;在接口InterfaceB中有个方法void printLowercaseLetter()&#xff1b;然后写一个类Print实现接口InterfaceA和InterfaceB&#xff0c;要求printC…

vue --- [全家桶] Vuex

1. Vuex 概述 1.1 组件之间共享数据的方式 父向子传值: v-bind 属性绑定子向父传值: v-on 事件绑定兄弟组件之间共享数据: EventBus$on: 接收数据的那个组件$emit: 发送数据的那个组件 1.2 Vuex是什么 Vuex: 是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间…

C#/WPF程序开机自动启动

最近一个C/S项目客户要求开机自启的功能&#xff0c;网上找了一些方法&#xff0c;不顶用&#xff1b;最后自己去翻书&#xff0c;找到了这段代码&#xff0c;亲测可用&#xff0c;Wpf环境下需要改下获取程序目录的方式即可&#xff0c;Winform直接可用。 1 #regio…

github --- 多个项目的管理方式

1. 多个项目管理方式 进入项目根目录: git init 将当前的项目添加到暂存区中: git add . (注意: 最后有一个点) 将暂存区的内容放到本地仓库: git commit -m 初始化项目 登录github , 新建远程仓库 在本地添加远程仓库的源: git remote origin https://github.com/Lizhhhh/…

记录一个坑

导入项目后运行控制台打印异常,pom都已检查,没有任何问题 解决办法: 项目右击---properties---deployment assembly---add---java build path entries---maven deoendencies 保存并关闭 解决... 这个问题第一次遇到 检查了很多遍maven的依赖,明明都已经配置好了 ,仍然产生了…

洛谷 P4011 孤岛营救问题【最短路+分层图】

题外话&#xff1a;昨夜脑子昏沉&#xff0c;今早一调试就过了...错误有&#xff1a;我忘记还有墙直接穿墙过...memset初始化INF用错了数...然后手残敲错一个状态一直过不了样例...要是这状态去比赛我简直完了......orz 题目链接&#xff1a;https://www.luogu.org/problemnew/…

输出控制台信息到日志 并 通过cronolog对tomcat进行日志切分

windows下tomcat默认并不会把控制台输出的信息都记录进日志文件。但是在生产环境中&#xff0c;出现问题时&#xff0c;控制台的日志输出是无法查据的&#xff0c;因此需要将日志记录下来。 解决方法&#xff1a; 输出日志到文件 修改tomcat的bin目录下的startup.bat文件&#…

微信小程序 --- [笔记小结] 环境搭建,基础学习

说明 源代码拷贝源代码 git clone https://github.com/Lizhhhh/miniProgram.git进入目录cd miniProgram查看tag: git tag选择需要查看的知识点,如: git checkout 02_Text 学习的视频失效了…后续还会找资源学习… 小程序 地址 一种不需要下载安装即可使用的应用,它实现了应…

监听发现局域网dropbox客户端broadcast-dropbox-listener

监听发现局域网dropbox客户端broadcast-dropbox-listenerDropbox是一款网盘文件同步工具。为了实现局域网内同步&#xff0c;该工具会通过UDP 17500端口发送广播包。Nmap的broadcast-dropbox-listener脚本可以监听局域网内dropbox客户端发送的广播包&#xff0c;并显示客户端的…

tornada-数据库

数据库 torndb安装连接初始化执行语句 executeexecute_rowcount查询语句 getquery与Django框架相比&#xff0c;Tornado没有自带ORM&#xff0c;对于数据库需要自己去适配。我们使用MySQL数据库。 在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库&#xff0c…

使用Puppeteer进行数据抓取(一)——安装和使用

Puppeteer 是 Google Chrome 团队官方的Chrome 自动化工具。它本身是基于Chrome Dev Protocol协议实现的&#xff0c;但它提供了更高层次API封装&#xff0c;使用起来更加方便快捷。加上google这个大咖加官方的背景&#xff0c;更使得其地位更是提升了不少。 我之前在文章使用C…

读书笔记 --- [基础知识点] 小结1

1. TCP,UDP区别 TCPUDP基于有连接基于无连接对系统资源要求较多对系统资源要求少程序比较复杂程序结构比较简单流模式数据报模式保证数据的准确性不保证数据的准确性保证数据的顺序不保证数据的顺序 2. OSI七层模型以及tcp/ip四层模型 OSI七层模型tcp/ip四层模型常用的5层模型…

连读

一、辅音元音的连读 单词的音标以辅音结尾&#xff0c;下一个单词以元音开头。 1、/n/ /ə/ 连读后就饿会发出“呢” 这个音&#xff1b; 2、/v/ /ə/ son of a bitch 3、/t/ // 4、/t/ /ɔ:/ 差不多是 tall 这个音 not at all 5、/l/ /ɪ/ call it a day // 今天就到…

读书笔记 --- [基础知识点] 小结2

1. TCP和UDP的区别 \TCPUDP是否连接面向连接无连接是否可靠可靠不可靠连接对象个数1对11对1 或1 对多传输方式面向字节面向报文首部开销20字节8字节使用场景可靠传输,如: 文件传输实时应用(IP电话、视频会议、直播等) 2. WebSocket (1)什么是WebSocket? WebSocket是HTML5中的…

Spring差缺补漏

Spring差缺补漏 Spring4.0新特性 1&#xff1a;全面支持java1.8 2&#xff1a;空指针 RequestMapping("/user") public User getUser(String id,Option<String> userName){} 3&#xff1a;泛型依赖注入 public abstract class BaseService<M extends Serial…

tar压缩/解压用法

格式&#xff1a;tar zcvf 压缩后的路径及包名 你要压缩的文件 z:gzip压缩 c:创建压缩包 v:显示打包压缩解压过程 f:接着压缩 t:查看压缩包内容 x:解压 X:指定文件列表形式排除不需要打包压缩的文件或目录 -exclude:指定排除文件或目录不需要打包压缩的文件或目录&#xff08;也…

读书笔记 --- [基础知识点] 小结3

1. cookie与session的区别 参考 cookie机制 Cookie是服务器在本地机器上存储的小段文本,并随每一次发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户端中,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求束缚上这些cook…

SPI接口比IIC速度快的理解

http://bbs.21ic.com/icview-279512-1-1.html I2C 的长处是超级低廉&#xff0c;而且是协议简单的总线。spi是端口&#xff0c;不是总线。 USB协议复杂。I2C因为跨电平的标准&#xff0c;所以是OC 上拉的&#xff0c;上拉高电平驱动能力很弱&#xff0c;所以决定了他跑不快。但…