英雄介绍

崴博.派克诞生于遥远西方的勇士之地,拥有着高超的机械技艺,善于运用各种工具来实现一些看似不可能完成的事。游历王者大陆时机缘巧合遇到了年轻的墨子,与之成为好友。后协助大宗师墨子建造了大陆第一雄城,被后人称为上古文明终结后最伟大的奇迹——长安!长安以“方舟”为驱动核心中枢,配合层出不断的机关,守护着华丽的大明宫。派克为人低调,不喜出现在大众视野,他是需求人性启迪的理想主义者,信奉着唯有光荣进化才能实现人类的全部潜能。

姓名:崴博.派克(webpack)

热度排名:T0

胜率:98%

登场率:80%(中大型项目90%)

Ban率:10%

操作难度:★★★★★

技能:

被动:(自成长型魔械技术)

cd:0秒

派克开场就会携带者他的专属装备【loader】,能够提供给他属性,并且能在商店里升级为进阶物品【plugin】,从而增强他的技能。

虹吸能量(entry 入口)

派克指定初始装备开始进化的准备,期间享受韧性加成20%,升级后可指定多个装备进化。

(entry用于指定入口文件,可配置一个或多个。)

基础使用:

  1. module.exports = {
  2. entry: './path/to/my/entry/file.js' // 默认可配置一个路径字符串
  3. };

进阶使用:

  • 字符串:默认普通路径字符串./src
  1. const config = {
  2. entry: './src/a.js'
  3. };
  • 数组: 传入一个路径数组将创建多个主入口,适用于将多个依赖文件导入一个chunk时可以这么操作。
  1. const config = {
  2. entry: ['./src/a.js','./src/b.js','./src/c.js',]
  3. };
  • 对象:传入一个对象指定不同入口的key值(入口名称)和value(路径),字符串写法是对象写法的简写。适用于多页面应用
  1. const config = {
  2. entry: {
  3. app: './src/app.js',
  4. vendors: './src/vendors.js'
  5. }
  6. };
  1.  

魔影迷踪:(output 出口)

cd:10秒

派克在经过n(取决于当前派克进行工作的复杂度)秒的吟唱后传送至指定地点。

(output用于配置打包完成文件的输出和命名,配置output的最低标准是设置一个对象包含以下两点:)

  1. filename 输出文件的文件名
  2. path 输出目录的绝对路径

基础使用:

  1. const path = require('path');
  2.  
  3. module.exports = {
  4. entry: './src/js/file.js',
  5. output: {
  6. path: path.resolve(__dirname, 'dist'),
  7. filename: 'test.bundle.js'
  8. }
  9. };
  1.  

进阶使用:

当配置了多入口文件并且想输出不同chunk时应该对filename使用占位符来保证文件名称的唯一性。

占位符:

  • name——使用入口名称

  • id——使用内部chunk id

  • hash——使用每次构建过程中的唯一hash

  • chunkhash——使用基于每个chunk内容的hash

  • query——使用文件名?后面的字符串

  1. {
  2. entry: {
  3. app: './src/app.js',
  4. search: './src/search.js'
  5. },
  6. output: {
  7. filename: '[name].js',
  8. path: __dirname + '/dist'
  9. }
  10. }
  11. 复制代码

吸星大法(loader)

cd:8秒

派克可以同化其他英雄的技能,将其转换为自身可用的能量。成功吸取基础属性+200%。

(webpack本身只能处理js文件。loader可以将其它文件类型转换为webpack能够处理的模块,并对其进行打包或其它操作。它与modules模块配合使用,通过配置module.rules实现。loader相当于其他工具中的task(任务)。)

loader的核心有两个属性:

  • test:匹配需要通过loader进行转换的文件
  • use: 指定通过哪个loader进行转换

基础配置:

  1. const path = require('path');
  2.  
  3. const config = {
  4. output: {
  5. filename: 'test.bundle.js'
  6. },
  7. module: {
  8. rules: [
  9. { test: /\.txt$/, use: 'raw-loader' }
  10. ]
  11. }
  12. };
  13.  
  14. module.exports = config;
  15. 复制代码

进阶配置:

rules允许你在处理一个文件时配置多个loader,只需要给use传入一个数组包含不同loader对象

  1. module: {
  2. rules: [
  3. {
  4. test: /\.css$/,
  5. use: [
  6. { loader: 'style-loader' },
  7. {
  8. loader: 'css-loader',
  9. options: {
  10. modules: true
  11. }
  12. }
  13. ]
  14. }
  15. ]
  16. }

  

骚操作:可以在import语句使用!将资源中的loader分开,这样可以不配置webpack从而使用一个内联方式进行loader处理,但不推荐这种方式,因为它很难维护。

  1. import Styles from 'style-loader!css-loader?modules!./styles.css';

光荣进化(plugins 插件)

cd:35秒

派克进化loader,通过plugin对5000码范围内的己方英雄进行增幅、强化,并进入霸体状态持续10秒。

(不同于loader用来解析非js的文件类型,plugin可以用来处理更复杂的任务,包括打包、优化、压缩,最小到重定义环境变量。它是非常强大的,除了插件市场提供的成熟插件,还可以自己进行编写。plugin为loader带来了更多的特性,它存在的目的在于解决loader无法实现的其他事情。

使用插件只需要require()它,然后再添加到plugin模块中,通常情况下多数插件是可自定义的,所以想在一个配置文件中使用不同配置功能的插件,必须通过new创建一个新的实例。)

基础配置:

  1. const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
  2. const webpack = require('webpack'); // 用于访问内置插件
  3.  
  4. const config = {
  5. module: {
  6. rules: [
  7. { test: /\.txt$/, use: 'raw-loader' }
  8. ]
  9. },
  10. plugins: [
  11. new HtmlWebpackPlugin({template: './src/index.html'})
  12. ]
  13. };
  14.  
  15. module.exports = config;
  1.  

双重人格(mode 模式)

cd:1.5秒

派克切换形态,工作狂模式:移速增加50%,艺术家模式:减速30%同时增加自身韧性50%,免疫控制。

(通过mode配置开发环境(development)和生产环境(production),可以启用相应模式下webpack的内置优化。)

development:启用NamedChunksPluginNamedModulesPlugin插件

production:启用FlagDependencyUsagePlugin,FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPluginUglifyJsPlugin插件。

配置:

  1. module.exports = {
  2. mode: 'production' // 或development
  3. };

智者光辉(reslove 模块解析)

cd:60秒

派克指定位置进入快速寻路模式,并自动分析最近路线,且无视地形障碍。

(通过配置resolve来解析文件路径,reslove中可以配置使用专属插件。)

目前支持解析三种文件路径: 绝对路径、相对路径、模块路径

配置alias别名(最常用)

创建 import 或 require 的别名可以使模块引入变简单。 例:

  1. alias: {
  2. Utilities: path.resolve(__dirname, 'src/utilities/'),
  3. Templates: path.resolve(__dirname, 'src/templates/')
  4. }

未配置alias:

  1. import Utility from '../../utilities/utility';

已配置alias:

  1. import Utility from 'Utilities/utility';

百宝箱(module 模块)

派克拥有可以储存任何物质的空间物,可以分类储存装备。激活后装备栏增加3,自身移速减20%

(通过配置module处理项目中的不同类型的模块。) rules匹配规则数组(最常用) 创建模块时,匹配请求的规则数组。通过规则能够修改模块的创建方式。这些规则能够对模块(module)应用 loader,或者修改解析器(parser)。

  1. const config = {
  2. module: {
  3. rules: [
  4. { test: /\.css$/, use: 'css-loader' }
  5. ]
  6. }
  7. };
  1.  

推荐出装

文件处理

  • raw-loader 加载文件原始内容(utf-8)
  • val-loader 将代码作为模块执行,并将 exports 转为 JS 代码
  • url-loader 像 file loader 一样工作,但如果文件小于限制,可以返回 data URL
  • file-loader 将文件发送到输出文件夹,并返回(相对)URL

JSON

  • json-loader 加载 JSON 文件(默认包含)
  • json5-loader 加载和转译 JSON 5 文件
  • cson-loader 加载和转译 CSON 文件

转换编译(Transpiling)

  • script-loader 在全局上下文中执行一次 JavaScript 文件(如在 script 标签),不需要解析
  • babel-loader 加载 ES2015+ 代码,然后使用 Babel 转译为 ES5
  • buble-loader 使用 Bublé 加载 ES2015+ 代码,并且将代码转译为 ES5
  • traceur-loader 加载 ES2015+ 代码,然后使用 Traceur 转译为 ES5
  • ts-loader 或 awesome-typescript-loader 像 JavaScript 一样加载 TypeScript 2.0+
  • coffee-loader 像 JavaScript 一样加载 CoffeeScript

模板(Templating)

  • html-loader 导出 HTML 为字符串,需要引用静态资源
  • pug-loader 加载 Pug 模板并返回一个函数
  • jade-loader 加载 Jade 模板并返回一个函数
  • markdown-loader 将 Markdown 转译为 HTML
  • react-markdown-loader 使用 markdown-parse parser(解析器) 将 Markdown 编译为 React 组件
  • posthtml-loader 使用 PostHTML 加载并转换 HTML 文件
  • handlebars-loader 将 Handlebars 转移为 HTML
  • markup-inline-loader 将内联的 SVG/MathML 文件转换为 HTML。在应用于图标字体,或将 CSS 动画应用于 SVG 时非常有用。

样式

  • style-loader 将模块的导出作为样式添加到 DOM 中
  • css-loader 解析 CSS 文件后,使用 import 加载,并且返回 CSS 代码
  • less-loader 加载和转译 LESS 文件
  • sass-loader 加载和转译 SASS/SCSS 文件
  • postcss-loader 使用 PostCSS 加载和转译 CSS/SSS 文件
  • stylus-loader 加载和转译 Stylus 文件

清理和测试(Linting && Testing)

  • mocha-loader 使用 mocha 测试(浏览器/NodeJS)
  • eslint-loader PreLoader,使用 ESLint 清理代码
  • jshint-loader PreLoader,使用 JSHint 清理代码
  • jscs-loader PreLoader,使用 JSCS 检查代码样式
  • coverjs-loader PreLoader,使用 CoverJS 确定测试覆盖率

框架(Frameworks)

  • vue-loader 加载和转译 Vue 组件
  • polymer-loader 使用选择预处理器(preprocessor)处理,并且 require() 类似一等模块(first-class)的 Web 组件
  • angular2-template-loader 加载和转译 Angular 组件

常用插件

  • ProgressPlugin(webpack自带):用于统计打包进度
  • IgnorePlugin(webpack自带):忽略本地的一些模块
  • DllPlugin(webpack自带):预打包文件
  • DllReferencePlugin(webpack自带):项目打包引用预打包生成的文件
  • AssetsWebpackPlugin:为打包生成的js等生成路径引用指引
  • HappyPack:运用多核加速打包
  • ExtractTextPlugin:将打包中的css单独抽离出来
  • EnvironmentPlugin(webpack自带):在webpack层面定义项目中可以使用的全局变量
  • DefinePlugin(webpack自带):在webpack层面定义项目中可以使用的全局变量 与EnvironmentPlugin的形式不同而已
  • CleanWebpackPlugin:清理指定目录的文件
  • CopyWebpackPlugin:将指定目录的文件赋值到指定目录下
  • HtmlWebpackPlugin:webpack打包后自动生成html页面
  • ParallelUglifyPlugin:加速压缩

本期英雄介绍完毕,祝大家早日国服王者,我们下期见。

假如用王者荣耀的方式学习webpack的更多相关文章

  1. python学习--第二天 爬取王者荣耀英雄皮肤

    今天目的是爬取所有英雄皮肤 在爬取所有之前,先完成一张皮肤的爬取 打开anacond调出编译器Jupyter Notebook 打开王者荣耀官网 下拉找到位于网页右边的英雄/皮肤 点击[+更多] 进入 ...

  2. CNN网络介绍与实践:王者荣耀英雄图片识别

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者介绍:高成才,腾讯Android开发工程师,2016.4月校招加入腾讯,主要负责企鹅电竞推流SDK.企鹅电竞APP的功能开发和技术优化工作 ...

  3. 王者荣耀交流协会-Alpha发布用户使用报告

    用户数量:10人 姓名如下(包括化名):张小斌.王瑞瑞.蛋蛋.小美.晨曦.小丽.张利刚.小闫.小谢.小崔 寻找的用户多为王者荣耀交流协会成员的同学,对管理时间有着强烈的需求,也对PSP Daily软件 ...

  4. Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输

    腾讯王者荣耀的开发来来来出来聊聊,真是日了狗了,多次离上王者还差两三颗星的时候队友就开始水的一塌糊涂,对面就牛逼的不行. 又连跪回去了,被对面把屎都打出来了,实在忍不住来吐槽,你们这个排位匹配算法到底 ...

  5. 当会打王者荣耀的AI学会踢足球,一不小心拿下世界冠军!

    难得的元旦小假期,没有什么比得上在慵懒的冬日艳阳下放松自己,拿起手机,叫上了许久未一起作战的小伙伴,到王者荣耀中激战了一番,仿佛又回到了当年那个年轻的自己. 厉害不,毕竟当年DD也是王者五十星的水平, ...

  6. Python 爬取 "王者荣耀.英雄壁纸" 过程中的矛和盾

    1. 前言 学习爬虫,最好的方式就是自己编写爬虫程序. 爬取目标网站上的数据,理论上讲是简单的,无非就是分析页面中的资源链接.然后下载.最后保存. 但是在实施过程却会遇到一些阻碍. 很多网站为了阻止爬 ...

  7. 深入学习webpack(一)

    深入学习webpack(一) 模块化的相关库和工具已经很多了,包括require.js.sea.js和一些工程化工具webpack.gulp.grant.那么我们该如何选择呢? 其实,我们只需要掌握了 ...

  8. 浅谈canvas绘画王者荣耀--雷达图

    背景: 一日晚上下班的我静静的靠在角落上听着歌,这时"滴!滴!"手机上传来一阵qq消息.原来我人在问王者荣耀的雷达图在页面上如何做出来的,有人回答用canvas绘画.那么问题来了, ...

  9. webpack4 学习 --- webpack和webpack-dev-server

    以前了解过webpack2, 所以对webpack 不是很陌生,就直接入主题吧.新建一个文件夹,就叫它webpack-tut吧.然后在文件中新建一个src 文件夹,存放我们的源文件,再在src 文件夹 ...

随机推荐

  1. PAS

    一.概念 二.安装 打开Delphi,在主菜单上选择Component,单击Install Component,出现图所示的对话框.有两个选择,装到已经存在的包里面和装到新的包里面.我们选择后者,单击 ...

  2. The Super Powers UVA - 11752

    题目大意:将范围从1~pow(2,64)-1内的super power输出.super power的定义:一个数x至少存在两种x=pow(i,k),(k!=1). 题解: 注意数据范围2的64次方-1 ...

  3. copy模块中的copy与deepcopy的区别

    前言 每空闲下来,就觉得以前写的博客很low........也许现在也很low~~~~好吧就当升级版的low吧~~~~ 如果要了解copy与deepcopy的区别,就需要了解Python的存储机制:P ...

  4. 65535与TCP连接数的关系测试结论

    首先说结论: .是否有关系 .有关系 对于客户端 -.对于客户端来说,只有65535,因为根据TCP四元组的sport来说,sport只有16位,所以(2^16)-1是65535.也就是最多有6553 ...

  5. 【错误】python百分号冲突not enough arguments for format string

    query = "SELECT * FROM devices WHERE devices.`id` LIKE '%{}%'".format("f2333") d ...

  6. [转载]利用分块传输绕过WAF进行SQL注入

    原理 客户端给服务器发送数据的时候,如果我们利用协议去制作payload,就可以绕过http协议的waf,实现SQL注入 分块传输编码(Chunked transfer encoding)是HTTP中 ...

  7. eclipse 集成git工具

    1.eclipse git插件下载 打开Eclipse,然后点击Help>Install New Software>Add name:git location:http://downloa ...

  8. 最简单的懒人springcloud之Eureka(服务注册与发现)

    本文开发软件是STS,是eclipse为springboot项目而生的一个软件,用这个软件开发spring的项目版本都会自己对应的,话不多说直接上代码 springboot版本2.1.8.RELEAS ...

  9. fashion_mnist多分类训练,两种模型的保存与加载

    from tensorflow.python.keras.preprocessing.image import load_img,img_to_array from tensorflow.python ...

  10. php 常量的使用

    我们来看下直接的例子 <?php //定义常量 //常量不可被删除 //常量一旦被定义,就无法重新置换 //常量一旦定义,就不能对他第二次定义,否则会报错! define('MYCONSTANT ...