【发布时间】:2017-08-16 17:34:00
【问题描述】:
我想要的是通过来自 Webpack 的 CommonsChunkPlugin 以特定顺序捆绑我的 JavaScript 供应商文件。
我正在为 Webpack 使用 CommonsChunkPlugin。 official documentation 的用法简单明了。它按预期工作,但我相信插件按字母顺序捆绑我的文件(可能是错误的)。插件没有选项来指定它们应该捆绑的顺序。
注意:对于不熟悉 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(),
],
};
这里发生了两件事:
-
vendor.bundle.js包含 bootstrap、jquery、tether、 哇 -
bundle.js包含我的应用程序的其余部分
捆绑顺序:
正确: jquery、tether、bootstrap、wowjs
错误: bootstrap、@ 987654332@,tether,wowjs
在我的 webpack.config.js 中注意,我完全按照应有的顺序订购了它们,但它们以 不正确的 顺序捆绑在一起。如果我随机重新排列它们并不重要,结果是一样的。
在我使用 Webpack 构建我的应用程序后,vendor.bundle.js 向我显示了错误的顺序。
我知道它们捆绑不正确导致 Chrome 开发。工具告诉我存在依赖性问题。当我通过工具和我的 IDE 查看文件时,它的捆绑顺序不正确。
我的其他方法也导致了同样的问题
我还在我的入口文件 (在本例中为 app.jsx) 中尝试了 import 和 require,但没有使用 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';
或
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
如何以正确的顺序加载我的供应商文件?
【问题讨论】:
-
字母顺序是否有问题?它是有目的的,因此顺序不会影响内容。 “因为 Chrome 开发工具告诉我存在依赖性问题。” --- 有什么细节吗?
-
@zerkms 好吧,如果按字母顺序完成,会有很大的问题。一个是 Bootstrap 需要先加载 jQuery 和 Tether,否则它无法正常运行。
-
bundle 中的放置顺序不会以任何方式影响它们在运行时加载的顺序。您遇到的问题是由其他原因引起的。
-
我有同样的问题,但是我怎么知道我的包是按什么顺序加载的?
标签: javascript webpack webpack-2 uglifyjs