Vue学习笔记——webpack详解

视频资源来自:b站coderwhy王红元老师——最全最新Vue、Vuejs教程,从入门到精通
文章仅为个人观看视频后的学习心得笔记,用于个人查看和记录保存。文中定有疏漏错误之处,恳请指正。

webpack详解

认识webpack

什么是Webpack

image-20210707110422055

前端模块化

和grunt/gulp的对比

面试可能会问

grunt/gulp的核心是Task

如果工程模块依赖非常简单,甚至是没有用到模块化的概念。只需要进行简单的合并、压缩,就使用grunt/gulp即可。

如果整个项目使用了模块化管理,而且相互依赖非常强,使用webpack<font color=#909534 >[强调模块化开发管理]</font>打包。

image-20210707112628116

webpack的安装

node 10.13.8

webpack的起步

src:源码

dist:distribution打包好了的,发布

Terminal:

D:\study\vue\临时\LearnVuejs04-v2\01-webpack的使用\01-webpack的起步>webpack ./src/main.js ./dist/bundle.js

<font color=#909534 >把main.js打包成bundle.js</font>

//使用commomjs的模块化规范
const {add,mul} = require('./mathUtils')
console.log(add(20,30));

//使用ES6的模块化的规范
import {name,age,height} from "./info"
console.log(name);

webpack的配置

入口和出口

创建webpack.config.js

const path = require('path')
//这个时候控制台按npm init

module.exports = {
  entry: './src/main.js',
  output: {
    //动态获取路径
    path: path.resolve(__dirname,'dist'),
    filename: 'bundle.js'
  },
}
//控制台敲 webpack,如果文件名不是上面的,那webpack后面还要跟config的文件名

const path = require('path')——node自带的包,得出当前路径

path.resolve()——连接两个路径

__dirname——node带的,表示当前路径

npm init——对其初始化

D:\study\vue\临时\LearnVuejs04-v2\01-webpack的使用\02-webpack的配置>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See npm help json for definitive documentation on these fields
and exactly what they do.

Use npm install <pkg> afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (02-webpack的配置)
Sorry, name can only contain URL-friendly characters.
package name: (02-webpack的配置) meetwebpack
version: (1.0.0)
description:
entry point: (webpack.config.js) index.js
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\study\vue\临时\LearnVuejs04-v2\01-webpack的使用\02-webpack的配置\package.json:

{
"name": "meetwebpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC"
}

Is this OK? (yes)

D:\study\vue\临时\LearnVuejs04-v2\01-webpack的使用\02-webpack的配置>

image-20210707155146527

build是自己取的,npm run build相当于执行webpack

↑会先找本地,找不到再找全局

局部安装webpack

npm install webpack@3.6.0 --save-dev——本地安装webpack(开发者模式)

如果在终端<font color=#909534 size=2>[webstorm或者cmd]</font>里敲webpack,始终是找全局的。

但是npm run buildnode_modules/.bin/webpack<font color=#909534 size=2>※尝试失败※</font>优先用本地的

css-loader的使用

什么是louder

将ES6转成ES5代码,将TypeScript转成ES5代码,将scss、less转成css,将.jsx、.vue文件转成js文件等等

css文件处理

安装 css-loader:npm install --save-dev css-loader@2.0.2

在mian.js里添加require('./css/normal.css')。不需要传出对象,因为不会用,只是是其产生依赖,才能打包

此时的webpack.config.js

const path = require('path')
//这个时候控制台按npm init

module.exports = {
  entry: './src/main.js',
  output: {
    //动态获取路径
    path: path.resolve(__dirname,'dist'),
    filename: 'bundle.js'
  },
   module: {
    rules: [
      {
        //正则表达式
        test: /\.css$/i,
        //webpack使用多个louder时,是从右向左读的。先处理css后style
        use: ["style-loader","css-loader"],
      },
    ],
  },
}

style-loader 将模块导出的内容作为样式并添加到 DOM 中

安装:npm install --save-dev style-loader@0.23.1

css-loader 只负责加载css

less文件处理

less-loader 加载并编译 LESS 文件

安装:npm install --save-dev less-loader less@4.1.0

图片文件的处理

安装:npm install --save-dev url-loader@1.1.2

{
  test: /\.(png|jpg|gif|jpeg)$/,
  use: [
    {
      loader: 'url-loader',
      options: {
      //当加载的图片小于limit时,会将图片编译成base64字符串格式
      //如果limit太大,浏览器加载的图片也会那么多,加载时间长
        limit: 13000,
        //不加中括号文件名字就叫name了
        name: 'img/[name].[hash:8].[ext]'
      }
    }
  ]
}

如果图片超过limit,则需要用file-loader。

对于需要打包的大图片:

webpack.config.js 里的 module.exports里的方法

output: {
    //动态获取路径
    path: path.resolve(__dirname,'dist'),
    filename: 'bundle.js',
    //只要是url开头的,地址前默认加上↓
    publicPath: 'dist/'
  },

打包的图片自动命名为一个32位的hash值<font color=#909534 size=2>[为了防止重复]</font>

太长一串了!!于是:自定义修改打包后的图片名,在option里添加

name: 'img/[name].[hash:8].[ext]'——所有打包的图片都放在dist的img文件夹中。文件命名为:文件原名.截取8位hash值.文件原后缀名

Babel的使用

将ES6的语法转成ES5<font color=#909534 size=2>[没有const]</font>

安装:npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

配置:

{
  test: /\.js$/,
  //exclude:排除
  exclude: /(node_modules|bower_components)/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['es2015']
    }
  }
}

webpack中配置Vue

引入vue.js

引用:import Vue from 'vue' <font color=#909534 size=2>为什么可以这样写?↓</font>

没有写路径时,就去model里找。model里边默认导出的就是Vue:export default Vue

下载:npm install vue@2.5.21 --save

-dev 表示开发时依赖,因为项目中会使用Vue.js所以不加dev

报错:

runtime-only :代码中,不可以有任何的templa

runtime-complier : 代码中,可以有template,因为有complier可以用于编译template

<font color=#909534 >alias:别名 廖雪峰:git教程</font>

webpack配置

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

指定方式找文件夹,否则就默认找vue.runtime.js了。指定找vue.esm.js
$表示结束

SPA(simple Page web application) -> vue-router(前端路由)

el和template区别

template会替换el

使用.vue文件时

npm install vue-loader@15.4.2 vue-template-compiler@2.5.21 --save-dev

省略后缀名:webpack配置的resolve解决问题的

extensions: ['.js','.css','.vue']

plugin的使用

plugin:框架/插件

react -> MIT

添加版权的Plugin

webpack配置文件:

plugins:[
   new webpack.BannerPlugin('最终版权归YY所有')
]
image-20210707230522018

打包html的plugin

将index.html文件打包到dist文件夹

下载:npm install html-webpack-plugin@3.2.0 --save-dev

引用:const HtmlWebpackPlugin = require('html-webpack-plugin')

在plugins里

new HtmlWebpackPlugin({
  template: 'index.html'
})

使得每次新生成的html文件里自动引入原html的<div id="app"></div>

js压缩的Plugin

<font color=#909534 >打包的时候才用</font>

下载:npm install uglifyjs-webpack-plugin@1.1.1 --save-dev

然后生成的js代码会很丑,,挤在一起

搭建本地服务器

存储在内存里,npm run build后才会存储到磁盘里

下载:npm install --save-dev webpack-dev-server@2.9.1

配置:开发的时候才用

devServer: {
  contentBase: './dist',
  inline: true
}

json增加描述"dev": "webpack-dev-server"

cmd:npm run dev

在cmd点端口号进入

终止批处理操作:ctrl+c

webpack配置的分离

公共环境、生产环境、开发环境分离

公共环境:就是之前配置文件的内容,去除了开发环境、生产环境的部分。base.config.js

开发环境:dev.config.js

/*开发环境,添加对公共环境的依赖*/
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')

module.exports = webpackMerge(baseConfig,{
  devServer: {
    contentBase: './dist',
    inline: true
  }
})

生产环境:prod.config.js

/*生产环境,添加对公共环境的依赖*/
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')

module.exports = webpackMerge(baseConfig,{
  plugins:[
    new UglifyJSPlugin()
  ],
})

指令修改:

"build": "webpack --config ./build/prod.config.js",
    "dev": "webpack-dev-server --open --config ./build/dev.config.js"

总目录:
总目录:
邂逅Vuejs
Vue基础语法
组件化开发
前端模块化
webpack详解
Vue CLI详解
vue-router
Promise的使用
Vuex详解
网络模块封装
项目实战

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容