为了账号安全,请及时绑定邮箱和手机立即绑定

在做js加载html时的复盘经验

我们要做一个这样的功能:
在一个组件中需要加载一个 html 文件来进行展示,比如:协议之类的。

最后完美解决了这个问题,描述一下过程:
首先,觉得 js 不能 import 或 require html 文件,尝试过的确不行。

找到一个解决办法就是写一个逻辑,在构建项目的时候,把这些 html 文件放到打包的目录下,然后在业务逻辑里面,使用 iframe 引用当前文件的形式加载,可是这么做,在开发的时候就看不到效果,只能是在构建好时才能访问。

还想到过把 html 文件改造成组件,然后 import 进来,是很笨的办法。

还去网上找了一遍如何在 vue,react 中导入 html 文件,无果。

期间还是有考虑到使用 webpack 配置项的形式来处理这个问题,但是没有头绪。

最后在 webpack 官网找到了 html-loader,发现它能够处理 html 文件,于是尝试使用它,发现可行,但是它把 html 文件都集合进 js 包里面了,得将它抽离出来,于是找到 extract-loader,后来又找到 file-loader,得将它们仨合起来一起使用,才能发挥出力量。

在调 file-loader 的时候,走了很多弯路,最主要是在研究正则,怎样去排除掉index.html,因为我发现它会把 index.html 也处理了。

最后,发现一个配置项:include: [resolve('src')],
它的作用是把搜索的范围限制在 src 目录里面,又因为 index.html 文件不在 src 目录中,于是问题得以解决,也不用费劲去研究正则怎么写了。

总结:

如果一开始就往 webpack 配置项这个方向去考虑,想到 webpack 能处理一切类型的文件,只需要合适的 loader 来配合就可以。那么我就会想到会不会有一个能够处理 html 的 loader 来加载 html 文件,最后再熟悉 include 配置项,就可以缩短解决问题的时间。

代码

// module: {// rules: [{        test: /\.html$/,        include: [resolve('src')],        use: [
          {            loader: 'file-loader',            options: {              name: "[name].[ext]",              outputPath: 'html/'
            },
          },
          {            loader: 'extract-loader'
          },
          {            loader: 'html-loader',            options: {              minimize: true,              removeComments: false,              collapseWhitespace: false,
            }
          },
        ],
      },// ]// }



作者:kybetter
链接:https://www.jianshu.com/p/f861d275ab10


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消