webpack中<%= %>(ejs语法)无效的原因

本文探讨了在使用Webpack过程中遇到的一个问题:html-webpack-plugin与html-loader全局配置导致的EJS语法解析失败。文章提供了具体的解决方案,即移除全局html-loader配置,并在需要时手动加载。

今天在使用webpack过程中发现在一个html模板文件中通过ejs语法引用另一个html文件无效,ejs语句直接出现在了打包后的文件中。

后来发现这是因为html-webpack-plugin会于全局配置的html-loader发生冲突,造成webpack无法解析ejs语句。

如果这样定义:

module : {
    loaders  : [
        {test : /\.html$/, loader : 'html-loader'}
    ]
},
plugins : [
    new htmlWebpackPlugin(para)
]

就会造成这种情况。

解决的办法之一是将全局的loader去掉,改为引用html时调用loader。

如 :

require('html-loader!htmlFile.html')
const path = require('path'); module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/product-data/' : '/', assetsDir: 'static', configureWebpack: { resolve: { alias: { '@': path.resolve(__dirname, 'src'), '@components': path.resolve(__dirname, 'src/components'), '@views': path.resolve(__dirname, 'src/views'), }, }, plugins: [ new (require('webpack').DefinePlugin)({ __VUE_OPTIONS_API__: true, __VUE_PROD_DEVTOOLS__: false, __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false }) ] }, // 开发服务器配置 devServer: { proxy: { // 使用环境变量中的API地址作为代理目标 '/api': { target: process.env.VUE_APP_BASE_API, changeOrigin: true, pathRewrite: { '^/api': '' } } }, client: { overlay: false }, // 新增端口配置,支持环境变量或默认值 port: process.env.VUE_APP_PORT }, // 生产环境配置 productionSourceMap: false, css: { extract: true, }, chainWebpack: config => { config.plugin('html').tap(args => { args[0].title = '产品数据管理系统'; return args; }); } };从提供的 index.html 内容来看,静态资源路径未包含上下文路径 /product-data/,导致浏览器请求时直接访问根路径下的 /static/,从而触发 404 错误。以下是详细的修复方案: 一、问题原因分析 1. 资源路径缺失上下文前缀 当前 index.html 中的资源路径: html 预览 <script defer src="/static/js/chunk-vendors.js"></script> <link href="/static/css/app.765bed1d.css" rel="stylesheet"> 问题:路径以 /static/ 开头,未包含上下文路径 /product-data/,导致浏览器请求 http://localhost:8080/static/...,而实际资源位于 http://localhost:8080/product-data/static/...。 2. Vue 配置中的 publicPath 错误 若 vue.config.js 中 publicPath 未正确设置为 /product-data/,打包后会生成错误的资源路径。
06-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值