webpack
前端项目工程化的具体解决方案
以列表隔行变色来演示具体使用:
新建项目空白目录,并运行npm init -y命令,初始化包管理配置文件package.json
新建src源代码目录
新建src -> index.html首页和src -> index.js脚本文件
1 |
|
1 | // 使用es6 语法导入 |
初始化首页基本的结构
运行npm install jquery -S命令,安装jQuery
通过ES6模块化的方式导入jQuery,实现列表隔行变色效果
直接运行html发现报错Uncaught SyntaxError: Cannot use import statement outside a module
在终端运行命令,安装webpack相关的包
1 | npm install [email protected] [email protected] -D |
packages.json
1 | { |
配置webpack
在项目根目录中创建名为webpack.config.js的webpack配置文件,并初始化如下的基本配置
1
2
3module.exports = {
mode: 'development' //mode用来指定构建模式,可选值有development和 production(代码压缩)
}在package.json的scripts节点下,新增dev脚本如下:
1 | "scripts":{ |
在终端执行npm run dev启动webpack进行项目的打包与构建
此时项目根目录会生成dist/main.js文件,将html文件里的index.js替换成这个main.js即可
webpack中的默认约定
默认的打包入口文件为src/index.js
默认的输出文件路径为dist/main.js
可在webpack.config.js配置文件中,通过entry节点指定打包入口。通过output节点指定打包的出口
1 | const path = require('path') |
webpack中的插件
通过安装和配置第三方插件,可以拓展webpack的能力,从而让webpack用起来更方便。最常用的webpack插件有如下两个
webpack-dev-server
类似于node.js阶段用到的nodemon工具
每当修改了源代码,webpack会自动进行项目的打包和构建
安装
npm install [email protected] -D
配置
- 修改packages.json中的scripts中的dev命令如下
1 | "scripts": { |
再次运行
npm run dev插件会将生成的js保存在内存中的项目根目录,此时还需将html中的 js文件引入路径改成 根目录下的boundle.js
html-webpack-plugin
webpack中的html插件(类似于一个模板引擎插件)
可以通过此插件自定制index.html页面的内容
安装
npm install [email protected] -D
配置
- 修改webpack.config.js
1 | const path = require('path') |
说明
- 通过插件复制到项目根目录下的index.html页面也是在内存中
- 插件生成的html会自动注入打包的js文件(bundle.js)
devServer节点可指定本地启动服务的端口
1 | module.exports = { |
webpack中的loader
在实际开发过程中,webpack默认只能打包处理以.js后缀名结尾的模块。其他非.js后缀名结尾的模块,webpack 默认处理不了,需要调用loader加载器才可以正常打包,否则会报错!
loader加载器的作用:协助webpack打包处理特定的文件模块。比如:
- css-loader可以打包处理.css相关的文件
- less-loader可以打包处理.less相关的文件
- babel-loader可以打包处理webpack无法处理的高级JS语法
打包处理css文件
运行
npm i [email protected] [email protected] -D在webpack.config.js的module.rules数组中,添加loader规则如下
1 | module.exports = { |
打包处理less文件
运行
npm i [email protected] [email protected] -D在webpack.config.js的module.rules数组中,添加loader规则如下
1 | module.exports = { |
打包处理跟url相关的文件
运行npm i url-loader@4.1.1 file-loader@6.2.0 -D
在webpack.config.js的module.rules数组中,添加loader规则如下
1 | module.exports = { |
打包处理js高级语法
webpack 只能打包处理一部分高级的JavaScript 语法。对于那些webpack 无法处理的高级js 语法,需要借助于babel-loader进行打包处理。例如webpack无法处理下面的JavaScript代码:
1 | function info(target){ |
- 运行npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D
- 在webpack.config.js的module.rules数组中,添加loader规则如下
1 | { |
配置babel-loader
- 在项目根目录创建babel.config.js
1 | module.exports={ |
[^官方文档]: https://babeljs.io/docs/en/babel-plugin-proposal-decorators
配置打包发布
- 在package.json文件的scripts节点下,新增build命令如下
1 | "scripts": { |
- 把图片放到统一的images目录
1 | { |
- 自动清理dist目录下的旧文件
1 | // 1.安装插件 |
sourceMap
Source Map就是一个信息文件,里面储存着位置信息。也就是说,Source Map文件中存储着压缩混淆后的代码,所对应的转换前的位置。
有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。
开发环境下,推荐在webpack.config.js添加如下的配置,即可保证运行时报错的行数与源代码的行数
1 | module.exports = { |
webpack中的@
- 引入文件时,可将@代表为src目录
1 | import '../../../../msg' |
- 首先要配置webpack.config.js
1 | module.exports = { |