【问题标题】:Inject JavaScript files inside Templates or HTML with webpack使用 webpack 在模板或 HTML 中注入 JavaScript 文件
【发布时间】:2020-05-28 11:01:52
【问题描述】:

假设我有一个服务器(例如 Node 和 Express),它根据模板文件(如 pug、ejs、handlebars、twig、marko...)为客户端提供 HTML 页面。这是一个经典的多页面网站,每个页面都有自己的 JavaScript 文件。如果我使用 webpack 捆绑 JavaScript 文件,是否可以自动(通过构建步骤)将 Javascript 文件注入到相应的模板中?

我不想生成 HTML 文件,所以每个基于 html-webpack-plugin 的解决方案都不是我要搜索的。我想像使用 grunt 或 gulp 一样做,但使用 webpack 不必在每个相应的模板中手动导入每个包。

不使用 webpack 的解决方案示例:

gulp inject

post build

我在其他帖子中找不到真正的答案。

提前谢谢你。

编辑

它有点工作。我尝试使用哈巴狗,然后使用基于 SpeedOfRound 答案的 marko。我在注入文件时遇到问题,因为我的模板是嵌套的(布局、包装器、页面...),而我想要放置标签的文件中没有headbody。我使用了inject: false<%= htmlWebpackPlugin.tags.bodyTags %>(仅在v4.0 + 中可用),它可以工作,但不完全符合我的预期。在这里,我们在./dist/ 中创建了一个新文件,它不符合我的架构。我只想按模板制作一个捆绑包并自动将其注入正确的模板中。

之后,最终目标是在模板视图所在的正确文件夹中创建 JS 文件,然后它会自动注入到该视图中(以约定优于配置的方式)。

【问题讨论】:

  • 澄清一下,您有 现有 html 模板,您希望将 js 构建注入其中?
  • @SpeedOfRound 是

标签: javascript node.js npm webpack gulp


【解决方案1】:

可以通过将HtmlWebpackPlugin 指向您的模板来执行此操作。 这是我的删节版webpack.config.js,我在其中使用小胡子模板进行此操作。

const path = require("path");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: {
    entry: "./js/app.js",
  },  
  output: {
    path: path.join(__dirname, 'dist'),
    filename: "[name].js",
    chunkFilename:'[name].[chunkhash].js',
    publicPath: '/dist/'
  },
  plugins: [
    new webpack.ProvidePlugin({
      'React': 'react',
    }),
    new HtmlWebpackPlugin({
      inject: 'head',
      filename: path.resolve(__dirname, './templates/dist/app.mustache'),
      template: path.resolve(__dirname, "./templates/app.mustache"),
      chunks: ['entry'],
      favicon: "./public/favicon.ico"
    }),
  ]
}

这对于代码拆分非常有用,您可以将构建拆分为块并将多个块注入您的页面。这样您就可以重用块,并且浏览器只需在页面之间加载一次。

不一定是小胡子,我也用 php 视图来做这个。

【讨论】:

  • 谢谢。它接近我想要的。我编辑了我的帖子以提供更多详细信息。
  • 这个想法是您在实际应用程序中使用/dist 中生成的模板,而您的原始模板是您开发的模板。您的原始版本无法修改,因为那样它们会在构建时更改,并且您必须每次都提交更改。您还将累积您的注射,因为上一次将保存上次的注射。
  • 我明白这一点,但它并不能真正满足我的需求。我只想将捆绑文件注入到我的实际模板中。
  • 我认为你做不到。如果您的输出名称中不包含chunkhash,您可以将路径硬编码到您的模板中。每次构建时文件都会更新,但名称保持不变。
猜你喜欢
  • 2021-04-07
  • 2017-12-01
  • 1970-01-01
  • 2019-12-30
  • 2020-02-28
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多