项目技术栈:Rails + webpacker
最近做项目遇到这样一个场景:
前端用 ajax 发送一个 post 请求,dataType: 'script'
后端用 JS builder,render 一个局部模版去替换页面上的部分内容
$("#step-02").html("<%= escape_javascript(render partial: "smile_sharing_referral/prospect_form", locals: { referrer: @referrer } ) %>");
问题来了:
请求成功,也可以看到返回的 JS code,但是 JS code 并没有执行。
Debug
尝试手动去执行,发现了问题:在 window 环境下的$
并不是我想要的jQuery
然后才意识到,webpacker 打包之后的 JS 并没有暴露jQuery
下面就是自己探索一番之后的结果:
"expose-loader": “0.7.5”
Rails.root/config/webpack/expose_jquery.js
module.exports = {
module: {
rules: [{
test: require.resolve('jquery'),
use: [{
loader: 'expose-loader',
options: 'jQuery'
},{
loader: 'expose-loader',
options: '$'
}]
}]
}
}
const { environment } = require('@rails/webpacker')
const exposeJquery = require('./expose_jquery.js')
environment.config.merge(exposeJquery)
module.exports = environment