-
2022-01-10 14:11:22
1.1 webpack 是什么
webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。
1.2 webpack 五个核心概念
1.2.1 Entry 入口(Entry)
指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。
1.2.2 Output 输出(Output)
指示 webpack 打包后的资源 bundles 输出到哪里去,以及如何命名。
1.2.3 Loader
Loader 让 webpack 能 够 去 处 理 那 些 非 JavaScript 文 件 (webpack 自 身 只 理 解 JavaScript)
1.2.4 Plugins 插件(Plugins)
可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩, 一直到重新定义环境中的变量等。
1.2.5 Mode
对于__dirname和__filename的解释
__dirname,是一个成员,用来动态获取当前文件模块所属的绝对路径
__filename,可以动态获取当前文件夹的绝对路径(包含文件名)var path=require("path") module.exports={ // 打包的入口配置 ""打包的路径 entry:{ index:"./src/index.js"//文件的路径 }, // 打包之后存放的位置 output:{ filename:'[name]-bundel.js',//打包之后的名字 [name]是原先的名字 index-bundel.js path:path.resolve(__dirname,"dist") } }
装载机
开箱即用,webpack 只理解 JavaScript 和 JSON 文件。装载机允许的WebPack处理其他类型的文件,并将其转换为有效的模块,可以通过您的应用程序消耗并添加到依赖关系图。
在更高层面,在 webpack 的配置中,loader 有两个属性:
test 属性,识别出哪些文件会被转换。
use 属性,定义出在进行转换时,应该使用哪个 loader。
webpack.config.js第 2 章:webpack 的初体验
2.1 初始化配置
-
初始化 package.json 输入指令:
-
npm init
-
下载并安装 webpack
输入指令: npm install webpack webpack-cli -g
npm install webpack webpack-cli -D
2.2 编译打包应用
第 3 章:webpack 开发环境的基本配置
3.1 创建配置文件
- 创建文件 webpack.config.js
- 配置内容如下
/* index.js: webpack入口起点文件 1. 运行指令: 开发环境:webpack ./src/index.js -o ./build/built.js --mode=development webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./build/built.js 整体打包环境,是开发环境 生产环境:webpack ./src/index.js -o ./build/built.js --mode=production webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./build/built.js 整体打包环境,是生产环境 2. 结论: 1. webpack能处理js/json资源,不能处理css/img等其他资源 2. 生产环境和开发环境将ES6模块化编译成浏览器能识别的模块化~ 3. 生产环境比开发环境多一个压缩js代码。 */ // import './index.css'; import data from './data.json'; console.log(data); function add(x, y) { return x + y; } console.log(add(1, 2));
3.2 打包样式资源
/* webpack.config.js webpack的配置文件 作用: 指示 webpack 干哪些活(当你运行 webpack 指令时,会加载里面的配置) 所有构建工具都是基于nodejs平台运行的~模块化默认采用commonjs。 */ // resolve用来拼接绝对路径的方法 const { resolve } = require('path'); module.exports = { // webpack配置 // 入口起点 entry: './src/index.js', // 输出 output: { // 输出文件名 filename: 'built.js', // 输出路径 // __dirname nodejs的变量,代表当前文件的目录绝对路径 path: resolve(__dirname, 'build') }, // loader的配置 module: { rules: [ // 详细loader配置 // 不同文件必须配置不同loader处理 { // 匹配哪些文件 test: /\.css$/, // 使用哪些loader进行处理 use: [ // use数组中loader执行顺序:从右到左,从下到上 依次执行 // 创建style标签,将js中的样式资源插入进行,添加到head中生效 'style-loader', // 将css文件变成commonjs模块加载js中,里面内容是样式字符串 'css-loader' ] }, { test: /\.less$/, use: [ 'style-loader', 'css-loader', // 将less文件编译成css文件 // 需要下载 less-loader和less 'less-loader' ] } ] }, // plugins的配置 plugins: [ // 详细plugins的配置 ], // 模式 mode: 'development', // 开发模式 // mode: 'production' }
3.3 打包 HTML 资源
/* loader: 1. 下载 2. 使用(配置loader) plugins: 1. 下载 2. 引入 3. 使用 */ const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, module: { rules: [ // loader的配置 ] }, plugins: [ // plugins的配置 // html-webpack-plugin // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS) // 需求:需要有结构的HTML文件 new HtmlWebpackPlugin({ // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS) template: './src/index.html' }) ], mode: 'development' };
3.4 打包图片资源
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, module: { rules: [ { test: /\.less$/, // 要使用多个loader处理用use use: ['style-loader', 'css-loader', 'less-loader'] }, { // 问题:默认处理不了html中img图片 // 处理图片资源 test: /\.(jpg|png|gif)$/, // 使用一个loader // 下载 url-loader file-loader loader: 'url-loader', options: { // 图片大小小于8kb,就会被base64处理 // 优点: 减少请求数量(减轻服务器压力) // 缺点:图片体积会更大(文件请求速度更慢) limit: 8 * 1024, // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs // 解析时会出问题:[object Module] // 解决:关闭url-loader的es6模块化,使用commonjs解析 esModule: false, // 给图片进行重命名 // [hash:10]取图片的hash的前10位 // [ext]取文件原来扩展名 name: '[hash:10].[ext]' } }, { test: /\.html$/, // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理) loader: 'html-loader' } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development' };
3.5 打包其他资源
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // 打包其他资源(除了html/js/css资源以外的资源) { // 排除css/js/html资源 exclude: /\.(css|js|html|less)$/, loader: 'file-loader', options: { name: '[hash:10].[ext]' } } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development' };
3.6 devserver
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // 打包其他资源(除了html/js/css资源以外的资源) { // 排除css/js/html资源 exclude: /\.(css|js|html|less)$/, loader: 'file-loader', options: { name: '[hash:10].[ext]' } } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development', // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器~~) // 特点:只会在内存中编译打包,不会有任何输出 // 启动devServer指令为:npx webpack-dev-server devServer: { // 项目构建后路径 contentBase: resolve(__dirname, 'build'), // 启动gzip压缩 compress: true, // 端口号 port: 3000, // 自动打开浏览器 open: true } };
3.7 开发环境配置
/* 开发环境配置:能让代码运行 运行项目指令: webpack 会将打包结果输出出去 npx webpack-dev-server 只会在内存中编译打包,没有输出 */ const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/js/index.js', output: { filename: 'js/built.js', path: resolve(__dirname, 'build') }, module: { rules: [ // loader的配置 { // 处理less资源 test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, { // 处理css资源 test: /\.css$/, use: ['style-loader', 'css-loader'] }, { // 处理图片资源 test: /\.(jpg|png|gif)$/, loader: 'url-loader', options: { limit: 8 * 1024, name: '[hash:10].[ext]', // 关闭es6模块化 esModule: false, outputPath: 'imgs' } }, { // 处理html中img资源 test: /\.html$/, loader: 'html-loader' }, { // 处理其他资源 exclude: /\.(html|js|css|less|jpg|png|gif)/, loader: 'file-loader', options: { name: '[hash:10].[ext]', outputPath: 'media' } } ] }, plugins: [ // plugins的配置 new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development', devServer: { contentBase: resolve(__dirname, 'build'), compress: true, port: 3000, open: true } };
更多相关内容 -
-
webpack打包vue项目基础配置
2020-09-26 16:05:01基于webpack4的一个针对vue基础项目的打包配置,对基础的vue项目进行简单的打包配置,可以支持less,scss,sass等css预编译,简单明了,教程:https://www.jianshu.com/p/81bfe6ba1c04 -
详解如何用webpack打包一个网站应用项目
2020-08-29 23:52:33本篇文章主要介绍了如何用webpack打包一个网站应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
详解webpack打包nodejs项目(前端代码)
2020-10-18 00:13:13主要介绍了webpack打包nodejs项目(前端代码),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
浅谈webpack打包之后的文件过大的解决方法
2020-08-27 22:02:07主要介绍了浅谈webpack打包之后的文件过大的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
webpack打包非模块化js的方法
2020-12-04 09:03:48本文主要记录了非模块化js如何使用webpack打包 模块化打包实现方式 webpack是模块打包工具,通过入口文件递归遍历其依赖图谱,绝对是打包神器。 bar.js export default function bar() { // } foo.js import ... -
详解webpack 打包文件体积过大解决方案(code splitting)
2020-08-27 17:30:05主要介绍了webpack 打包文件体积过大解决方案(code splitting),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Webpack打包字体font-awesome的方法示例
2021-01-19 17:48:36使用webpack构建font-awesome或者bootstrap的时候,最常见的一个问题就是构建字体文件的问题。经常会出现无法找到字体文件的问题。下面就讲一下如何正确构建引入字体文件: 1. 首先安装依赖: 代码如下:npm install... -
解决webpack打包速度慢的解决办法汇总
2020-12-02 01:08:08刚开始用webpack,谈一谈解决webpack打包慢的问题的方法 技巧1 webpack在打包的时候第一次总是会做很长的准备工作,包括加载插件之类的。在刚接触webpack的时候总是webpack一下-测一下-改一下-再webpack一下,这种... -
解决vue+webpack打包路径的问题
2020-08-27 21:37:42下面小编就为大家分享一篇解决vue+webpack打包路径的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
webpack打包react项目的模版
2019-08-10 03:17:41webpack打包react项目的模版 -
完美解决webpack打包css背景图片路径问题
2020-11-20 02:01:26在webpack中css-loader的解析配置如下 { test: /\.(css|less)$/, exclude: path.resolve(__dirname, 'node_modules'), use: ['style-loader', 'css-loader', 'less-loader'] } 打包后在dist目录的发现没有css... -
webpack打包并将文件加载到指定的位置方法
2020-11-27 09:50:43使用webpack打包,最爽的事情莫过于可以直接require文件了,但是这 同时带来了一个问题,就是所有的文件整合到一起,那这一个包就太大了。 基于此:下面我们来了解下webpack的打包(主要是将如何将我们需要的内容... -
解决在vue项目中webpack打包后字体不生效的问题
2020-10-18 02:47:16今天小编就为大家分享一篇解决在vue项目中webpack打包后字体不生效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
webpack打包后直接访问页面图片路径错误的解决方法
2020-08-30 05:43:17主要给大家介绍了在webpack打包后直接访问页面图片路径错误的解决方法,文中介绍的非常详细,对遇到这个问题的朋友们具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 -
webpack打包教程.zip_webpack打包原理vue
2020-12-24 20:58:24webpack打包教程.zip webpack是最流行的前端自动化打包工具,今天来个他的教程 -
vue webpack打包后图片路径错误的完美解决方法
2020-10-17 15:53:07主要介绍了vue webpack打包后图片路径错误的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 -
彻底解决 webpack 打包文件体积过大问题
2020-12-09 19:46:51webpack 把我们所有的文件都打包成一个 JS 文件,这样即使你是小项目,打包后的文件也会非常大。下面就来讲下如何从多个方面进行优化。 去除不必要的插件 刚开始用 webpack 的时候,开发环境和生产环境用的是同一个 ... -
Webpack打包慢问题的完美解决方法
2020-12-03 10:14:46这几天写腾讯实习生 Mini 项目的时候用上了 React 全家桶,当然同时引入了 Webpack 作为打包工具。但是开发过程中遇到一个很棘手的问题就是,React 加上 React-Router、superagent、eventproxy 这些第三方轮子一共有... -
webpack打包node.js后端项目的方法
2020-11-26 16:08:07本文介绍了webpack打包node.js后端项目的方法,分享给大家,具体如下: 安装依赖 复制代码 代码如下: npm install –save-dev webpack babel-loader babel-preset-es2015 babel-preset-stage-0 webpack配置 ... -
webpack 打包工具,中文说明
2018-01-24 09:39:55webpack是目前使用范围最广范,功能最强大的前端打包工具,是现在mvvm框架开发避不开少的工具。webpack是前端程序人员必须具备的技能,webpack在最近几年内前端必不可少的的技术。 任何形式的资源都可以被视为模块,... -
vue和webpack打包项目相对路径修改的方法
2020-08-27 08:29:05主要介绍了vue和webpack打包项目相对路径修改的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
webpack:webpack打包机制与源码解析
2021-04-16 17:24:50webpackwebpack打包机制与源码解析2021.03.31:打包的代码分析文件在dist/myBuilt.js中 -
Webpack打包实例测试代码
2017-03-28 13:39:28Webpack打包实例测试代码 -
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2020-10-17 19:47:33本文通过两种方法给大家介绍了webpack打包时排除其中一个css、js文件,或单独打包一个css、js文件的方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 -
深入理解基于vue-cli的webpack打包优化实践及探索
2021-01-19 21:07:51转眼已经是2019年,短短三四年时间,webpack打包工具成为了前端开发中必备工具,曾经一度的面试题都是问,请问前端页面优化的方式有哪些?大家也是能够信手拈来的说出缓存、压缩文件、CSS雪碧图以及部署CDN等等各种... -
使用webpack打包koa2 框架app
2020-12-23 08:04:55偶然看见一篇文章讲 如何使用webpack打包koa app ,惊为天人,原来webpack也能打包后台。这在以前想都没想过。 关键问题 一:所有node_modules里的模块都不进行打包 webpack的核心功能是将引用的各个模块打到一个...