webpack4入门教程十分钟上手指南
Webpack 是基于node编写的,可以看作是模块打包机。它所做的是,分析项目结构,找到js模块以及其他一些浏览器不能直接运行的扩展语言(Scss,TS等),并将其打包成为合适的格式以便供浏览器使用。
总之一句话:把入口文件打包成一系列静态资源,供浏览器使用。
用途:
1.代码转换
2.文件优化:压缩合并
3.代码分割:公共模块分离合并,路由懒加载
4.自动刷新
5.代码校验
6.自动发布
练习流程:
--------------------------- 打包初体验 -------------------------
1. 新建文件夹,打开cmd命令行初始化:(出现package.json)
npm install -g yarn (如果之前全局安装过yarn则略过)
yarn init -y
2. 安装本地webpack: (出现node_modules, yarn.lock)
webpack webpack-cli -D
3. 新建src/index.js入口文件
console.log(\'hello webpack\');
4. 运行webpack生成dist目录:(出现的dist/main.js是压缩优化后的代码,配置文件中设置mode = ‘development’后则不压缩)
npx webpack
5. 新建src/a.js, 写一些CommonJS(node)语法:
module.exports = \'Edward\'
module.exports输出,然后在src/index.js通过require引入
此时这样是无法在我们浏览器中跑的,因为这是node 的规范
6. 在dist文件夹下,新建index.html,让它直接引用打包后的结果main.js
7. 在浏览器打开发现,通过webpack打包后生成的main.js中的代码可以在浏览器正常运行。
------------------------- 接下来配置webpack ------------------------
8. 新建webpack.config.js 配置文件(由于webpack是node写出来的,所以这个配置文件中要写node的语法)
9. 添加本地服务器:
yarn add webpack-dev-server -D
10.运行本地服务器:(同时可选择配置devServer)
npx webpack-dev-server
(或者在package.json中配置脚本:”dev”:”webpack-dev-server”,就可以通过 npm run dev 命令来运行服务)
但是问题来了,我们总不能每次打包完后,在出口文件夹下再手动创建html并引入js文件吧,所以我们要想办法让出口文件夹自动生成一个引入js文件的html文件
11.新建src/index.html 文件作为模板
12.添加html-webpack-plugin插件,下载模块后引入配置文件:
yarn add html-webpack-plugin -D
这样每次打包完成后,在dist出口文件夹下的html文件中都会把打包好的js文件自动引入。
-------------------------- 样式处理 ----------------
13.新建src/a.css
body { color: \'green\'; }
新建src/index.css,
@import \'./a.css\'; body { background: red; }
并在src/index.js中通过 require(‘index.css’) 的方式引入,
let str = require(\'./a.js\') console.log(str) require(\'./index.css\')
运行后此时命令行报错:need an appropriate loader 需要一个合适的解析器
14.安装css-loader, style-loader, 分别负责: 解析@import这种语法,把css插入到header标签中
yarn add css-loader style-loader -D
yarn add less less-loader -D
15.在配置文件中添加module模块并适配规则:
用到一个loader时,use后为字符串;
用到多个loader时,use后为数组。Loader默认解析顺序为从右到左,loader还可以写成对象的方式,用来添加更多配置。
---------------- es6语法转换 ---------------
16.安装依赖后在配置文件中添加配置规则
yarn add babel-loader @babel/core @babel/preset-env -D
Yarn add @babel/plugin-proposal-class-properties -D
(未完待续。。。)
【附录】:
// 本配置文件名又可命名为webpackfile.js let path = require(\'path\'); // webpack内置模块 let HtmlWebpackPlugin = require(\'html-webpack-plugin\'); module.exports = { devServer: { port: 8080, progress:true, contentBase: \'./dist1\', }, mode: \'development\', // 默认为 production entry: \'./src/index.js\', output: { filename: \'bundle.js\', // 打包后的文件名,默认为main.js path: path.resolve(__dirname,\'dist1\') // 路径必须是一个绝对路径 }, plugins:[ // plugins 是个数组,放着各种webpack插件的配置 new HtmlWebpackPlugin({ template: \'./src/index.html\', // 以哪个文件作为模板 filename: \'index.html\' // 打包后html文件的名字 }) ], module: { rules: [ { test: /\.js$/, use: { loader: \'babel-loader\', options: { // 用babel-loader 需要把es6转化为es5 presets: [ \'@babel/preset-env\' // 转换es6箭头函数等语法 ], plugins: [ \'@babel/plugin-proposal-class-properties\' // 转化es6的Class类 ] } } }, { // 处理css文件 test: /\.css$/, use:[ { loader: \'style-loader\', // 把css插入到header标签中 // options: { // insertAt: \'top\' // } }, \'css-loader\' // 解析@import这种语法 ] }, { // 处理less文件 test: /\.less$/, use:[ { loader: \'style-loader\', // 把css插入到header标签中 // options: { // insertAt: \'top\' // } }, \'css-loader\', // 解析@import这种语法 \'less-loader\' // 作用:less -> css ] } ] } }
- 上一篇 »laravel 中CSS 预编译语言 Sass 快速入门教程
- 下一篇 »div+css