开始步骤
1、创建一个项目 在空项目中运行 npm init -y 快速初始化一个包管理文件
2、自动创建出一个 package.json
3、创建一个src原代码目录
4、src创建一个index.html 里面写代码结构
5、运行 npm i jquery -s 安装jq
6、src目录下创建一个index.js 文件 通过 import $ from ‘jquery’ 导入jq
7、index.html 引入jq.js
此时 运行代码的时候 并没有出现我们想要的结果 原因是 es6语法不支持,报错 所以需要使用webpack打包工具
安装配置 webpack
1、运行 npm install webpack webpack-cli -D ,安装webpack相关的包
在这了我使用npm的时候一直报错,所以采用了cnpm 安装成功了
2、在项目根目录创建名为webpack.config.js 的 webpack 配置文件
3、在webpack 配置文件中,初始化如下基本配置
module.exports = {
mode:'development' // mode 用来指定构建模式,转换速度快慢, 一般开发项目使用 development ,上线项目使用 production
}
4、在package.json 配置文件中script 节点下,新增dev脚本
"scripts":{
"dev":"webpack" // script 节点下的脚本,可以通过npm run 运行
}
5、在终端运行 npm run dev 命令 启动webpack 进行项目打包 打包成功
6、index.html 引入打包成功后的 dist/main.js
webpack 基础使用
1、配置打包的入口出口
//webpack 的4.x版本中默认约定
//打包的入口文件为 src--> index.js
//打包的出口文件为 src--> main.js
//如果要手动修改打包的入出口文件,可在webpack.config.js中新增配置信息
const path = require('path') // 导入node.js 中专门操作路径的模块
module.exports = {
// 编译模式
mode:'development', //production 一般开发项目使用 development ,上线项目使用 production
entry:path.join(__dirname,'./src/index.js'), //打包入口文件的路径
output:{
path:path.join(__dirname,'./dist'), //输出文件的存放路径
filename:'bundle.js' //输出文件名称
}
}
2、index.html 引入打包成功后的 dist/bundle.js (替换main.js)
webpack 自动打包功能(为了每次修改完代码自动生效)
- 运行 npm install webpack-dev-server -D 命令,安装支持项目自动打包的工具
- 修改 package.json 配置文件中 scripts 的 dev 命令如下:
"scripts":{
"dev":"webpack-dev-server" // script 节点下的脚本,可以通过npm run 运行 webpack-dev-server会启动一个实时打包的 http 服务器
}
- 将src–》 index.html 中,script脚本的引用路径,修改为 “/buldle.js” // 放在了项目根目录中 看不到
通过 http://localhost:8080/bundle.js 看 - 运行 npm run dev命令,重新打包
- 浏览器访问 http://localhost:8080 地址,查看自动打包效果
- ctrl + c 停止项目 cls 清空控制台(一些小命令)
webpack 配置生成预览页面
配置 html-webpack-plugin 生成预览页面
1、运行 npm install html-webpack-plugin -D ,安装生成预览页面的插件
2、修改 webpack.congig.js 文件头部区域,添加如下配置:
//导入生成预览页面的插件,得到一个构造函数
const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin({ //创建插件的实例对象
template:'./src/index.html', //指定要用到的模板文件
filename:'index.html' //指定生成的文件的名称,该文件存在于内存中,在目录中不显示
})
3、修改 webpack.congig.js 文件中向往暴露的配置对象,新增如下配置节点
module.exports = {
plugins:[htmlPlugin] //plugins 数组是webpack 打包期间会用到的一些插件列表
}
webpack 基础使用
配置自动打包相关的参数
//package.json 中的配置
// --open 打包后自动打开浏览器页面
// --host 配置IP地址
// --port 配置端口
"scripts":{
"dev":"webpack-dev-server --open --host 127.0.0.1 --port 8888"
}
webpack加载器
1、通过loader打包非js模块
实际开发中,webpack默认只能打包以.js后缀名结尾的模块,非 .js 后缀名结尾的处理不了,只能调用loader加载器才可以正常打包,否则报错
loader加载器 可以协助webpack 打包处理特定的文件模块,如
less-loader 可以打包处理 .less相关的文件
sass-loader 可以打包处理 .scss相关的文件
url-loader 可以打包处理 .css中与 url 路径相关的文件
2、loader的调用过程

3、webpack中加载器的基本使用
- 1.打包处理css文件
(在src文件夹中新建css文件夹,css文件夹中新建index.css样式表 在里面添加新的样式 , 在index.js 导入index.css样式表,此时会报错)
- 运行npm i style-loader css-loader -D 命令,安装处理css文件的loader
- 在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
//所有第三方文件模块的匹配规则
module: {
rules:[ // 是一个数组,存放所有的loader规则
// test 匹配的文件类型 接受一个正则表达式,
// /\.css$/ 代表要匹配的后缀名类型
// \. 表示匹配后缀名的.号 $表示以css结尾的文件类型
// use 属性 用来表示对应要调用的loader 指定的loader 顺序是固定的,多个loader调用顺序是从后往前调用
{ test: /\.css$/, use:['style-loader','css-loader'] }
]
}
- 在index.js 导入index.css样式表
- 2.打包处理less文件
1、运行 npm i less-loader less -D 命令
2.在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
module: {
rules:[ // 是一个数组,存放所有的loader规则
// test 匹配的文件类型 接受一个正则表达式,
// /\.css$/ 代表要匹配的后缀名类型
// \. 表示匹配后缀名的.号 $表示以css结尾的文件类型
// use 属性 用来表示对应要调用的loader 指定的loader 顺序是固定的,多个loader调用顺序是从后往前调用
{ test: /\.less$/, use:['style-loader','css-loader','less-loader'] }
]
}
3.在index.js 导入index.less样式表
- 3、打包处理scss文件
1、运行 npm i sass-loader node-sass -D 命令
2、在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
module: {
rules:
[
{ test: /\.scss$/, use:['style-loader','css-loader','sass-loader'] }
]
}
3、在index.js 导入index.scss样式表
- 4、配置postCSS自动添加css的兼容前缀
(比如 ::placeholder 在ie中不兼容 )
1、.运行 npm i postcss-loader autoprefixer -D 命令
2、.在项目根目录创建postcss 的配置文件 postcss.config.js,并初始化如下配置
const autoprefixer = require('autoprefixer') // 导入自动添加前缀的插件
module.exports = {
plugins: [autoprefixer] //挂载插件
}
3.在webpack.config.js 的module–>rules 素组中,修改css 的 loader规则如下:
//所有第三方文件模块的匹配规则
module: {
rules:
[
{ test: /\.css$/, use:['style-loader','css-loader','postcss-loader'] }
]
}
- 5、打包样式表中的图标和字体文件
1.运行 npm i url-loader file-loader -D 命令
2.在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
module: {
rules:
[ // ttf|eot|svg|woff|woff2 字体文件后缀名
// ? 之后是loader 的传参项 limit 用来指定图片的大小,单位是字节(byte),小于limit 大小的图片,会被转为base64 图片
{ test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, use:'url-loader?limit=4156' }
]
}
- 6、打包配置js文件中的高级语法
1.安装babel转换器相关的包
运行 npm i babel-loader @babel/core @babel/runtime -D 命令
2.安装babel语法插件相关的包
运行 npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D 命令
3.在项目根目录创建babel 的配置文件 babel.config.js,并初始化如下配置
const autoprefixer = require('autoprefixer') // 导入自动添加前缀的插件
module.exports = {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-transform-runtime','@babel/plugin-proposal-class-properties'] //挂载插件
}
4.在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
module: {
rules:
[ // exclude 为排除项,表示babel-loader 不需要处理 node_modules 中的js文件, 只需要处理字节的js文件
{ test: /\.js$/, use:'babel-loader', exclude:/node_modules/}
]
}