webpack 是前端的一个项目构建工具, 它是基于 Node.js 开发出来的一个前端工具;
npm i webpack -g
全局安装 webpack, 这样就能在全局使用webpack 的命令npm i webpack --save-dev
安装到项目依赖中npm init
初始化项目, 使用npm 管理项目中的依赖包cnpm i jquery --save
安装jquery 类库main.js
并书写各行变色的代码逻辑; //导入jquery类库
import $ from 'jquery'
//设置偶数行背景色, 索引从0 开始, 0 是偶数
$('#list li:even').css('backgroundColor', 'lightblue');
//设置奇数行背景色
$('#list li.odd').css('backgroundColor', 'pink');
直接在页面上引用 main.js
会报错, 因为浏览器不认识 improt
这种高级的JS语法,需要使用 webpack 进行处理, webpack 默认会把这种高级的语法转换为低级的浏览器能识别的语法;
运行 webpack 入口文件路径 输出文件路径
对 main.js
进行处理;
webpack src/js/main.js dist/bundle.js
webpack.config.js
webpack.config.js
中配置这两个路径; // 导入处理路径的模块
var path = require('path');
// 导出一个配置对象, 将来webpack来启动的时候, 会默认来查找webpack.config.js, 并读取这个文件中导出的配置对象,来进行打包处理
module.exports = {
entry: path.resolve(__dirname, 'src/js/main.js'), //项目入口文件
output: { // 配置输出选项
path: path.resolve(__dirname, 'dist'), // 配置输出的路径
filename: 'bundle.js' //配置输出的文件名
}
}
webpack-dev-server
来实现代码实时打包编译,当修改代码之后,会自动进行打包构建。cnpm i webpack-dev-server --save-dev
安装到开发依赖webpack-dev-server
来进行打包, 发现报错, 此时需要借助于 package.json
文件中的命令, 来进行运行webpack-dev-server
命令, 在scripts
节点下新增 "dev":"webpack-dev-server"
指令, 发现可以进行实时打包,但是dist目录下并没有生成bundle.js
文件, 这是因为 webpack-dev-server
将打包好的文件放在了内存中bundle.js
放在内存中的好处是:由于需要实时打包编译, 所以放在内存中速度会非常快http://localhost:8080/
网站,发现是一个文件夹的面板, 需要点击到src 目录下, 才能打开我们的index首页, 此时引用不到bundle.js 文件, 需要修改index.html 中的script 的src 属性为:
http://localhost:8080
的时候直接访问到index首页, 可以使用 --contentBase src
指令来修改 dev 指令, 指定启动的根目录:"dev" : "webpack-dev-server --contentBase src"
同事修改 index 页面中 script 的src 属性为
html-webpack-plugin
插件配置 启动页面由于使用 --contentBase
指令的过程比较繁琐, 需要指定启动的目录,同时 还需要修改 index.html 中 script 标签的属性, 所以推荐大家使用 html-webpack-plugin
插件配置启动页面。
cnpm i html-webpack-plugin --save-dev
安装到开发依赖webpack.config.js
配置文件如下: //导入 处理路径的模块
var path = require('path');
// 导入自动生成 html 文件的插件
var htmlWcbpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: path.resolve(__dirname, 'src/js/main.js'), // 项目入口文件
output: { // 配置输出选项
path: path.resolve(__dirname, 'dist'), // 配置输出的路径
filename: 'bundle.js' // 配置 输出的文件名
},
plugins: [// 添加plugins 节点配置插件
new htmlWebpackPlugin({
template: path.resolve(__dirname, 'src/index.html'), // 模版路径
filename: 'index.html' // 自动生成的HTML 文件的名称
})
]
}
package.json
中 script
节点中的dev指令如下;"dev" : "webpack-dev-server"
** 注意:热更新在JS 中表现的不是很明显,可以从一会儿要讲到 CSS 身上进行介绍说明 **
package.json
的 script 节点如下, 其中 --open
表示自动打开浏览器, --port 4321
表示打开的端口号为4321 , --hot
表示启用浏览器热更新:"dev" : "webpack-dev-server --hot --port 4321 --open"
webpack.config.js
文件, 新增 devServer
节点如下:devServer: {
hot: true,
open: true,
prot: 4321
}
webpack
模块:var webpack = require('webpack');
3.在plugins
节点下 新增:
new webpack.HotModuleReplacementPlugin()
cnpm i style-loader css-loader --save-dev
webpack.config.js
这个配置文件:module: {// 用来配置第三方loader 模块的
rules: [// 文件的匹配规则
{ test: /\.css$/, use: ['style-loader', 'css-loader'] }//处理css 文件的规则
]
}
use
表示 使用哪些模块来处理 test
所匹配到的文件; use
中相关 loader 模块的调用顺序是从后向前调用的;cnpm i less-loader less -D
webpack.config.js
这个配置文件:{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
cnpm i sass-loader node-sass --save-dev
webpack.config.js
中添加处理 sass 文件的loader 模块;{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
webpack.config.js
中添加处理url 路径的loader 模块:{ test: /\.(png|jpg|gif)$/, use: 'url-loader' }
{ test: /\.(png|jpg|gif)$/, use: 'url-loader?limit=43960' },
cnpm i babel-core babel-loader babel-plugin-transform-runtime --save-dev
安装babel 的相关 loader 包cnpm i babel-preset-es2015 babel-preset-stage-0 --save-dev
安装 babel 转换的语法webpack.config.js
中添加相关loader 模块, 其中需要注意的是, 一定要把 node_modules
文件夹 添加的排除项:{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
.babelrc
文件, 并修改这个配置文件如下:{
"presets" : ["es2015", "stage-0"],
"plugins" : ["transform-runtime"]
}
babel-preset-es2015
可以更新为 babel-preset-env
, 它包含了所有的ES 相关的语法: **babel-preset-env: 你需要的唯一Babel插件
Runtime transform 运行时编译es6