目录

  • 一、认识webpack
    • 1.什么是webpack
    • 2.前端模块化
    • 3.和grunt/gulp打包工具的对比
  • 二、webpack安装
    • 1.webpack安装
    • 2.cmd中输入webpack -v显示webpack不是命令
  • 三、webpack起步
    • 1.准备工作
    • 2.js文件打包
    • 3.使用打包后的文件
  • 四、webpack配置
    • 1.命令行输入npm init
    • 2.入口和出口
    • 3.局部安装webpack、webpack-cli
    • 4.package.json
  • 五、css-loader的使用
    • 1.什么是loader
    • 2.css文件处理-准备工作
    • 3.css文件处理-打包报错信息
    • 4.css文件处理-css-loader
    • 5.css文件处理-style-loader
    • 6.配置postCSS自动添加css的兼容前缀
  • 六、less文件处理
    • 1.less文件处理-准备工作
    • 2.less文件处理-less-loader
  • 七、图片文件处理
    • 1.图片处理-资源准备阶段
    • 2.图片处理-url-loader
    • 3.图片处理-file-loader
    • 4.运行npm run build发现没有图片显示,并改变打包后图片的命名`★★★★`
  • 八、babel的使用
    • 1.ES6语法转换为ES5
  • 九、webpack配置vue
    • 1.引入vue.js
    • 2.打包项目-错误信息
    • 3.el-template区别
    • 4.vue组件化开发引入
    • 5. .vue文件封装处理
    • 6.配置打包引入文件的后缀可省略
  • 十、plugin的使用
    • 1.认识plugin
    • 2.添加版权的plugin
    • 3.打包html的plugin
    • 4.js压缩的plugin
  • 十一、本地服务器
    • 1.配置webpack的自动打包功能
    • 2.自动打包效果如下
  • 十二、webpack配置文件分离
一、认识webpack

官方网址:https://www.webpackjs.com/

1.什么是webpack

webpack是一个前端模块化打包工具

2.前端模块化

3.和grunt/gulp打包工具的对比

grunt/gulp更强调的是自动化、定义一些任务
webpack更强调模块化

二、webpack安装
1.webpack安装

webpack为了正常运行,必须依赖node环境
node环境为了正常执行代码,必须依赖其包含的各种依赖的包
npm(node packages manager)包管理工具,为了管理node的各种依赖包

如果安装webpack4+版本,则可以运行以下命令:
npm install webpack webpack-cli -D

2.cmd中输入webpack -v显示webpack不是命令
  1. 创建文件夹
    我的nodejs默认安装路径为:D:\program\nodejs
    在此文件夹下创建两个文件用于全局存放依赖包路径和缓存路径
  2. 配置路径
    在cmd中输入以下代码,配置缓存路径:
    npm config set cache "D:\program\nodejs\node_cache"
    回车后再输入以下代码后,回车,配置全局依赖包:
    npm config set cache “D:\program\nodejs\node_global”`
  3. 安装webpack
    和上面内容相同,请查看1.webpack安装
  4. 环境变量配置
    我的电脑→右键属性→高级系统设置→高级→环境变量
    或:控制面板→系统和安全→系统→高级系统设置→高级→环境变量
  5. 查看webpack版本
三、webpack起步
1.准备工作

使用commonJS
module.exports = {}导出
const { } = require('')导入,括号里为导入文件路径

2.js文件打包


在文件根目录打开命令行工具,输入:
webpack ./src/main.js ./dist/main.js --mode development
意思是把src目录中main文件,打包到dist中以main命名的文件

3.使用打包后的文件


然后再index.html文件中,引入刚打包好的dist中main文件,浏览器打开即可。

四、webpack配置
1.命令行输入npm init

目的生成package.json文件

2.入口和出口

const path = require('path')module.exports = {entry: './src/main.js',output: {path: path.join(__dirname, 'dist'),filename: 'bundle.js'}
}
3.局部安装webpack、webpack-cli

第二步不推荐使用,更好的方法往下看

4.package.json

在script中配置了build:webpack,表示如果执行打包:npm run build,则会优先使用本地webpack打包而不是全局的webpack。

五、css-loader的使用
1.什么是loader


webpack中loader网址:https://www.webpackjs.com/loaders/

2.css文件处理-准备工作

3.css文件处理-打包报错信息

安装css-loader即可解决

4.css文件处理-css-loader
css-loader只负责加载css文件,不负责把具体样式嵌入到css文件中。
需要安装style-loader

在webpack.config.js中加上以下代码:

5.css文件处理-style-loader

1.安装style-loader,命令行运行:npm install style-loader --save-dev
2.配置,在webpack-config-js文件中,css-loader前面输入:style-loader
webpack读取使用loader是从右到左

6.配置postCSS自动添加css的兼容前缀

自动添加浏览器兼容前缀
-moz-:代表Firefox火狐浏览器私有属性
-ms-:代表IE浏览器私有属性
-webkit-:代表Safari、Chrome私有属性
-o-:代表Opera私有属性
具体操作如下:
1.运行npm install postcss-loader autoprefixer -D命令
2.在项目根目录创建postcss配置文件postcss.config.js,并初始化如下配置

// 导入自动添加前缀的插件
const autoprefixer = require('autoprefixer')
module.exports = {// 挂载插件plugin: [ autoprefixer ]
}

3.在webpack.config.js的module→rules数组中,修改css的loader规则如下:

六、less文件处理
1.less文件处理-准备工作

2.less文件处理-less-loader

1.命令行安装:npm install --save-dev less-loader less
2.webpack.config.js中配置:

七、图片文件处理
1.图片处理-资源准备阶段

2.图片处理-url-loader

1、运行:npm install --save-dev url-loader,安装插件
2、修改webpack.config.js中的配置,如下图
3、如果图片大小小于option中limit值,则可正常打包,如果图片大小大于limit值该怎么办?

3.图片处理-file-loader

图片大小大于limit值,则要安装file-loader插件
运行:npm install file-loader -D(或--save-dev)

4.运行npm run build发现没有图片显示,并改变打包后图片的命名★★★★


原因: css中图片文件路径引入出错,应该引入dist文件中对应的图片文件(文件名改变)
解决方法:在webpack.config.js文件中,output中新增publicPath: 'dist/'意思是,在打包中所有的url都会在前面默认拼接上dist/

八、babel的使用
1.ES6语法转换为ES5
以下方式可能过于老了,也可自行按照官网操作:
https://www.webpackjs.com/loaders/babel-loader/

如es6中的const、let
1.运行npm install --save-dev babel-loader@7 babel-core babel-preset-es2015
2.webpack.config.js文件中添加:

{test: /\.js$/,// exclude排除exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {// 如果这样写,会自动去找babelrc文件// presets: ['@babel/preset-env']presets: ['es2015']}}
}

九、webpack配置vue
1.引入vue.js

1.运行:npm install vue --save
2.在main.js文件中引入以下代码:

import Vue from 'vue'
const app = new Vue({el: '#app',data: {message: 'Hello webpack'}
})

2.打包项目-错误信息

runtime-only:代码中,不可以有任何template
runtime-compiler:代码中,可以有template,因为compiler可以用于编译template
在webpack.config.js中配置以下内容:resolve和module平级

resolve: {// alias别名alias: {'vue$': 'vue/dist/vue.esm.js'}
}

3.el-template区别


4.vue组件化开发引入

index.html不变:

  <div id="app"><h2>{{message}}</h2></div>

第一步:将vue实例中的template里面的代码抽离出来到同页面,设置一个组件中。

// App组件
const App = {template: `<div><h2>{{message}}</h2><button @click="btnClick">按钮</button><h2>{{name}}</h2></div>`,data() {return {message: 'Hello webpack',name: 'lvan'}},methods: {btnClick() {console.log('template')}}
}new Vue({el: '#app',template: '<App/>',// 注册组件components: {App}
})

第二步:继续抽离,把组件中代码抽离到一个单独文件app.js中,再在main.js文件中引入
app.js:

export default {template: `<div><h2>{{message}}</h2><button @click="btnClick">按钮</button><h2>{{name}}</h2></div>`,data() {return {message: 'Hello webpack',name: 'lvan'}},methods: {btnClick() {console.log('template')}}
}

main.js:

import Vue from 'vue'
import App from './vue/app'new Vue({el: '#app',template: '<App/>',components: {App}
})

第三步:继续抽离,把组件中代码抽离到一个单独文件App.vue中,再在main.js文件中引入,npm run build会报错如下,解决方法看下5

App.vue:

<template><div><h2 class="title">{{message}}</h2><button @click="btnClick">按钮</button><h2>{{name}}</h2></div>
</template><script>
export default {data() {return {message: 'Hello webpack',name: 'lvan'}},methods: {btnClick() {console.log('template')}}
}
</script><style scoped>.title {color: green;}
</style>

main.js:

import Vue from 'vue'
import App from './vue/app.vue'new Vue({el: '#app',template: '<App/>',components: {App}
})
5. .vue文件封装处理


1、运行命令:npm install vue-loader vue-template-compiler --save-dev
2、修改webpack.config.js配置
在文件头部加上const VueLoaderPlugin = require('vue-loader/lib/plugin')
在module.exports中module平级下添加代码如下:

6.配置打包引入文件的后缀可省略

如以下代码,运行打包会报错,显示找不到Cpn这个文件:

解决方案:在webpack.config.js文件中,配置红色框中代码

十、plugin的使用
1.认识plugin

2.添加版权的plugin

3.打包html的plugin


方式1:
1、运行npm install html-webpack-plugin --save-dev
2、把webpack.config.jsoutput中的publicPath:‘dist/’去除
3、在webpack.config.js中头部加上
const HtmlWebpackPlugin = require('html-webpack-plugin')
4、在plugins中加入以下代码:

new HtmlWebpackPlugin({// 指定的模板,也就是根目录中的index文件template: 'index.html'
})

方式2:
1、运行npm install html-webpack-plugin -D,安装插件
2、修改webpack.config.js文件头部区域,添加如下配置信息

const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin({ // 创建插件的实例对象template: './src/index.html',   // 指定要用到的模板文件filename: 'index.html'  // 指定生成的文件名称,该文件存在内存中,在目录中不显示
})

3、修改webpack.config.js文件中向外暴露的配置对象。新增节点
plugin: [ htmlPlugin ]

4.js压缩的plugin

如果安装的webpack版本为4以上,则自动压缩,不用安装以下插件

十一、本地服务器
1.配置webpack的自动打包功能

方式1:
1、运行npm install webpack-dev-server --save-dev命令
2、在webpack.config.js中,与plugins平级下添加如下代码:

devServer: {// 为哪个文件夹提供服务contentBase: './dist',// 页面实时刷新inline: true
}

3、在package.json文件,scripts中配置如下代码:
--open是表示自动打开浏览器
"dev": "webpack-dev-server --open"

方式2:
1.运行:npm install webpack-dev-server -D命令,安装自动打包工具
2.修改package.json→script中的dev命令:"build": "webpack-dev-server"
3.运行npm run build命令,重新打包
4.在index.html文件中,修改bundle.js的引入。修改为: “/bundle.js”
5.在浏览器中访问http://localhost:8080

2.自动打包效果如下

十二、webpack配置文件分离

使开发和发布依赖不同的配置文件

1、为了合并文件,需要安装npm install webpack-merge --save-dev
2、新建3个文件分别为,base.config.js(公共)、prod.config.js(开发依赖)、dev.config.js(发布依赖)
3、package.json中配置,修改打包入口dev为开发,build为发布

4、删掉以前根目录中的webpack.config.js文件
5、在三个文件中,分别写上代码如下:
base.config.js:

// 公共配置文件
const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
// const htmlPlugin = new HtmlWebpackPlugin({ // 创建插件的实例对象
//   template: './index.html',   // 指定要用到的模板文件
//   filename: 'index.html'  // 指定生成的文件名称,该文件存在内存中,在目录中不显示
// })module.exports = {entry: path.join(__dirname, './src/main.js'),output: {path: path.join(__dirname, '../dist'),filename: 'bundle.js'// publicPath: 'dist/'},module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader', 'postcss-loader']},{test: /\.less$/,use: [{loader: "style-loader"}, {loader: "css-loader"}, {loader: "less-loader"}]},{test: /\.(png|jpg|gif)$/,use: [{loader: 'url-loader',// 加载图片大小 小于limit,会将图片编译成base64字符串形式// 如果图片大于limit,则需要安装file-loaderoptions: {limit: 20,name: 'img/[name].[hash:8].[ext]'}}]},{test: /\.js$/,// exclude排除exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {// 如果这样写,会自动去找babelrc文件// presets: ['@babel/preset-env']presets: ['es2015']}}},{test: /\.vue$/,use: ['vue-loader']}]},resolve: {// 后缀名可省略extensions: ['.js', '.css', '.vue'],// alias别名alias: {'vue$': 'vue/dist/vue.esm.js'}},plugins: [new VueLoaderPlugin(),new webpack.BannerPlugin('最终版权归lvan所有'),new HtmlWebpackPlugin({// 指定的模板,也就是根目录中的index文件template: 'index.html'})]
}

prod.config.js:

// 开发模式,使用配置文件
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')module.exports = webpackMerge(baseConfig, {plugins: [new UglifyjsWebpackPlugin()]
})

dev.config.js:

// 发布模式,使用配置文件
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')module.exports = webpackMerge(baseConfig, {devServer: {// 为哪个文件夹提供服务contentBase: './dist',// 页面实时刷新inline: true}
})

内容持续更新中…
lvan学习笔记-文章内容仅个人观点
2020.6.7

Vue学习----第三天_webpack(学习webpack看这一篇就够了1.8w字)【6.7】相关推荐

  1. Lua脚本语言学习总结 入门、复习Lua语言看这一篇就够了

    文章目录 Lua 概念 特性 应用场景 Lua的安装 Lua的语法 第一个Lua程序 Lua的注释 标识符 关键字 运算符 全局变量&局部变量 Lua数据类型 nil boolean numb ...

  2. webpack看这一篇就够了

    文章目录 今日学习目标 1. webpack基本概念 ==webpack能做什么== 2. webpack的基本使用 2.0 创建项目 2.1 解决多次引入资源文件 2.2 webpack使用 2.3 ...

  3. 强化学习(三)—— 策略学习(Policy-Based)及策略梯度(Policy Gradient)

    强化学习(三)-- 策略学习(Policy-Based)及策略梯度(Policy Gradient) 1. 策略学习 2. 策略梯度 3. 案例 1. 策略学习 Policy Network 通过策略 ...

  4. 独家思维导图!让你秒懂李宏毅2020深度学习(三)——深度学习基础(神经网络和反向传播部分)

    独家思维导图!让你秒懂李宏毅2020深度学习(三)--深度学习基础(神经网络和反向传播部分) 长文预警!!!前面两篇文章主要介绍了李宏毅视频中的机器学习部分,从这篇文章开始,我将介绍李宏毅视频中的深度 ...

  5. 17万字 JUC 看这一篇就够了(三) (精华)

    今天我们继续来学习Java并发编程 Juc框架 ,把剩余部分学习完 17万字 JUC 看这一篇就够了(一) (精华) 17万字 JUC 看这一篇就够了(二) (精华) 文章目录 非公原理 加锁 解锁 ...

  6. Vue使用Swiper看这一篇就够了

    Vue使用Swiper看这一篇就够了 此案例实现需求 完成swiper动态异步数据下的slide渲染 自定义分页器样式 解决loop:true设置时的事件丢失问题 swiper鼠标移入/移出 暂停/开 ...

  7. nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全

    文章目录 前言 一.nginx简介 1. 什么是 nginx 和可以做什么事情 2.Nginx 作为 web 服务器 3. 正向代理 4. 反向代理 5. 负载均衡 6.动静分离 二.Nginx 的安 ...

  8. 深度学习与计算机视觉 看这一篇就够了

    来源:http://www.leiphone.com/news/201605/zZqsZiVpcBBPqcGG.html#rd 人工智能是人类一个非常美好的梦想,跟星际漫游和长生不老一样.我们想制造出 ...

  9. 强化学习面试大纲(看这一篇就够啦)

    最近在整理强化学习的一些基础知识以及面试中遇到的一些问题.问题和参考答案评论区私聊PDF版(个人看法.自己整理),文章内容大多选自David Silver的一些录像以及<强化学习导论(第二版)& ...

  10. 网络安全工程师(白帽子)前景分析+学习成长路线,超多思维导图从零到整,看完这篇就够了。

    近几年,我国网络安全形势日益严峻,网络渗透危害着我国的政治安全.经济安全.文化安全以及社会安全,网络空间的国际竞争也日趋激烈.网络安全(或称广义的信息安全)面临的威胁越来越大,对网络安全的人才需求也呈 ...

最新文章

  1. 【性能优化】 之性能视图及性能参数
  2. Powercli的一些使用案例
  3. C++中的namespace ----转载
  4. SparkMLlib回归算法之决策树
  5. 基于物理着色(二)- Microfacet材质和多层材质
  6. 简述java中异常_柴涛666 的日志-简述java中处理异常的两种方式。
  7. Python中文编码过程中遇到的一些问题
  8. 为什么 Eureka 比 ZooKeeper 更适合做注册中心?
  9. 关于Latex出现Package CJK Error
  10. java 事件冷却,基于“牛顿冷却定律”的机器学习算法
  11. TensorFlow 2.1.0 使用 TFRecord 转存与读取图片
  12. 怎么在node环境使用es6语法? bable有什么作用? 发布环境下移除console
  13. 实战 | 计算器/数码管数字识别 基于OpenCV和EasyOCR/PaddleOCR(附源码)
  14. 么是形参?什么是实参?
  15. python3 安装urllib3
  16. Escape Codec Library: ecl.js Shift_JISエンコードやEUC-JPエンコードなども可能な escape エンコード・デコード関数のライブラリ
  17. ruoyi-UI (若依)微服务版 vue前端使用及分析(2021-4-13更新)
  18. 使用Mosquitto软件测试mqtt功能
  19. 科技英语翻译计算机化考试,《信息科技英语翻译》期末考试 A卷参考答案
  20. ps cc2019版为什么做图一复制图层就卡死_PS制作一张具有故障艺术效果的人物海报...

热门文章

  1. getUserMedia` undefined 火狐firefox
  2. 怎么注册Github?用手机2分钟完成注册,互联网就是互相连接
  3. NiFi用户指南文档分析(2)
  4. linux skb 存放数据,请教关于在linux网络驱动层对skb网络数据..._网络编辑_帮考网...
  5. 【惊】手机将走向末路,混合现实(MR)难道就是5G时代的方向
  6. Windows10 LTSB/LTSC版安装应用商店与UWP
  7. 组织的目的是使平凡的人做出不平凡的事 --- 彼得.德鲁克 《卓有成效的管理者》
  8. 行列式的计算机应用结题报告,行列式计算开题报告(共10篇).doc
  9. 【学习笔记】计算机基础知识
  10. 构建数据平台探索智能应用,做企业数字化升级的得力助手