- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们希望 Webpack 有两个输出——我们的整个应用程序及其所有依赖项,以及一个只有一个依赖项的不同页面(主应用程序不共享)。
似乎这样做的方法是利用 entry
Webpack 配置的属性。但是,这还不够,因为我们还使用 HtmlWebpackPlugin用 build.js
输出我们的 HTML 文件Webpack 编译动态添加(以及编译 LESS 等)。根据 HtmlWebpackPlugin 文档:
If you have multiple Webpack entry points, they will all be included with script tags in the generated HTML.
filterChunks
选项。这个
GitHub issue response最简洁地说:
module.exports = {
entry: {
'page1': './apps/page1/scripts/main.js',
'page2': './apps/page2/src/main.js'
},
output: {
path: __dirname,
filename: "apps/[name]/build/bundle.js"
},
plugins: [
new HtmlWebpackPlugin({
inject: false,
chunks: ['page1'],
filename: 'apps/page1/build/index.html'
}),
new HtmlWebpackPlugin({
inject: false,
chunks: ['page2'],
filename: 'apps/page2/build/index.html'
})
]
};
module.exports = {
entry: {
app: './public/js/ide.js',
resetPassword: './public/js/reset_password.js'
},
output: {
path: path.resolve(__dirname, '../build'),
filename: '[name].js',
publicPath: '/'
},
...
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'public/html/ide.html',
inject: true,
chunks: ['app']
}),
new HtmlWebpackPlugin({
filename: 'reset_password.html',
template: 'public/html/reset_password.html',
inject: true,
chunks: ['resetPassword']
}),
],
}
/index.html
,我可以在网络选项卡中看到大量的捆绑文件,内容为
index.html
(基于
ide.html
模板),以及对各种外部资源的请求。但是,不会运行任何实际的 JavaScript(例如,
ide.js
中的 console.log)。显示文件中的所有 HTML。
reset_password.html
、所有 HTML 节目和
reset_password.js
文件显示,但没有运行中的 javascript。
entry
中的 JavaScript文件运行?
ide.js
工作,因为我没有意识到以下是一个“ block ”:
optimization: {
splitChunks: {
cacheGroups: {
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all'
}
}
}
},
vendor
到
index.html
HtmlWebpackPlugin
chunks
属性(property)。现在,它看起来像这样:
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'public/html/ide.html',
inject: true,
chunks: ['app', 'vendor']
}),
reset_password
node_modules 文件夹中不需要任何东西,这也不能解释为什么在
ide.js
中根本没有 JavaScript 会运行。 ,所以我还是很困惑。另外,
reset_password
仍然没有功能。
reset_password.js
查看加载时的文件
reset_password.html
,我可以看到这条线
eval("\n\nconsole.log('DRAGONHELLO');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWMvanMvcmVzZXRfcGFzc3dvcmQuanM/ZjY5ZSJdLCJuYW1lcyI6WyJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiOztBQUNBQSxRQUFRQyxHQUFSLENBQVksYUFBWiIsImZpbGUiOiIuL3B1YmxpYy9qcy9yZXNldF9wYXNzd29yZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc29sZS5sb2coJ0RSQUdPTkhFTExPJylcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./public/js/reset_password.js\n");
console.log('DRAGONHELLO')
是“看到的”,但我不知道为什么它没有运行。
vendor
至
chunks
对于
reset_password.html
导致 JavaScript 运行,但我不知道为什么,这是不理想的,因为练习的重点是有两个不同的包,一个非常小,不需要我们所有的
node_modules
.
profile:true
运行 Webpack ,我可以看到我没有弄错“ block 名称”:
js/app.3d18b43294ebd54ed083.js 1.34 MiB 0 [emitted] [big] app
js/resetPassword.198485be2b163cc258ed.js 1.02 KiB 1 [emitted] resetPassword
js/2.e7f92193ea3c611a0b36.js 2.23 MiB 2 [emitted] [big] vendor
js/app.3d18b43294ebd54ed083.js.map 2.71 MiB 0 [emitted] app
js/resetPassword.198485be2b163cc258ed.js.map 4.57 KiB 1 [emitted] resetPassword
js/2.e7f92193ea3c611a0b36.js.map 7.12 MiB 2 [emitted] vendor
module.exports = {
//...
optimization: {
runtimeChunk: {
name: entrypoint => `runtime~${entrypoint.name}`
}
}
};
module.exports = {
//...
optimization: {
runtimeChunk: true
}
};
最佳答案
这是一个多方面的问题。
一、there is a bug in Html-Webpack-Plugin这使得它与 Webpack4 和多个入口点不兼容。必须升级到v4.0.0-alpha.2至少要工作。
二、新版本不用使用 optimization.splitChunks.cacheGroups
手动分离出 node_modules。做optimization.splitChunks.chunks = 'all'
足以导致给定入口点仅进入其vendors-app-{{chunk_name}}
分 block node_modules 它实际上 import
s。
所以如果你这样做
optimization: {
splitChunks: {
chunks: 'all'
},
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'public/html/ide.html',
inject: true,
chunks: ['app']
}),
new HtmlWebpackPlugin({
filename: 'reset_password.html',
template: 'public/html/reset_password.html',
inject: true,
chunks: ['resetPassword']
}),
]
entry: {
app: './public/js/ide.js',
resetPassword: './public/js/reset_password.js'
},
imports
在您的
resetPassword.js
文件,在这种情况下,它看起来像
chunksSortMode:
不再是最新版本的 HtmlWebpackPlugin 对象上的有效选项,它显然是在 webpack4 中默认完成的。
关于javascript - 如何在 Webpack 中使用多个条目以及 HtmlWebpackPlugin 中的多个 HTML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434167/
以下是 webpack 配置条目: entry:{ background: './app/main/background.js', options: './app/main/optio
我需要缩小 2 个 JS 文件并将其中一个内联到 HTML 模板中。我有以下目录结构: - src ---- page.html ---- script-to-inline.js ---- scrip
HtmlWebpackPlugin 不会向 webpack 输出目录输出任何内容:我有这样的设置: var config = { context: __dirname + '/client',
我的环境如下 webpack 角度2 HtmlWebpackPlugin 我提取的 webpack.config.js 文件如下 entry: { 'polyfills': './src/poly
我正在尝试使用 webpack 进行代码/包分割,但是遇到了一个问题。据我所知,HTMLWebpackPlugin 应该动态地将脚本标签插入到 HTML 文件中。该 HTML 文件默认为 index.
我正在从webpack 3迁移到4,这很痛苦;) 我收到此错误: this.htmlWebpackPlugin.getHooks is not a function 我正在尝试升级所有插件,但也许我在
我有很多 HTML 文件需要处理,我正在使用 HtmlWebpackPlugin来生成它们。以下是我的 webpack 中的配置之一: new HtmlWebpackPlugin({
我对 webpack 和其他东西非常陌生,我需要一个解决方案来分离 index.html 的 base href 和 src >bundle.js,用于开发和生产,因为两者是不同的。 为了发展 基本
如何组合多个htmlwebpackplugin代码,写出更优雅的代码? 我需要一个解决方案,可以让我免于每次都重复这个 new HtmlWebpackPlugin({//..somecode}) 部分
给定输入/输出,如 entry: { app: 'src/client/app.js', unauthApp.js: 'src/client/unauth.js' }, outpu
我正在尝试使用带有 HtmlWebpackPlugin 插件的 Webpack 缩小我的 html 文件。我设法将 index.html 文件制作到我的 dist 加载器中,但我在缩小它时遇到了一些麻
我按照这个例子(http://courses.reactjsprogram.com/courses/reactjsfundamentals/lectures/760301)启动一个reactj应用程序
基于本教程: using html-webpack-plugin to generate index.html 如果您添加 标题 html-webpack-plugin 选项的选项,如下所示: new
我正在使用 HtmlWebpackPlugin 将 javascript 注入(inject)到我的模板文件中: ... ... inlineScr
我想我将从我的 webpack 配置开始。 const webpack = require('webpack'); const path = require('path'); /** * Envir
当使用HtmlWebpackPlugin生成dist/index.html文件时,我们可以使用inject选项自动创建 javascript 捆绑文件的标签: new HtmlWebpackPlugi
我正在努力提高我们网站的加载速度。所以我一直在忙于我们的 webpack.config。 经过多次修改后,我现在可以正确分离和散列模块。我还使用 HtmlWebpackPlugin 从模板中自动生成
这是我的 webpack.config.js const path = require("path"); const HtmlWebpackPlugin = require("html-webpack
我的 package.json 的一个片段 "vue": "^2.6.11", "@vue/preload-webpack-plugin": "^2.0.0", vue.config.js 文件, c
我正在使用带有 HTMLWebPackPlugin 的 Webpack 4。我目前正在处理近 30 个不同的页面,并且正在向前推进。这是我在代码中的示例... new HTMLWebp
我是一名优秀的程序员,十分优秀!