Webpack 以错误的顺序捆绑我的文件 (CommonsChunkPlugin)

2024-03-31

我想要的是通过以下方式按特定顺序捆绑我的 JavaScript 供应商文件CommonsChunkPlugin来自 Webpack。

我正在使用CommonsChunkPlugin对于 Webpack。用法来自官方文档 https://webpack.js.org/plugins/commons-chunk-plugin/简单明了。它按预期工作,但我相信该插件按字母顺序捆绑我的文件(可能是错误的)。插件没有选项来指定它们应该捆绑的顺序。

Note:对于那些不熟悉 Bootstrap 4 的人来说,目前它 需要一个名为 Tether 的 JavaScript 库依赖项。 Tether 必须在 Bootstrap 之前加载。

webpack.config.js

module.exports = {
  entry: {
    app: './app.jsx',
    vendor: ['jquery', 'tether', 'bootstrap', 'wowjs'],
  },

  output: {
    path: __dirname + '/dist',
    filename: 'bundle.js',
  },

  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
        name: 'vendor',
        filename: 'vendor.bundle.js'
    }),

    new webpack.optimize.UglifyJsPlugin(),
  ],
};

这里发生了两件事:

  1. vendor.bundle.js包含引导程序, jquery, tether, wowjs
  2. bundle.js包含我的申请的其余部分

捆绑订单:
correct: jquery, tether, bootstrap, wowjs
不正确: bootstrap, jquery, tether, wowjs

通知在我的webpack.config.js我完全按照应有的方式订购了它们,但它们捆绑在不正确命令。即使我随机重新排列它们,结果也是一样的。

当我使用 Webpack 构建我的应用程序后,vendor.bundle.js显示了错误的顺序。

我知道它们的捆绑方式不正确,导致 Chrome Dev。工具告诉我存在依赖性问题。当我通过工具和 IDE 查看该文件时,它以错误的顺序捆绑。


我的其他方法也导致了同样的问题

我也尝试过import and require在我的条目文件中(在本例中为 app.jsx)不使用CommonChunkPlugin并且出于某种原因,它还会按字母顺序加载我的 JavaScript 库。

webpack.config.js

module.exports = {
  entry: './app.jsx',

  output: {
    path: __dirname + '/dist',
    filename: 'bundle.js',
  },

  plugins: [
    new webpack.optimize.UglifyJsPlugin(),
  ],
};

app.jsx(条目)

import './node_modules/jquery/dist/jquery.min';
import './node_modules/tether/dist/js/tether.min';
import './node_modules/bootstrap/dist/js/bootstrap.min';
import './node_modules/wowjs/dist/wow.min';

or

require('./node_modules/jquery/dist/jquery.min');
require('./node_modules/tether/dist/js/tether.min');
require('./node_modules/bootstrap/dist/js/bootstrap.min');
require('./node_modules/wowjs/dist/wow.min');

结果?
Bootstrap > jQuery > Tether > wowjs


如何以正确的顺序加载我的供应商文件?


Success!

webpack.config.js

module.exports = {
  entry: {
    app: './app.jsx',
    vendor: [
        "script-loader!uglify-loader!jquery",
        "script-loader!uglify-loader!tether",
        "script-loader!uglify-loader!bootstrap",
        "script-loader!uglify-loader!wowjs",
    ]
  },

  output: {
    path: __dirname + '/dist',
    filename: 'bundle.js',
  },

  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
        name: 'vendor',
        filename: 'vendor.bundle.js'
    }),

    new webpack.optimize.UglifyJsPlugin(),
  ],
};

这里发生了什么魔法?

  1. Webpack 创建vendor.bundle.js通过缩小和捆绑我的供应商 现在在全局上下文中执行的文件。
  2. Webpack 创建bundle.js及其所有应用程序代码

入口文件 (本例中为 app.jsx)

import './script';

该脚本只是使用 jQuery、Bootstrap、Tether 和 wowjs 的自定义 JavaScript。它执行后供应商.bundle.js,使其能够成功运行。

我在尝试执行我的任务时犯了一个错误script.js我认为它必须放在全球背景下。所以我用脚本加载器导入它,如下所示:import './script-loader!script';。最后,您不需要这样做,因为如果您通过条目文件导入,无论如何它最终都会出现在捆绑文件中。


一切都很好。

感谢@Ivan 的script-loader建议。我还注意到CommonsChunkPlugin正在拉动非缩小的供应商版本,所以我链接了uglify-loader进入这个过程。

虽然,我确实相信一些.min.js以不同的方式创建以消除额外的膨胀。虽然这是我要弄清楚的。谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 以错误的顺序捆绑我的文件 (CommonsChunkPlugin) 的相关文章

  • 单独的数据间隔 bootstrap 轮播 4

    我想为 Bootstrap 4 轮播上的每张幻灯片设置单独的数据间隔 我尝试了一些其他的 javascript 片段 但是它们似乎不适用于我的代码 例如Bootstrap 4 轮播堆栈溢出 https stackoverflow com q
  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • 检测对给定 JavaScript 事件的支持?

    我有兴趣使用 JavaScript hashchange 事件来监视 URL 片段标识符的更改 我知道非常简单的历史 http code google com p reallysimplehistory 以及用于此目的的 jQuery 插件
  • setTimeout 用于加载下拉列表中的项目

    我在用setTimeout克服 中提到的缓慢处理脚本警告 禁用 Internet Explorer 中的长时间运行脚本消息 https stackoverflow com questions 4460263 disabling the lo
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • 刷新页面后保留输入值

    我有一个带有输入字段的表单 该输入包含一个下拉菜单 从数据库中读取信息 如果用户输入值 并且当他到达下拉菜单时 他没有找到他想要的内容 他会转到另一个页面将此信息添加到下拉菜单 然后转到第一页继续输入信息 如果他转到另一个页面向下拉菜单添加
  • jQuery数据表设置列设计和成功回调中的值

    我为我的数据表编写了以下代码 它用我的数据库中的内容填充表 如下所示 if datatable null datatable destroy datatable tableProducts DataTable pageLength 50 b
  • 从 ES6 模块导入函数表达式或函数声明有什么区别?

    据我了解 参见第 16 3 2 1 节 http exploringjs com es6 ch modules html ES6 允许函数 类导出操作数使用不同的语法 区别在于导出的函数是否需要在导入时解释为函数声明 在这种情况下 您可以编
  • 如何将查询参数添加到守卫中的路由并将其传递给 Angular 4 中的组件?

    我在我的 Angular 4 应用程序中使用路由保护 如果条件满足并返回 true 我想向路由添加一个查询参数 这是我一直在研究的代码 Injectable export class ViewGuardService implements
  • TypeError:cli.init 不是 React Native 的函数

    在 MacBook Air M1 芯片中运行 npx react native init appName 时 TypeError cli init is not a function at run opt homebrew lib node
  • Moment.js 动态更新时间(以秒为单位)

    我试图显示时钟 that 每秒更新一次 e g 2015 年 1 月 5 日 12 05 01 它似乎对我来说工作得很好 对于相同的代码 并且只有 moment min js 指向v2 11 0 看看代码 来源 MilkyWayJoe va
  • Google 地图 Javascript v3 折线点击事件

    我正在尝试显示一张地图 其中有多条路线布置为折线 单击多段线时 我想显示特定于该线的数据 将数据与线关联不是问题 但无论单击哪条线 显示的数据都会与最近绘制的线关联 就好像每条新折线都会覆盖最后一条线一样 我有一个数据库 其中包含 gpx
  • Lightbox:如何翻译“Image x of x”文本?

    我使用 Lightbox 2 作为图像集 当我的网站的访问者单击该集中的缩略图时 它将显示 图像的放大版本 下面是 描述 取自 a 标题属性 其下方 文本 Image x of x 例如 Image 1 of 12 有谁知道在哪里翻译 更改
  • 如果突出显示一个单词并且用户单击连接单词,则同时突出显示两个单词

    我最近发布了一个question https stackoverflow com questions 34963610 how can i highlight a word term quicker and smarter寻求一种更智能地突
  • 如何使用转义的 unicode 解码字符串?

    我不确定这叫什么 所以我在搜索时遇到了麻烦 如何使用 unicode 解码字符串http u00253A u00252F u00252Fexample com to http example com使用 JavaScript 我试过unes
  • 如何使用 API 中的数据填充选择的下拉元素 - ReactJS

    我对 React 还很陌生 我正在从 API 获取数据 当我检查控制台日志时可以看到数据 但是我不知道如何使用 map 创建一个新数组 然后选项元素可以使用该数组来显示货币代码 目前它填充下拉列表 但选项元素全部为空 结果显示为 NaN 下
  • 禁用移动设备上的锚点菜单点击

    我使用嵌套列表作为带有子菜单项的菜单 我曾经这样做过 如果您将鼠标悬停在主菜单项上 子菜单项将通过将显示从无更改为块来出现 我决定让子菜单看起来就像是下拉的 并使用了 CSS 过渡 我遇到的问题是 在第一种方法中 如果您触摸 iPad 上的
  • 检测 html 选择框上的编程更改

    有没有办法让 HTML 选择元素在每次以编程方式更改其选择时调用函数 当使用 JavaScript 修改选择框中的当前选择时 IE 和 FF 都不会触发 onchange 此外 更改选择的 js 函数是框架的一部分 因此我无法更改它以在结束
  • 使用 javascript 从亚马逊 URL 中抓取 ASIN

    假设我有一个像这样的亚马逊产品 URL http www amazon com Kindle Wireless Reading Display Generation dp B0015T963C ref amb link 86123711 2
  • 为什么 phantomjs 不能在 MacOS Sierra 中工作?

    我们正在使用phantomjs 1 9 1 macosx phantomjs 2 0 0 macosx哪一个工作得很好OS X 埃尔卡皮坦更新后macOS 塞拉利昂它会引发以下错误 phantomjs 1 9 1 macosx phanto

随机推荐

  • 我应该避免使用“async void”事件处理程序吗?

    我知道使用 即发即弃 通常被认为是一个坏主意async void方法来启动任务 因为没有对挂起任务的跟踪 并且处理可能在此类方法中抛出的异常很棘手 我通常应该避免async void事件处理程序也是如此 例如 private async v
  • 如何使用Python的GAE开发服务器测试床模拟文件上传到blobstore

    我想编写一些单元测试 其中包括读取 blobstore 文件 https developers google com appengine docs python blobstore blobreaderclass hl pl 如何编写单元测
  • 动态 Javascript 树结构

    我想动态构建层次结构 每个节点创建为层次结构中的层 级别 具有自己的节点数组 这应该形成一个树结构 应该有一个根节点 以及未定义数量的节点和级别来构成层次结构的大小 除了根节点之外 不应修复任何内容 我不需要阅读或搜索层次结构 我需要构建它
  • 如何将录制的视频数据从 javascript 传递到 python

    我正在尝试将录制的视频数据块从某些 javascript 代码传递到我的路线 以便我可以保存它 我是新手 JavaScript 使用用户网络摄像头录制视频并将其保存为 RecordedBlob 我正在尝试将记录的 Blob 数据传递到我的
  • AngularJS + html5Mode + 自定义后备

    我有一个申请html5模式 真 但在 IE 上我不需要回退到 url 我需要的是保留 URL 并重新加载完整的页面 如果我找不到任何方法 我将需要编辑 AngularJS 文件 而这正是我不想要的 建议 Thanks 编辑 作为临时解决方案
  • 管理多个用户的 Firebase Cloud Messaging 令牌

    查看 Firebase 文档 它建议为每个客户端实例生成一个 FCM 令牌 然后必须手动存储该令牌 如果我将每个令牌链接到 Firestore 数据库中的用户文档 那么在用户注销时我是否需要手动删除设备特定的令牌 例如 用户 A 启动应用程
  • pelican:如何在 Markdown 中嵌入 html 和 javascript

    我想在博客文章中嵌入一些 html 元素和 javascript 这是我的 Markdown 文件 Title Foo Tags Bar Some Content here div div 但是 pelican 将 html 标签包装在pr
  • 展平列表

    尝试解决练习 07http www ic unicamp br meidanis courses mc336 2009s2 prolog problemas http www ic unicamp br meidanis courses m
  • 如何找到两个图像之间的所有共享区域

    我一直在尝试找到一些可以自动找到两个图像之间所有共享区域的东西not基于像素匹配或差异 经过相当多的搜索后我基本上什么也没得到 假设我有以下两张图片 在本例中是网站屏幕截图 第一个 基线 第二个非常相似 但修改了一些 CSS 所以整个块都被
  • 在 Elasticsearch 中,如何将时区应用于脚本化日期操作?

    通过下面的聚合并使用 ES5 我想根据给定时区 作为 TZ 数据库中的标识符提供 获取 dayOfWeek 和 hourOfDay 我怎样才能编辑 doc created date dayOfWeek 调整偏移量 aggs dayOfWee
  • 加解密资源库

    我的问题与以下问题相关 Android 资产文件夹的安全 https stackoverflow com questions 3406581 security of android assets folder Android 中的资产安全
  • 子pom可以继承父pom中定义的依赖排除吗?

    我不确定 Maven 是否支持 我很感激我能得到的任何帮助 我有一个定义依赖项和排除项的父 pom 我无法更改父 pom
  • php视频上传和ffmpeg不会创建缩略图

    我正在尝试为我的项目制作视频上传功能 但我有一个问题ffmpeg部分 ffmpeg已经安装在我的服务器上 但我无法获得任何缩略图 我尝试使用以下代码创建缩略图 videoa exec usr bin ffmpeg i videoUrlp f
  • Silverstripe 3:我可以在 silverstripe 中为某些页面类型设置自定义错误页面吗?

    我想知道是否可以在 silverstripe 上设置特定于某种页面类型的自定义 404 页面 而所有其他 404 错误则使用默认页面 我有一个特定的页面类型 事件 其中的事件页面在特定日期后未发布 我还有一个静态页面 其中包含一些事件的链接
  • TYPO3 存储库->添加不起作用

    我有 TYPO3 版本 7 6 18 newMessage TYPO3 CMS Core Utility GeneralUtility makeInstance Istar Femessages Domain Model Message n
  • 使用spray.json获取Json对象

    我正在使用喷雾剂 我需要退回json对象通过方法 val route path all modules get respondWithMediaType text html complete configViewer findAllModu
  • UIImage imageNamed:不会自动选择视网膜@2x图像

    假设我在捆绑包或资产目录中有三个图像 默认 iphone png 默认 2x iphone png 电子邮件受保护 cdn cgi l email protection 在 iOS 4 及更高版本上 UIImage 构造函数可以采用图像名称
  • 无法解决 Android SDK 工具的依赖关系

    我无法在 Android Studio 版本 2 3 上安装 Android SDK 工具 I got the following error 无论如何我可以解决这个错误吗 太长了 不 无论出于何种原因 Google 已决定从 Androi
  • 由于 xcodebuild 太长时间没有产生输出而终止

    我已更新到新的 Xcode 6 1 和服务器 4 0 我能够在模拟器上获得持续集成 但无法在以前版本的设备上获得持续集成 现在我已经更新了 我没有得到任何持续集成 我收到以下 2 个错误 由于 xcodebuild 太长时间没有产生输出而终
  • Webpack 以错误的顺序捆绑我的文件 (CommonsChunkPlugin)

    我想要的是通过以下方式按特定顺序捆绑我的 JavaScript 供应商文件CommonsChunkPlugin来自 Webpack 我正在使用CommonsChunkPlugin对于 Webpack 用法来自官方文档 https webpa