一. 处理昨天的执行命令权限不够问题
我们昨天在执行打包命令时,在 vscode 中会出现报错的问题,我们先来看一下在 vscode 中的报错信息
对于这个问题我特意去搜了,这是因为执行权限不够的原因造成的,我们有两种解决办法,但都是基于 cmd 窗口去解决的,有两种执行 cmd 窗口的方法
1. 在 vscode 中打开 cmd 执行命令
我们在 vscode 最顶层选项中中打开终端,下面会弹出终端执行窗口.在这个小窗口的最右上角有 “+” “^” 和 “X” ,点击 加号那一块的 “^” 按钮,然后出现下拉选项框,选中 Command Prompt(也就是cmd),然后再执行 webpack ./src/index.js -o build --mode=development 命令就可以成功执行.我这里是配置了所以用的 webpack. 不用考虑第二张图的报错,那是因为我引入了 一会学习的打包 less样式,是可以打包成功的,
2. 直接打开 cmd 执行命令
打开你这个文件,在文件路径中输入cmd,打开cmd窗口,然后执行命令
二. 环境配置
二.1. 创建文件
在配置 webpack 时,我们需要在src同级目录下创建一个以 webpack.config.js 命名的文件
二.2. 配置
我已经做了详细的注释,可以方便理解
/* webpack.config.js 是 webpack 的配置文件
作用: 指示 webpack 干哪些工作 (当你运行 webpack 指令时,会加载里面的配置)
所有构建工具都是基于 nodejs 平台运行的 模块化默然采用 commonjs
要执行的命令 :
npm init // 初始化
*/
// 引入 nodejs 的一个模块 resolve 用来拼接绝对路径的方法
const {resolve} = require('path')
module.exports = {
// webpack 配置
// 入口
entry:'./src/index.js',
// 输出
output: {
// 输出文件名
filename: 'built.js',
// 输出路径
// __dirname nodejs的变量,代表当前文件目录的绝对路径
path: resolve(__dirname,'build')
},
// loader的配置
module: {
rules: [
// 详细的loader配置
// 不同文件必须配置不同loader处理,
]
},
// plugins的配置
plugins:[
// 详细的plugins的配置
],
// 模式
mode: 'development', // 开发环境 尽量使用开发环境去测试,因为生产环境会压缩文件,我们看不懂
// mode: 'production', // 生产环境
}
二.3. 执行命令
在我们配置完之后,我们直接输入 webpack 命令就可以进行打包了,不用打那么长的命令,执行起来非常方便.打包完之后,build不会像昨天那样没有配置 会打包为 main.js. 在我们配置完之后,会生成 built,js 打包文件
三. 打包css样式
三.1. 创建文件
我们在 src 目录下创建两个文件,一个是 css 文件,一个是 index.js 入口文件.
三.2. 编写文件
三.1.1 index.css 文件
#title {
color: aqua;
}
三.1.2 index.index 入口文件
// 引入样式资源
import './index.css'
三.3. 配置环境
在 webpack.config.js rules添加配置
{
// test 常用正则表达式 匹配哪些内容
test: /\.css$/, // loader会处理以.css为结尾的文件
// 使用哪些loader进行处理
use:[
// 处理样式文件
// use数组中loader进行处理顺序: 从右到左,从下到上 依次执行
// 创建style标签,将js中的样式资源插入进行,添加到head中生效
'style-loader',
// 将css文件变成commonjs模块加载js中,里面内容是样式字符串
'css-loader'
]
},
三.四. 安装 css-loader 和 style-loader
npm i webpack webpack-cli -D // 必须要下载的 webpack cli
npm i css-loader style-loader -D // 将 css-loader 和 style-loader 一起下载
三.五. 打包
webpack // 因为我们配置过,所以直接 webpack 就可以打包
三.六. 引入
我们在 build 中新建 index.html 文件,然后引入打包文件 built.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="./built.js"></script>
</body>
</html>
三.七. 打开浏览器
我们引入完毕之后,就打开浏览器,我们就会发现我们成功了
四. 打包less样式
四.1. 安装 less
如果你的 vscode 没有安装 less,那我们就去应用商店下载一个,进行安装. 我这个是安装过的
四.2. 创建编写文件
我们在 src 目录下创建 index.less 文件,然后进行编写
四.3. 入口文件引入
我们在 index.js 中引入 编写的 less 文件
// 引入样式资源
import './index.css'
import './index.less'
四.4. 配置环境
继续在 webpack.config.js下的 rules 中配置,在打一个中括号,可以继续配置
{
test:/\.less$/,
use: [
'style-loader',
'css-loader',
// 将less文件编译成css文件
// 需要下载 less-loader 和 less
'less-loader',
]
}
四.5. 下载 less 和 less-loader
npm i less-loader -D // 下载 less-loader
npm i less -D // 下载 less
四.6. 引入打包的文件
在 build 文件下的 index.html 文件中写 标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1 id="title">hello less</h1>
<script src="./built.js"></script>
</body>
</html>
四.7. 打包less文件
webpack // 执行打包命令
四.8. 打开浏览器刷新
运行成功!
五. 打包html资源
五.1. 创建文件编写代码
在 src 文件下创建 index.js 文件,编写代码
function sum(a,b){
return a+b
}
console.log(sum(1,2))
在 src 文件下创建 index.html 文件,编写代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>webpack</title>
</head>
<body>
<h1 id="title">hello html</h1>
</body>
</html>
五.2. 安装 html-webpack-plugin
npm i html-webpack-plugin -D : 输入命令安装 html-webpack-plugin
五.3. 创建 webpack.config.js, 进行配置
const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
// webpack 配置
// 入口
entry:'./src/index.js',
// 输出
output: {
// 输出文件名
filename: 'built.js',
// 输出路径
// __dirname nodejs的变量,代表当前文件目录的绝对路径
path: resolve(__dirname,'build')
},
// loader的配置
module: {
rules: [
// 详细的loader配置
// 不同文件必须配置不同loader处理,
]
},
// plugins的配置
plugins:[
// 详细的plugins的配置
// html -webpack-plugin
new HtmlWebpackPlugin
],
// 模式
mode: 'development', // 开发环境 尽量使用开发环境去测试,因为生产环境会压缩文件,我们看不懂
// mode: 'production', // 生产环境
}
五.4. 打包
webpack : 输入命令进行打包
并且打包完之后,我们会发现在 build 文件夹中多出了一个 index.html 文件,会发现代码中自动引入了 built.js
五.5. 再配置
我们再进行配置 webpack,config.js 里面的 plugin
plugins:[
// 详细的plugins的配置
// html -webpack-plugin
// 功能: 默认会创建一个空的 HTML ,自动引入打包输出所有的资源 ( js/css )
// 需求: 需要有结构的 HTML 文件
new HtmlWebpackPlugin({
// 复制 './src/index.html' 文件, 并自动引入打包输出所有资源 ( js/css )
template: './src/index.html'
})
],
五.6. 再打包
webpack : 输入命令进行打包
会发现 bulid 文件中的 index,html 发生了变化,多出了 h1 标签
五.7. 打开浏览器,我们就会成功打包 html 资源
六. 打包图片资源
六.1 创建文件编写代码
六.1.1 在 src 文件下创建 index.html 文件,编写代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>webpack</title>
</head>
<body>
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
</body>
</html>
六.1.2 在 src 文件下自行复制三张照片,照片大小尽量不一样,方便后期可以看出打包后的大小
六.1.3 在 src 文件下创建 index.less 文件,编写代码
#box1{
width: 100px;
height: 100px;
background-image: url('./xing1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
#box2{
width: 200px;
height: 200px;
background-image: url('./xing2.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
#box3{
width: 300px;
height: 300px;
background-image: url('./xing3.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
六.1.4 在 src 文件下创建 index.js 入口文件,编写代码
import ‘./index.less’
六.2 配置打包环境
const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// webpack 配置
// 入口
entry:'./src/index.js',
// 输出
output: {
// 输出文件名
filename: 'built.js',
// 输出路径
// __dirname nodejs的变量,代表当前文件目录的绝对路径
path: resolve(__dirname,'build')
},
// loader的配置
module: {
rules: [
// 详细的loader配置
// 不同文件必须配置不同loader处理
{
test: /\.less$/,
// 要使用多个 loader 处理用use
use: [ 'style-loader','css-loader','less-loader' ],
},
{
// 问题: 默认处理不了html 中img图片
// 处理图片资源
test: /\.(jpg|png|gif)$/,
// 使用一个 loader
// 下载 url-loader file-loader
loader: 'url-loader',
options:{
// 当发现小于 8 kb,就会被 base64 处理
// 优点: 减少请求数量 (减轻服务器压力)
// 缺点: 图片体积会更大 (文件请求速度更慢)
limit: 8 * 1024,
// 问题: 因为 url-loader 默认使用 es6 模块化解析,而 html-loader 引入图片是 commonjs
// 解析时会出现问题: [object Module]
// 解决: 关闭 url-loader 的 es6 模块化,使用 commonjs 解析
esModule: false,
// 给图片进行重命名
// [hash:10] 取图片的 hash 的前10位
// [ext] 取文件原来扩展名
name: '[hash:10].[ext]'
}
},
{
test:/\.html$/,
// 处理 html 文件的 img 图片 (负责引入img.从而能被 url-loader 进行处理)
loader:'html-loader'
}
]
},
// plugins的配置
plugins:[
// 详细的plugins的配置
new HtmlWebpackPlugin({
template: './src/index.html'
})
],
// 模式
mode: 'development', // 开发环境 尽量使用开发环境去测试,因为生产环境会压缩文件,我们看不懂
// mode: 'production', // 生产环境
}
六.3 安装打包所需的资源
npm i webpack webpack-cli -D // 必须要下载的 webpack cli
npm i css-loader style-loader -D // 将 css-loader 和 style-loader 一起下载
npm i less-loader -D // 下载 less-loader
npm i less -D // 下载 less
npm i url-loader file-loader -D // 下载 url-loader file-loader
npm i html-loader -D
六.四 打包
输入 webpack 命令,进行打包就可以了
七. 总结
我们一般在项目中不可能打包这么多类型的资源. 如果是打包多种类型资源.我们就在这个文件中定义文件夹,以每种类型的资源命名,在里面创建src,build等文件夹.这样不会造成如果你要更改项目,写别的东西会报错.因为你之前打包过的东西,在你删除一些多余的文件时,你再去打包就会报错,因为打包的文件中找不到那些你删除的内容了,就会报错. 最好的方法就是你打包一种类型的资源,你就在在里面顶一个文件夹,然后写入 src,suild,配置文件webpack.config.js 等