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 ] } ] } }
作者:牧羊狼
出处:https://www.cnblogs.com/edwardwzw/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利,谢谢您的配合。
Freedom is not let you do whatever you wanna but teach you not to do the things that you donnot wanna do.