Webpack详解

webpack学习过程的笔记记录

Webpack详解

认识webpack

模块和打包

webpack依赖于node环境,node环境包含各种依赖的包,npm是node包的管理工具**    

 **node依赖于package.json(通过npm init生成)      package.json依赖:输入npm install会自动帮你生成依赖 文件**

**webpack.config.js (自己创建)   配置入口出口等** 

**利用plugin插件打包index.html文件和压缩js文件**

**利用loader转化SE6  或  css等;利用plugin插件扩展webpack**

**开发模式搭建本地服务器(dev)    生产模式压缩js代码

在这里插入图片描述

前端模块化

webpack会帮你处理你的一些列的模块化内容和他们之间的依赖,处理成浏览器能识别的东西。最终帮你打包,然后将打包的东西部署给服务器就ok啦(index中只需要引用最终打包后的js文件即可)

在这里插入图片描述

webpack和grunt/gulp的对比

在这里插入图片描述

各种依赖之间的关系:

webpack依赖于node环境,node环境包含各种依赖的包,npm是node包的管理工具

node依赖于package.json(通过npm init生成) package.json依赖:输入npm install会自动帮你生成依赖 文件

package.json 里面有安装的各种环境的版本号,有脚本scripts

webpack.config.js (自己创建) 配置入口出口插件等

利用plugin插件打包index.html文件和压缩js文件

利用loader转化SE6 或 css等;利用plugin插件扩展webpack

开发模式搭建本地服务器(dev) 生产模式压缩js代码

webpack的安装

各种依赖之间的关系:

webpack依赖于node环境,node环境包含各种依赖的包,npm是node包的管理工具

node依赖于package.json(通过npm init生成) package.json依赖:输入npm install会自动帮你生成依赖 文件

webpack.config.js (自己创建) 配置入口出口等

利用plugin插件打包index.html文件和压缩js文件

项目、服务器、用户

在这里插入图片描述

node下载 Download | Node.js (nodejs.org)

黑窗口利用node的npm工具安装适应与Vue cli2依赖的3.6.0版本webpack

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpBpDVMy-1621127053337)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210510192148510.png)]

webpack的起步

创建几个文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHNWjwHB-1621127053337)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511173140746.png)]

dist(distribution(发布))----存放打包的东西,只需要把这个文件夹给服务器,让服务器发送这个文件夹即可

src(存放开发的东西)

用webpack将main.js文件打包到dist文件夹下的bundle(打包)文件中(同时自动处理模块中的依赖)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jig8sEoi-1621127053339)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511172943800.png)]

webpack ./src/main.js ./dist/bundle.js

require函数帮助解析的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JysSPOxK-1621127053340)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511172826617.png)]

打包完成后只需要在index文件中引用打包解析后的文件即可
在这里插入图片描述

webpack的配置

目的:直接写一个webpack就能直接打包文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqeaEecp-1621127053344)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511180840452.png)]

一旦项目中需要用node相关的东西的时候建议先做初始化处理

两个配置(build 出口入口)
一、webpack.config.js 配置入口出口
二、npm init配置package.json scripts最后增加个build和dev

在这里插入图片描述
node依赖于package.json 如果package.json依赖的有东西,输入npm install会自动帮你生成依赖 文件

webpack.config.js 文件中的代码解释(将入口和出口的东西放在同一个文件中了) :webpack起步的精简版

// 利用node语法导入
const { dirname } = require('path')
const path = require('path')//去node包里找path文件(需要先导入webpack依赖的包 npm init  生成)
module.exports = {
   entry: './src/main.js' ,
   output: {
    //    path: './dist',//错误,报错提示 此路径不是一个绝对路径
        // 导包成功后
                // path模块中有一个resolve函数,函数里面可以拼接两个路径
                    //  dirname是node自带的一个全局变量,其保存的就是你当前文件所在的路径   进而转化为我们最后需要的全局路径
        path: path.resolve( dirname,'dist'),
       filename: 'bundle.js'
   },
}
方法一:输入webpack生成打包后的文件

做好以上前期工作后,在直接输入webpack直接敲回车 即可生成打包后的burdle文件

方法二:输入 npm run build 生成打包后的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GE3tUQ0S-1621127053346)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511184559529.png)]

注意

写在scripts中,会优先在本地寻找webpack而不是全局(在终端控制台) 为了避免版本不一样而出错,安装本地webpack文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eUfx8EDA-1621127053346)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511184831294.png)]

package.json文件中多了一个本地版本号:

在这里插入图片描述

loader的使用

什么是loader(转化)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBYFjaN9-1621127053348)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210511215057571.png)]

配置loader

loader安装方法链接:css-loader | webpack 中文文档 (docschina.org)

控制台输入:

npm install --save-dev css-loader

webpack.config.js文件中配置

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};
const path = require('path')
module.exports = {
    entry:'./src/main.js',
    output: {
        path: path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    module: {
        rules: [
          {
            test: /\.css$/i,
            // css-loader只负责加载css文件,不帮助解析
            // style-loader负责将样式添加到DOM中
            // 放在左边的理由,use顺序从左到右
            use: ["style-loader", "css-loader"],
          },
        ],
      },
   
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1YBhYEk0-1621127053348)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512082729279.png)]

bug解决(版本过高):

(4条消息) webpack打包css报错(已解决):UnhandledPromiseRejectionWarning: TypeError: this.getResolve is not a function_Coder小何-CSDN博客

手动下调了一下版本

 "css-loader": "^3.3.0",
    "style-loader": "^1.0.0"

然后再命令行中 依次输入:

npm install
npm dev
webpack-less文件处理(可以写样式)

在这里插入图片描述
在这里插入图片描述

1.创建less文件
2.main中引入less文件
// 4.依赖less文件
require('./css/special.less')
3.配置less文件
3.1 配置less和less-loader

配置链接:less-loader | webpack 中文文档 (docschina.org)

首先,你需要先安装 lessless-loader

npm install less less-loader --save-dev

然后将该 loader 添加到 webpack 的配置中去,例如:

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.less$/i,
        loader: [
          // compiles Less to CSS
          "style-loader",
          "css-loader",
          "less-loader",
        ],
      },
    ],
  },
};
4.配置url-loader

配置链接:loader (docschina.org) url-loader (docschina.org)

图片内存小于代码的limit(默认8kb—8196)内存时:

图片自动被转化为base64位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QdqRb2a-1621127053351)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512091929583.png)]

图片内存大于代码的limit内存时:

在这里插入图片描述

需要控制台安装:

npm install file-loader --save-dev

图片自动打包被转化为新名称放在dist文件夹下,但这个的路径网页找不到------->更改配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVhYBO5G-1621127053352)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512103547682.png)]

总结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAS156t2-1621127053352)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512103926202.png)]
在这里插入图片描述

默认打包后是没有重复的32位的hash值,为了防止名字重复,而又能清楚的认识自己的图片,更新配置:
在这里插入图片描述

5.ES6语法处理
npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

在这里插入图片描述

 {
            //   检测js代码
            test: /\.m?js$/,
            // exclude(排除这个文件夹中的东西) 
            exclude: /(node_modules|bower_components)/,
            use: {
              loader: 'babel-loader',
              options: {
                presets: ['es2015']
              }
            }
          }

webpack中配置Vue

引入Vue.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDWNiwKg-1621127053353)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512121454245.png)]

报错:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2u0hDB6-1621127053354)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512122824212.png)]

原因:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ep3p4Ct-1621127053354)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512122919923.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDDjxiJj-1621127053355)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512123013881.png)]

el和template的区别

同时有el和template时,template会替换el
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5WZgHvt7-1621127053355)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512133138012.png)]

Vue文件封装处理
npm install --save-dev vue-loader vue-template-compiler 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2R0UgCUN-1621127053356)(F:/T笔记/Typora/笔记/vue阶段/Vue视频学习.assets/image-20210512142253699.png)]

报错信息:缺少一个插件

解决方案:安装插件或降低版本
在这里插入图片描述

webpack-plugin(插件)的使用

认识plugin

如果把loader理解为加载器(转化器),则plugin可以理解为扩展器
在这里插入图片描述

添加版权的Plugin

在这里插入图片描述

在webpack.config.js文件中配置

const webpack = require('webpack')
module.exports({
	plugin: [
	new webpack.BannerPlugin('最终版权归灰灰所有')
	]
})
打包html的plugin

为了使index文件也放到dist文件夹中
在这里插入图片描述

// 打包index文件的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports({
	plugin: [
	  new HtmlWebpackPlugin({
        template: 'index.html'
      })
	]
})
js压缩的Plugin

在这里插入图片描述

// 压缩js代码
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
module.exports({
	plugin: [
	   new UglifyjsWebpackPlugin()
	]
})
总结
// 版权信息插件
const webpack = require('webpack')
// 打包index文件的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 压缩js代码
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')

 plugins: [
      new webpack.BannerPlugin('最终版权归灰灰所有'),
      new HtmlWebpackPlugin({
        template: 'index.html'
      }),
      new UglifyjsWebpackPlugin()
    ]

搭建本地服务器

为了提高编译效率,提供一个内存(比磁盘读取的快很多),而不是在磁盘中(执行npm run build后才会存在磁盘中) 时刻编译打包,实时预览

服务于哪个文件夹,最终生成
在这里插入图片描述

环境配置
 module.exports({
    devServer: {//搭建本地服务器
      // 提供一些选项让知道服务于哪个文件夹
      contentBase:'./dist',
      // 实时监听 刷新
      inline: true
    }
 })
控制台输入
npm run build

(在构建项目中,最终成品)

webpack-dev-server

​ (在本地服务器中),但是报错:原因 (只要在终端敲命令都会在全局寻找)这样是在全局里面找的,而我们刚刚安装的没有加“g” 属于局部安装

绝对路径指定(可以)

在这里插入图片描述

然后控制台输入:bpm run dev

终止webpack-dev-server:corl+c

webpack配置文件的分离

开发时依赖的文件与发布时依赖的文件

需要安装:
npm install webpack-merge --save-dev

在这里插入图片描述

合并分离的base和prod base和dev

npm install webpack-merge --save-dev
		prod.config.js文件:

// 压缩js代码
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
// 合并prod和base文件
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')//导入
//    使用webpackMerge插件,对两个文件进行合并       关联baseConfig 与 本地配置
module.exports = webpackMerge(baseConfig,{
    plugins: [//插件(数组类型)
      new UglifyjsWebpackPlugin()
    ]
})
		dev.config.js文件:

// 合并dev和base文件
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')//导入

module.exports = webpackMerge(baseConfig,{
  devServer: {//搭建本地服务器
    // 提供一些选项让知道服务于哪个文件夹
    contentBase:'./dist',
    // 实时监听 刷新
    inline: true
  }
})

分离的最后操作

配置完之后就可以删除文件了
在这里插入图片描述
更改配置:

更改前
在这里插入图片描述

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

更改前:
在这里插入图片描述

更改后:

output: {
        path: path.resolve(__dirname,'../dist'),
        filename:'bundle.js',
        // publicPath:'dist/'  //配置后以后只要牵扯到url的东西都会自动加一个 dist/  路径
    },

// 实时监听 刷新
inline: true
}
})


###### 分离的最后操作

配置完之后就可以删除[外链图片转存中...(img-9r7soGto-1621127053362)]文件了

更改配置:

更改前

[外链图片转存中...(img-ipjt1yw5-1621127053363)]

//更改后
“build”: “webpack --config ./build/prod.config.js”,
“dev”: “webpack-dev-server --open --config ./build/dev.config.js”


更改前:

[外链图片转存中...(img-rP9GHUOY-1621127053363)]

更改后:

output: {
path: path.resolve(__dirname,’…/dist’),
filename:‘bundle.js’,
// publicPath:‘dist/’ //配置后以后只要牵扯到url的东西都会自动加一个 dist/ 路径
},


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱代码的猿猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值