webpack - 使用 webpack 生成多个 html 文件

标签 webpack webpack-dev-server

我正在尝试在一个项目中做一些事情,但我不确定是否可能,我的方式错误或误解了某些东西。我们正在使用 webpack,其想法是提供多个 html 文件。

localhost:8181 -> 提供index.html
localhost:8181/example.html -> 提供 example.html

我试图通过设置多个入口点来做到这一点,遵循 documentation :

文件夹结构为:

/
|- package.json
|- webpack.config.js
  /src
   |- index.html
   |- example.html
   | /js
      |- main.js
      |- example.js

Webpack.config.js:

...
entry: {
    main: './js/main.js',
    exampleEntry: './js/example.js'
},
output: {
    path: path.resolve(__dirname, 'build', 'target'),
    publicPath: '/',
    filename: '[name].bundle.js',
    chunkFilename: '[id].bundle_[chunkhash].js',
    sourceMapFilename: '[file].map'
},
...

index.html

<!DOCTYPE html>
<html
<head>
    ...
    <link type="text/css" href="/style/default.css">
</head>
<body>
    <div id="container"></div>
    <script src="/main.bundle.js"></script>
</body>
</html>

示例.html:

<!DOCTYPE html>
<html
<head>
    ...
    <link type="text/css" href="/style/default.css">
</head>
<body>
    ...
    <script src="/example.bundle.js"></script>
</body>
</html>

有人知道我做错了什么吗?

谢谢。

最佳答案

将入口点视为树的根,该树引用许多其他资源,例如 javascript 模块、图像、模板等。当您定义多个入口点时,您基本上会将 Assets 分割成所谓的 block ,以免将所有代码和 Assets 放在一个包中。

我认为您想要实现的是为不同的应用程序提供多个“index.html”,这些应用程序还引用您已经使用入口点定义的不同 Assets block 。

复制一个index.html文件或者甚至生成一个引用这些入口点的文件不是由入口点机制处理的——反之亦然。处理 html 页面的基本方法是使用 html-webpack-plugin ,它不仅可以复制 html 文件,而且还具有广泛的模板机制。如果您想让 bundle 带有 bundle 哈希后缀,这非常有用,这样可以避免更新应用程序时出现浏览器缓存问题。

由于您已将名称模式定义为 [id].bundle_[chunkhash].js,您无法再将您的 javascript 包引用为 main.bundle.js 作为它将被称为类似 main.bundle_73efb6da.js

看看 html-webpack-plugin 。特别适合您的用例:

你最终可能应该有类似的东西(警告:未经测试)

plugins: [
  new HtmlWebpackPlugin({
    filename: 'index.html',
    template: 'src/index.html',
    chunks: ['main']
  }),
  new HtmlWebpackPlugin({
    filename: 'example.html',
    template: 'src/example.html',
    chunks: ['exampleEntry']
  })
]

请注意引用 block 数组中入口点的名称,因此在您的示例中,这应该是 exampleEntry。将模板移动到特定文件夹中而不是将它们直接放在根 src 文件夹中可能也是一个好主意。

关于webpack - 使用 webpack 生成多个 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39798095/

相关文章:

javascript - 未捕获的类型错误 : Cannot read property 'webpackHotUpdate' of undefined

javascript - webpack 中的 css 配置不检测类样式但检测元素样式

javascript - 使用 `Error: Could not locate the bindings file.` 时如何解析 `node-ffi` ?

reactjs - 无法从适用于 Chrome 的 React DevTools 修改组件属性

Webpack 用小项目创建大文件

apache - 当被 Webpack Dev Server 代理时,Wordpress 重定向到本地主机而不是虚拟主机

angular - Angular-CLI/Webpack 项目中的错误 'not found' 警告

Angular 2 - 如何在使用 webpack 进行测试时将 scss 与 bootstrap 4 结合使用

javascript - Vue.js 2 + Webpack、V-Model 绑定(bind)并从 router.params 加载数据,可选默认值不起作用

node.js - 找不到模块'source-map-support/register