网站首页 > 技术文章 正文
引:为什么使用webpack?
在之前的开发中,我们是在html的头部引入各种js,css文件,正常情况下浏览器会向服务器发送多次请求资源的加载,这样造成请求过多,另外资源的依赖关系管理复杂。因此我们使用webpack来进行前端项目的构建,它是基于Node.js的。
1、npm包管理器,管理开源项目的依赖关系,和后端的maven比较相似;
2、合并、压缩、编码各种资源文件进行统一出口bundle.js,另浏览器不支持的各种特性比如ES6语法,webpack能够编译成浏览器能识别的js文件。
一、Node.js下载
下载后并安装后在cmd控制台中输入Node,显示版本号,则安装成功
二、准备工作
1、新建文件夹mywebpack
2、cmd到当前目录,并输入 npm init (npm init -y),一路默认,目录中生成文件 package.json
三、安装webpack
1、安装全局和本地项目的webpack,安装本地时将webpack-cli一并安装
附:安装npm的淘宝镜像,命令:然后可以使用 cnpm命令快捷使用淘宝镜像
npm install -g cnpm --registry=http://registry.npm.taobao.org
安装webpack
//全局安装 全写为 cnpm install webpack --gloal
cnpm i webpack -g
//本地安装 全写 cnpm install webpack webpack-cli --save-dev
cnpm i webpack webpack-cli -D
安装会自动下载模块文件 node_modules
三、在当前目录下新建目录和文件
引入jquery模块
mywebpack>cnpm i jquery -D
webpack打包配置文件webpack.config.js,配置后就不需要指定入口和出口
const path = require('path');
module.exports = {
entry: path.join(__dirname, "/src/main.js"), // 入口文件
output: {
path: path.join( __dirname, "/dist/js"), //打包后的文件存放的地方
filename: "bundle.js" //打包后输出文件的文件名
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--webpack-dev-server中bundle.js位于当前根目录 <script src="bundle.js"></script> -->
<script src="./js/bundle.js">
</script>
</head>
<body>
<h1>aaa</h1>
</body>
</html>
main.js
import $ from 'jquery' //引入jquery
$(function () {
$('h1').css('color','red');
})
控制台输入:webpack
四、构建本地服务器
注:在webpack-dev-server中,打包后的bundle.js并不存在于实际物理磁盘中,而是在在内存中,虚拟路径为当前根目录,因此本地服务器仅适用于开发环境
cnpm i webpack-dev-server -D
webpack.config.js配置
const path = require('path');
module.exports = {
entry: path.join(__dirname, "/src/main.js"), // 入口文件
output: {
path: path.join( __dirname, "/dist/js"), //打包后的文件存放的地方
filename: "bundle.js" //打包后输出文件的文件名
},
devServer: {
contentBase: "./dist", // 本地服务器所加载文件的目录,默认访问此目录index.html
port: "8088", // 设置端口号为8088
inline: true, // 文件修改后实时刷新
historyApiFallback: true,
}
}
package.json文件中增script
//webpack-dev-server为启动服务器
//--open为启动后自动打开浏览器
"scripts": {
"dev": "webpack-dev-server --open"
}
这样可以在控制台使用命令npm run dev启动服务器
终止服务器命令为Ctrl+C然后输入Y回车即可
启动后浏览器显示
五、Source Maps调试配置
webpack.config.js文件中增加
const path = require('path');
module.exports = {
entry: path.join(__dirname, "/src/main.js"), // 入口文件
output: {
path: path.join( __dirname, "/dist/js"), //打包后的文件存放的地方
filename: "bundle.js" //打包后输出文件的文件名
},
devServer: {
contentBase: "./dist", // 本地服务器所加载文件的目录
port: "8088", // 设置端口号为8088
inline: true, // 文件修改后实时刷新
historyApiFallback: true, //不跳转
},
// 会生成对于调试的完整的.map文件,但同时也会减慢打包速度
devtool: 'source-map'
}
webpack打包后,如果我们的代码有bug,在浏览器的调试工具中会提示错误出现的位置
六、热更新的使用
webpack.config.js修改,热更新用于开发期打包速度的提升
//1.导入webpack
const webpack= require('webpack')
module.exports = {
entry: __dirname + "/src/main.js",
output: {
path: __dirname + "/dist/js",
filename: "bundle.js"
},
devServer: {
contentBase: "src", // 本地服务器所加载文件的目录
port: "8088", // 设置端口号为8088
open: true,
inline: true, // 文件修改后实时刷新
//3.开始热更新
hot:true
},
plugins: [
//2.配置插件
new webpack.HotModuleReplacementPlugin(),
],
devtool: 'source-map'
}
七、html-webpack-plugin的使用
在正常开发中,我们是需要在index.html中引入bundle.js的,现在我们使用插件html-webpack-plugin来将index.html打包放于内存中,和webpack-dev-server中的bundle.js一样,都位于内存中,这时index.html中不需要<script src=""></scrip>标签了,插件会帮我们将bundle.js自动加载到内存中的index.html中
1.插件安装命令:cnpm i html-webpack-plugin -D
2.index.html中去除<script>标签
3.修改webpack.config.js文件
const webpack = require('webpack')
//1.导入html-webpack-plugin
const htmlwebpackplugin = require('html-webpack-plugin')
const path = require('path')
module.exports = {
entry: __dirname + "/src/main.js",
output: {
path: __dirname + "/dist/js",
filename: "bundle.js"
},
devServer: {
contentBase: "src", // 本地服务器所加载文件的目录
port: "8088", // 设置端口号为8088
open: true,
// inline: true, // 文件修改后实时刷新
// historyApiFallback: false, //不跳转
hot:true
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
//2.配置插件
new htmlwebpackplugin({
//模板html原始位置
template: path.join(__dirname ,'/src/index.html'),
//3.位于内存中的文件名
filename: "index.html"
})
],
// 会生成对于调试的完整的.map文件,但同时也会减慢打包速度
devtool: 'source-map'
}
八、第三方css-loader加载器
1.安装第三方的style-loader和css-loader
cnpm i style-loader css-loader -D
2.配置文件webpack.config.js中新增module节点
module: {
//此节点配置所有的第三方loader
rules: [
//匹配规则
{
test: /\.css$/, //以.css结尾的文件
use: ['style-loader','css-loader'] //使用第三方加载器
},
]
}
index.css文件
main.js
import $ from 'jquery'
//引入index.css文件,合并打包
import './css/index.css'
$(function () {
$('li:odd').css('color', 'red');
$('li:even').css('color', 'blue');
})
八、第三方url-loader加载器
默认情况下webpack不能处理css中的url属性中的图片,需要引入第三方loader
cnpm i url-loader file-loader -D
index.css
li{
list-style-type: none;/* 去除圆点*/
list-style-image: url("../images/1.jpg");
}
webpack.config.js中匹配规则
//图片+字体的匹配规则
{
test: /\.(jpg|png|gif|bmp|jpeg|ttf|woff|woff2|svg|eot)$/,
use:'url-loader'
}
即可正常加载图片
九、第三方babel-loader
当我们在js中使用更高级的ES语法或者不支持的es语法时,默认webpack是不支持的,因此我们使用第三方的babel来配置
1.安装,babel-loader要安装7.1.5版本,默认为8版本,会报错
cnpm i babel-core babel-loader@7.1.5 babel-plugin-transform-runtime -D
cnpm i babel-preset-env babel-preset-stage-0 -D
2.webpack.config.js中配置规则
{
//exclude: /node_modules/要将此包排除掉,不然会将其中的所有js打包
test: /\.js$/, use: 'babel-loader', exclude: /node_modules/
},
3.根目录前新建配置文件 .babelrc
{ "presets": ["env","stage-0"],
//语法,注意此配置中不能有注释,必须用双引号
"plugins": ["transform-runtime"] //插件
}
4.main.js中测试代码
//class为es6的面向对象语法
class Person {
static info = {name:'zs',age:30}
}
console.log(Person.info)
猜你喜欢
- 2024-10-07 怎么做一名高薪前端工程师 必备哪些技术工具
- 2024-10-07 Gulp构建工具 gn构建工具
- 2024-10-07 JavaScript全栈开发-构建工具 javascript开发技术大全
- 2024-10-07 10.8K star!开源神器 Kotaemon:轻松构建你的专属文档问答系统
- 2024-10-07 Web前沿开发技术实战 构建前端架构必备技术指南
- 2024-10-07 Vue3全新的前端构建工具vite学习 基于vue的前端架构设计
- 2024-10-07 前端开发的时候为什么使用构建工具?
- 2024-10-07 带你了解前端构建工具parcel 前端patch
- 2024-10-07 阿里开源——用于前端和nodejs的轻量级任务管理和构建工具Dawn
- 2024-10-07 5种不错的前端开发工具,有没有你正在使用的?
你 发表评论:
欢迎- 05-10如何优化数据库和前端之间的交互?
- 05-10前端代码优化小秘籍(前端优化24条建议)
- 05-10VS Code当中的15个神仙插件,值得收藏
- 05-10如何自己开发一个Google浏览器插件?
- 05-10前端流行框架Vue3教程:14. 组件传递Props效验
- 05-10吃了一年的SU,最好用的插件都在这了
- 05-10前端必看!这款神器让网站界面告别千篇一律
- 05-10程序员请收好:10个非常有用的 Visual Studio Code 插件
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)