[webpack3.8.1]Guides-4-Output Management(输出管理)

Output Management

This guide extends on code examples found in the Asset Management guide.

       这个指南将在上一个指南的基础上对示例代码进行扩展。

So far we've manually included all our assets in our index.html file, but as your application grows and once you start using hashes in filenames and outputting multiple bundles, it will be difficult to keep managing your index.html file manually. However, a few plugins exist that will make this process much easier to manage.

       到现在为止,我们已经给index.html手动包含了所有的资源,但是,一旦开始使用哈希值为文件名并输出多个包,index.html将难以手动管理文件。然而,有一些插件可以使这个过程更容易管理。

Preparation (预备)

First, let's adjust our project a little bit:

       首先,让我们调整一下我们的项目:

project

  webpack-demo|- package.json|- webpack.config.js|- /dist|- /src|- index.js
+   |- print.js|- /node_modules

Let's add some logic to our src/print.js file:

       让我们添加一些逻辑到src/print.js

src/print.js

export default function printMe() {console.log('I get called from print.js!');
}

And use that function in our src/index.js file:

        在我们的src/index.js使用那个函数吧。

src/index.js

  import _ from 'lodash';
+ import printMe from './print.js';function component() {var element = document.createElement('div');
+   var btn = document.createElement('button');element.innerHTML = _.join(['Hello', 'webpack'], ' ');+   btn.innerHTML = 'Click me and check the console!';
+   btn.onclick = printMe;
+
+   element.appendChild(btn);return element;}document.body.appendChild(component());

Let's also update our dist/index.html file, in preparation for webpack to split out entries:

        我们也给我们的dist/index.html升升级,准备webpack拆分条目。

dist/index.html

  <html><head>
-     <title>Asset Management</title>
+     <title>Output Management</title>
+     <script src="./print.bundle.js"></script></head><body>
-     <script src="./bundle.js"></script>
+     <script src="./app.bundle.js"></script></body></html>

Now adjust the config. We'll be adding our src/print.js as a new entry point (print) and we'll change the output as well, so that it will dynamically generate bundle names, based on the entry point names:

        现在,调整配置。我们将要添加我们的src/print.js作为一个新的条目,而且,我们还要改变输出,以便于它能够动态地生成基于入口点名称的捆绑后的名称。

webpack.config.js

  const path = require('path');module.exports = {entry: {
-     index: './src/index.js',
+     app: './src/index.js',
+     print: './src/print.js'},output: {
-     filename: 'bundle.js',
+     filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}};

Let's run npm run build and see what this generates:

       让我们运行npm run build,看看生成了什么:

Hash: aa305b0f3373c63c9051
Version: webpack 3.0.0
Time: 536msAsset     Size  Chunks                    Chunk Namesapp.bundle.js   545 kB    0, 1  [emitted]  [big]  app
print.bundle.js  2.74 kB       1  [emitted]         print[0] ./src/print.js 84 bytes {0} {1} [built][1] ./src/index.js 403 bytes {0} [built][3] (webpack)/buildin/global.js 509 bytes {0} [built][4] (webpack)/buildin/module.js 517 bytes {0} [built]+ 1 hidden module

We can see that webpack generates our print.bundle.js and app.bundle.js files, which we also specified in our index.html file. if you open index.html in your browser, you can see what happens when you click the button.

       我们可以看到,webpack生成了我们的print.bundle.jsapp.bundle.js还有很多我们在index.html中定义的文件。如果你在浏览器中打开index.html,当你点击按钮时你就可以看到发生了什么。

But what would happen if we changed the name of one of our entry points, or even added a new one? The generated bundles would be renamed on a build, but our index.html file would still reference the old names. Let's fix that with the HtmlWebpackPlugin.

       但是,如果我们把其中一个入口点改名,会发生什么呢?更甚者,我们添加了一个新的会发生什么呢?我们生成的打包的文件将会在编译中重命名,但是我们的index.html文件仍然关联的是旧文件名。让我们使用HtmlWebpackPlugin来修复这个bug。

Setting up HtmlWebpackPlugin (启动HtmlWebpackPlugin)

First install the plugin and adjust the webpack.config.js file:

       首先,安装插件,调整webpack.config.js文件:

npm install --save-dev html-webpack-plugin

webpack.config.js

  const path = require('path');
+ const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {entry: {app: './src/index.js',print: './src/print.js'},
+   plugins: [
+     new HtmlWebpackPlugin({
+       title: 'Output Management'
+     })
+   ],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}};

Before we do a build, you should know that the HtmlWebpackPlugin by default will generate its own index.html file, even though we already have one in the dist/ folder. This means that it will replace our index.html file with a newly generated one. Let's see what happens when we do an npm run build:

       在我们开始一个编译之前,你应当知道HtmlWebpackPlugin是会默认创建一个index.html的,即便我们已经有一个放在dist/文件夹里了(`・ω・´)。这就意味着呀,我们的index.html将会被覆盖 Σ(っ°Д°;)っ让我们来看一下,当我们运行npm run build会发生什么吧:

Hash: 81f82697c19b5f49aebd
Version: webpack 2.6.1
Time: 854msAsset       Size  Chunks                    Chunk Namesprint.bundle.js     544 kB       0  [emitted]  [big]  printapp.bundle.js    2.81 kB       1  [emitted]         appindex.html  249 bytes          [emitted][0] ./~/lodash/lodash.js 540 kB {0} [built][1] (webpack)/buildin/global.js 509 bytes {0} [built][2] (webpack)/buildin/module.js 517 bytes {0} [built][3] ./src/index.js 172 bytes {1} [built][4] multi lodash 28 bytes {0} [built]
Child html-webpack-plugin for "index.html":[0] ./~/lodash/lodash.js 540 kB {0} [built][1] ./~/html-webpack-plugin/lib/loader.js!./~/html-webpack-plugin/default_index.ejs 538 bytes {0} [built][2] (webpack)/buildin/global.js 509 bytes {0} [built][3] (webpack)/buildin/module.js 517 bytes {0} [built]

If you open index.html in your code editor, you'll see that the HtmlWebpackPlugin has created an entirely new file for you and that all the bundles are automatically added.

       如果你在你的代码编辑器中打开了index.html,你将会看到HtmlWebpackPlugin已经为你创建了一个全新的文件,而且所有需要捆绑的文件都已经自动地添加上了。

If you want to learn more about all the features and options that the HtmlWebpackPlugin provides, then you should read up on it on the HtmlWebpackPlugin repo.

       如果你想学习更多HtmlWebpackPlugin提供的关于特性和选项的内容,然后你应当专门攻读HtmlWebpackPlugin的报告。

You can also take a look at html-webpack-template which provides a couple of extra features in addition to the default template.

       你也可以稍微看看html-webpack-template,它提供了一组默认模板额外的特性。

Cleaning up the /dist folder (/dist文件夹大扫除)

As you might have noticed over the past guides and code example, our /dist folder has become quite cluttered. Webpack will generate the files and put them in the /dist folder for you, but it doesn't keep track of which files are actually in use by your project.

       你应该也注意到了,经过一系列的指南和咱们的代码例子,咱这个/dist文件夹啊,已经非常凌乱了(╬ ̄皿 ̄)

In general it's good practice to clean the /dist folder before each build, so that only used files will be generated. Let's take care of that.

       通常来说,在每一次编译之前清理/dist文件夹是一种优良品格(~ ̄▽ ̄)~ 。这样呀,只有真正被使用的文件才会生成。让我们来处理一下吧。

  1. popular plugin to manage this is the clean-webpack-plugin so let's install and configure it.

       clean-webpack-plugin是所有做这类事情的流行插件中的一个,那么好,我们来安装和配置一下它吧!

npm install clean-webpack-plugin --save-dev

webpack.config.js

  const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');
+ const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports = {entry: {app: './src/index.js',print: './src/print.js'},plugins: [
+     new CleanWebpackPlugin(['dist']),new HtmlWebpackPlugin({title: 'Output Management'})],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}};

Now run an npm run build and inspect the /dist folder. If everything went well you should now only see the files generated from the build and no more old files!

       现在(๑¯∀¯๑),我们运行npm run build并且监视/dist文件夹,如果一切正常,你将只会看到编译后的文件,之前的旧文件没啦!

The Manifest (清单)

You might be wondering how webpack and its plugins seem to "know" what files are being generated. The answer is in the manifest that webpack keeps to track how all the modules map to the output bundles. If you're interested in managing webpack's output in other ways, the manifest would be a good place to start.

       你也许会好奇,webpack和它的插件是怎么知道哪些文件是需要生成的,哪些没用呢?答案是这样的,webpack会一直跟踪更新一个清单,这个清单上会记录所有的模块到输出的映射关系。如果你对于使用其它方式来管理webpack的输出,manifest是一个不错的选择。

The manifest data can be extracted into a json file for easy consumption using the WebpackManifestPlugin.

       清单数据可以提取到一个JSON文件,以便于使用WebpackManifestPlugin。

We won't go through a full example of how to use this plugin within your projects, but you can read up on the concept page and the caching guide to find out how this ties into long term caching.

       我们将不会详细介绍如何在您的项目中使用这个插件,但是您可以阅读概念页面和缓存指南,了解这些内容如何与长期缓存联系起来。

Conclusion (总结一下)

Now that you've learned about dynamically adding bundles to your HTML, let's dive into the development guide. Or, if you want to dig into more advanced topics, we would recommend heading over to the code splitting guide.

       现在,你已经学习了有关如何动态添加绑定到你的HTML,让我们一头扎进开发指南的海洋里吧。或者,如果你想深挖更多的更高级的主题,我们强烈推荐您赶紧踏上代码分割指南的征途。

P.S.:本来想很严肃地翻译官网的指南来着,突然间发现没几个小盆友看, ̄へ ̄,干脆加点自己喜欢的宅文化表情。希望爱逛B站的小伙伴们喜欢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言试题145之创建一个链表

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:创建一个链表 2 、温馨提示 …

[转]IntelliJ IDEA 2019.3正式发布,给我们带来哪些新特性?

每篇一句 工欲善其事必先利其器 ——《论语卫灵公》 前言 千呼万唤始出来。自从JetBrains在今年7月24日发布了IDEA 2019.2版本后&#xff0c;从9月份开始我便一直在关注此版本正式版的发布。JetBrains公司在9月中旬就对外公布了下一个主要版本 2019.3的Roadmap&#xff0c;而且…

FineReport中以jws方式调用WebService数据源方案

在使用WebService作为项目的数据源时&#xff0c;希望报表中也是直接调用这个WebService数据源&#xff0c;而不是定义数据连接调用对应的数据库表&#xff0c;这样要怎么实现呢&#xff1f; 在程序中访问WebService应用服务&#xff0c;将WebService返回的数据转为程序数据集&…

C语言试题148之海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:海滩上有一堆桃子,五只猴子…

一文读懂什么是CTO、技术VP、技术总监、首席架构师

究竟什么是CTO&#xff0c;一个公司真的需要CTO么&#xff1f;哪些公司的职位对于技术管理者来讲真的是CTO的职位&#xff1f;同样是技术最高负责人&#xff0c;为什么有人叫CTO、有人叫技术总监、技术VP&#xff0c;有人叫首席架构师&#xff1f;他们之间的差别是什么&#xf…

与MySQL传统复制相比,GTID有哪些独特的复制姿势?

与MySQL传统复制相比&#xff0c;GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军&#xff0c;苏宁云商IT总部资深技术经理&#xff0c;从事数据库服务相关的开发和维护工作&#xff0c;之前曾长期从事富士通关系数据库的开发&#xff0c…

【ArcGIS Pro微课1000例】0007:ArcGIS Pro 2.5质量检查:拓扑创建与编辑案例教程

文章目录 1. 加载矢量数据2. 创建数据库、要素数据集3. 拓扑创建4. 拓扑错误编辑与修改1. 加载矢量数据 矢量数据可以是单独shp格式的文件数据,也可是存在于数据库中的要素类。 2. 创建数据库、要素数据集 创建数据库 无论是在ArcMap,还是ArcGIS Pro中,创建拓扑都需要在…

C语言试题149之809乘以??=800乘以??+9乘以??+1 其中??代表的两位数,8乘以??的结果为两位数,9乘以??的结果为 3 位数。求??代表 的两位数,及 809乘以??后的结果

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:809*??=800*??+9*??+1…

.Net之时间轮算法(终极版)定时任务

TimeWheelDemo一个基于时间轮原理的定时任务对时间轮的理解其实我是有一篇文章(.Net 之时间轮算法(终极版)[1])针对时间轮的理论理解的&#xff0c;但是&#xff0c;我想&#xff0c;为啥我看完时间轮原理后&#xff0c;会采用这样的方式去实现。可能只是一些小技巧不上大雅之堂…

phpstorm config include paths for swoole

配置phpstorm 当你写swoole 类或者函数时会自动补全 https://github.com/swoole/ide-helper.git 克隆下这个工具包 点加&#xff0c;然后指定你下载好的工具包路径&#xff0c;点ok 本文转自 skinglzw 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/sking…

C语言试题150之八进制转换为十进制

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:八进制转换为十进制 2 、温馨…

【ArcGIS风暴】ArcGIS创建栅格数据集色彩映射表案例--以GlobeLand30土地覆盖数据为例

矢量数据快速符号化&#xff0c;可以将常用的样式保存到样式符号库&#xff0c;栅格数据快速符号化&#xff0c;需要创建色彩映射表。本文以GlobeLand30土地覆盖数据为例&#xff0c;详解ArcGIS中创建与使用色彩映射表。 文章目录一、 ArcGIS色彩映射表介绍二、土地覆盖数据色彩…

Visual Studio 2019 16.3.10 初体验

Visual Studio 2019 版本 16.3.10 发布时间&#xff1a;2019 年 11 月 20 日 官网地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 介绍&#xff1a; https://devblogs.microsoft.com/visualstudio/dot-net-core-support-in-visual-studio-2019-version-16…

【ArcGIS风暴】GlobeLand30全球数据处理教程(批量投影转换、无效值处理、拼接)

本文讲述GlobeLand30全球数据批处理流程&#xff0c;主要步骤包括&#xff1a;批量分幅投影转换、批量分幅无效值处理、批量图幅拼接和成品展示。由于图幅数目和数据量较大&#xff0c;本文是采用Python代码批量实现的&#xff0c;有关Python的基本操作及处理案例&#xff0c;可…

Docker 私有仓库的搭建

Docker在2015年推出了distribution项目&#xff0c;即Docker Registry 2。相比于old registry&#xff0c;Registry 2使用Go实现&#xff0c;在安全性、性能方面均有大幅改进。Registry设计了全新的Rest API&#xff0c;并且在image存储格式等方面不再兼容于old Registry。去年…

请查收.NET MAUI 的最新学习资源

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;3分钟)2022 年 5 月 23 日&#xff0c;.NET MAUI 正式发布。.NET MAUI 为您提供了一流的跨平台 UI 堆栈&#xff0c;面向 Android、iOS、macOS 和 Windows。我们很高兴地宣布&#xff0c;有几种不同的学习 .NET MAUI …

C语言试题151之求 0到7 所能组成的奇数个数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:求 0—7 所能组成的奇数个数…

腾讯2016春招之算法编程解析

第一道题&#xff1a;求有删除情况的最长回文子串 题目&#xff1a; 解题思路&#xff1a; 这个题严格意义上来说&#xff0c;删除了字符就谈不上回文串了&#xff0c;既然有删除&#xff0c;那估计考察的不是回文串&#xff0c;而是其他的&#xff0c;但是这个东西又有回文串的…

【EPS精品教程】EPS2016三维测图版安装教程(附EPS2016安装包下载地址)

文章目录 一、安装过程二、软件安装包下载EPS地理信息工作站是北京清华山维新技术开发有限公司历经十五年精心研发和打造,为满足“以地理信息服务为中心”的信息化测绘生产需求而推出的测绘生产活动多种业务模块集成化软件系统。主要功能有: (1)测绘与地理信息多业务模块集…

禁锢自己的因素,原来有这么多

2022年的7月&#xff0c;朋友圈都能看到喜庆的时刻&#xff0c;庆祝香港回归25周年&#xff0c;这确实是一个具有伟大里程碑的意义。同时也是建党101周年&#xff0c;满满的荣誉感&#xff0c;隔着朋友圈都能感受到喜庆。家事国事天下事&#xff0c;事事关心&#xff0c;关心但…