带你了解 webPack_小小的星芒的博客-程序员秘密

技术标签: webpack  vue  前端  

学习webPack的作用

如果你从事前端工作,那你一定用过或者听说过webPack,现在最流行的三个前端框架(Vue.js, React.js, AngluarJS)都与webPack紧密相连,如果想让我们前端技术有一个质的提升,那你不得不了解学习webPack,否则你向前端进步的脚步会受到阻碍,

工作原理

将项目作为整体,通过给定的主文件(如: index.js)从主文件开始找到项目的所有依赖的文件,使用loaders处理她们,最后打包为一个或者多个,浏览器可以识别的javaScript文件,
注意:webpack只能打包commonJS的规范下的js文件

安装webPack

  1. 创建一个文件夹(webpack_demo)
  2. 全局安装webPack

npm install -g webpack

  1. 初始化项目
    打开控制台,进入我们刚才建立的文件夹,输入下面的命令行,这时候我们会看到 package.json文件

npm init

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

  1. 建立配置文件

webpack.config.js就是webPack的配置文件,这个文件需要我们手动建立在项目的根目录下。
webpack.config.js主要分为5大模块:

module.exports = {
entry: {}, //入口文件
output: {}, // 出口文件
module:{}, // 模块
plugins: {}, // 插件
devServer:{} // webpack开发服务功能
}

webpack.config.js配置

这里才是我们今天的重点之重,webpack的所有的知识点都在这里,必须画重点了,接下来让我们一起了解webpack各个配置的具体作用

入口文件配置项–entry

入口配置项里面放的文件,表示我们从哪里开始打包我们的文件,
entry有三种方式:

  • 第一种: 表示文件只有一个入口index.js文件,即只打包一个index.js文件
    module.exports = {
    
      entry:{
    
        index: './index' 
      }
    }
  • 第二种: 打包多个同级文件,会被打包到同一个文件里面
    module.exports = {
    
      entry:['./index1','./index2']
    }
  • 第三种: 打包多页面,会被打包到不同的文件里面
    module.exports = {
    
      entry:{
    
      index1: './index1',
      index2: './index2'
	  }
    }

出口文件配置项–output

出口文件的配置项,表示打包后的文件所在的地方
这里面有三个参数:

  • path:表示打包后的文件所在位置,图例是放在dist文件夹下面
  • filename:表示打包后文件的名字,【name】表示源文件的名字,一搬会用到【chunkhash】表示版本,当文件发生变化的时候chunkhash变化,否则不变
  • publicPath: 打包后引入js文件路径会统一加个./
    module.exports = {
    
	    output:{
    
	      path: path.resolve(__dirname, 'dist'),
	      filename: '[name].bundle.js',
	      publicPath: './' 
	    }
    }

模块配置项–module

模块主要是解析css和图片转换压缩等功能,其实说白了就是处理非js文件,将文件转化为webpack可以处理的有效模块。
值得注意下:之前webpack配置加载器的时候使用loaders,但是现在使用rules,所以下面主要对rules进行讲解
module一般有一下几个配置项

  • test: 用于匹配文件的扩展名,进而识别应该被loader转化的文件。 【必填】
  • use: loader的名称,执行顺序从后向前 【必填】
  • include: 手动添加必须处理的文件,可以加快webpack的搜索速度,用于优化loader 【可选】
  • exclude:手动添加需要排除的文件,和include一样都可以优化loader【可选】
  • loader:它和use一样都是表示loader的名字,区别是一个是use是数组可以加载多少,而loader只加载一个
   module.exports = {
    
    module:{
    
         rules: [{
    
   			test: /\.css$/,  // 匹配后缀为.css的文件
   			use: ['style-loader', 'css-loader'], 
   			include: path.resolve(__dirname, src), //  加载src目录下的js文件
   			exclude: path.resolve(__dirname, 'node_modules')// 排除node_modules 文件
   		] 
       }
   }

插件–plugins

用于扩展webpack的功能,引入项目需要的插件

   module.exports = {
    
    plugins:{
    
         new HappyPack({
    
           id: 'js',
           cache: true,
           loaders: ['babel-loader?cacheDiretory=true'],
           ThreadPool: happThreadPool
          })
       }
   }

开发服务器功能 – devServer

用于监听你的代码的修改,并自动刷新显示修改后的结果,devServer是一个本地开发服务器,基于node.js构建。它有以下配置项:
contentBase: 本地服务器加载的页面所在的目录

  • host:设置服务器Ip
  • compress: 表示服务端压缩是否开启
  • port:配置服务器端口号
  • inline: 表示是否实时刷新
   module.exports = {
    
    devServer:{
    
         contentBase: path.resolve(__dirname, 'dist'), //加载dist文件夹下面的文件
         host: 'localhost', 
          compress: true, // 开启服务器压缩
           port: 1717, // 端口号是1717
           inline: true // 实时刷新
       }
   }

以上是本人对webpack的简单的认识,如有不足的地方,望提醒

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43589225/article/details/90703513

智能推荐

【Unity】Unity接入讯飞语音的IOS SDK_Unity_阿黄的博客-程序员秘密

因为在工作中的项目要求 要博主去接讯飞的IOS SDK 相信网上大多数资料都是接Android的SDK 说道接IOS 的SDK 对于不懂OC 的博主 这就头大了 ,恰巧在蛮牛上看到双哥的一个视频从中了解到如何接IOS 的SDK,并整理下来。地址:http://edu.manew.com/course/112在蛮牛教育中的视频 要花钱的 不过 蛮牛的会员 可以免费观看。 首先在讯飞I

table中的td内容超出隐藏_UzumakiHan的博客-程序员秘密

<table style="table-layout: fixed;width: XXX px"> <tr> <td style="white-space: nowrap;text-overflow: ellipsis;overflow: hidden;" ></td> </tr></table> table标签需要设定属性 table-layout: fixed;width

objective-c 编程的几个调试技巧_objective-c技巧之_gzeehg007的博客-程序员秘密

1、gdb     调试终端窗口是一种与gdb进行交流的途径。当程序是终止或者是停在断点处时,你可以发送命令给gdb。当出现gdb提示符(prompt)的时候你可以与gdb进行交互。     gdb command:http://developer.apple.com/library/mac/#documentation/DeveloperTools/gdb/gdb/gdb_4.html

TEA加密算法学习_2ha0yuk7on.的博客-程序员秘密

概述  TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。加密过程  TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数

leetcode (22) - Generate Parentheses_报恩的猫的博客-程序员秘密

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:[ "((()))", "(()())", "(())()", "()(())",

随便推点

谷歌浏览器新版本跨域问题的解决_谷歌107版本跨域的原因和解决跨域的方法_一颗苹果想要成为一个星球的博客-程序员秘密

新建一个文件夹,例如C:/ChromeDevSession,然后直接创建chrome浏览器的快捷方式,在属性中找到目标,在…chrome.exe后面加上下面的代码,文件夹地址自行替换。 --args --disable-web-security --user-data-dir="C:/ChromeDevSession"...

关于java中BufferedReader的read()及readLine()方法的使用心得_buf.readline()_小妞贼毒的博客-程序员秘密

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象String str = null;b...

UVA 748 Exponentiation 高精度乘法_Gatevin的博客-程序员秘密

这题输出两个实数的pow次幂的计算结果,忽略前导零和

html5白鹭引擎 ui,Egret3DCanvas_Cecilia Lei的博客-程序员秘密

Egret3DCanvas入门Egret3DCanvas基础该篇教程将讲述Egret3D中的一个基础组件Egret3DCanvas,基本上所有的Egret3D的其他组件都是基于Egret3DCanvas进行显示交互的。但在使用它之前,我们需要简单的了解下它在Egret3DCanvas中究竟起到了什么作用:(1)事件管理对象的持有者,详情可以参考Event教程。(2)渲染视图列表的管理和维护。(3)...

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析_呆呆敲代码的小Y的博客-程序员秘密

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝!世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

推荐文章

热门文章

相关标签